logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

AVR Bascom - Timer1 w ATmega169 nie wywołuje przerwania, co robię źle?

czajnik01 02 Gru 2012 14:12 1662 12
REKLAMA
  • #1 11600770
    czajnik01
    Poziom 11  
    Witam
    od 2 godzin draże problem i już troszkę jestem bezradny. Sprawa tyczy się procesora jak w temacie czyli ATmegi169 i Timera1 w niej. Chcę wywołać najprostsze przerwanie po przepełnieniu i żadnym sposobem mi się nie udaje.
    To że wszytko jest poprawnie testuję tak ze po podmienieniu w kodzie 1 na 0 (zmiana z timera1 na timer0) wszytko zaczyna ładnie chodzić. Program tez wielce skomplikowany nie jest bo dla testu tylko macham nogą żeby ledek mrugał.

    kod:

    Kod: text
    Zaloguj się, aby zobaczyć kod

    chodzi bez problemu.

    Ktoś ma jakiś pomysł??
  • REKLAMA
  • #3 11600863
    landy13
    Poziom 31  
    czajnik01 napisał:
    config timer0 = timer, prescale = 64
    timer1 =55536
    Takie coś chodzi bez problemu?
  • REKLAMA
  • #4 11600867
    czajnik01
    Poziom 11  
    ver. 1.11.8.1 z 2005 roku wg "About".

    Jeśli chodzi o pytanie o to czy chodzi bez problemu to jest to oczywiście tylko pomyłka wynikająca z tego że pisałem kod w poście z palca a nie kopiując. W sprawdzanym programie oczywiście jest zmiana dla timera0 na prescaller = 1024 i wartość początkową 178 tak żeby mniej więcej wychodziło 10ms przy 8MHz.

    Pozdrawiam
    Czajnik01

    Dodano:

    Wyprzedzając zainstalowałem najnowszą wersję 2.07 i również nie działa ... do tego rozjechały mi się opóźnienia czasowe bo zdaje się inne są mechanizmy kompilujące. No ale tak czy inaczej tim1 nie ruszył.
  • #5 11601175
    jousto
    Poziom 17  
    a czy dla Ciebie to bez różnicy że Timer0 jest licznikiem 8 bitowym a Timer1 16 bitowym?

    Dodano po 5 [minuty]:


    konfigurujesz Timer0 - config timer0 = timer, prescale = 64

    a ładujesz timer1 - timer1 =55536
    jak to ma ruszyć
  • #6 11601232
    czajnik01
    Poziom 11  
    A czy kolega mógłby przeczytać skrupulatniej? :) ma ruszyć normalnie tak jak napisałem post przed tym jak kolega swoja opinię :) W pierwszym poście to po prostu pomyłka.

    Pozdrawiam
    Czajnik
  • REKLAMA
  • #7 11601288
    robiw
    Poziom 26  
    A możesz powiedzieć po co przed i w przerwaniu ładujesz timer wartością 65536 czyli wartością nie mieszcząca się w 16 bitach? W takim przypadku go zerujesz, no chyba, że Bascom co innego tam ładuje w przypadku takiego bledu...robiw

    Dodano po 4 [minuty]:

    Nie napisałeś też jakim zegarem taktujesz procek i nie widzę też ustawienia kierunku portu portd.1.robiw
  • REKLAMA
  • #8 11601308
    czajnik01
    Poziom 11  
    nic panowie nie czytacie :P ładuje watrością nie 65000 tylko 55000 a to różnica :)
    Napisałem ze usiłuję uzyskać przerwanie 10ms przy kwarcu 8MHz w drugim poście.

    Jeśli chodzi o ustawiania portów itd to pomijam takie rzeczy żeby nie zaciemniać.

    Z tym że:

    Panowie na ten moment nie jest to problemem zupełnie ponieważ timer nie odpowiada nawet bez początkowego ładowania.

    Doszedłem do etapu kiedy wiem ze mi się timer włącza i liczy ponieważ puściłem timer w pętli głównej zczytuje jego wartość i porównuje ze stałą. W efekcie jak timer mniejszy to dioda świeci jak większy to nie świeci.

    Czyli wg mojego pojmowania problemem jest to ze nie jest generowane samo przerwanie.
    tzn składnia

    on timer1 tim_1

    nie powoduje skoku przy przepełnieniu timera.
  • #9 11601364
    robiw
    Poziom 26  
    Nie wiem kto tu nie czyta. Dajesz listing gdzie jest 65536 a potem piszesz, że ładujesz 55000 a nie 65000. A my to wróżki jesteśmy? Nie konfigurujesz nawet kierunku portu itd. Nie szukaj problemu w Bascomie bo błędów tak prostych to tam nie ma raczej. Z reszta zobacz do pliku ze skompilowanym kodem to się przekonasz czy stosowne przerwanie jest zezwolone.robiw

    Dodano po 1 [minuty]:

    poza tym Ty chcesz widzieć miganie diody 50 razy na sekundę?robiw
  • #10 11601397
    jousto
    Poziom 17  
    dobra żeby uciąć to możesz zapodać cały listing programu który chcesz żeby pracował?

    Proszę poprawić treść wiadomości - 3.1.13
    [zumek]
  • #11 11601473
    czajnik01
    Poziom 11  
    Reflektując się.. jesli kogoś uraziłem to wybaczcie ale już mnie trafia jak można zmarnować pół dnia na uruchomienie timera.

    Poniżej program który napisałem tylko po to żeby uruchomić timer. Kod ten jest bez ustawiania portów in/out jak i bez definicji zmiennych. Jedynej zmiennej "Czas" używam do przechwycenia wartości timera.


    Kod: text
    Zaloguj się, aby zobaczyć kod



    Sprzetowy PWM na OCR2a jest ustawiony dlatego ze w urządzeniu mam nadrzędne sterowanie jasnością wszystkiego.

    W efekcie:

    Na nóżce DP z pętli głównej otrzymuje PWM o wypełnieniu 5000/2^16 tak jakbym tego oczekiwał.

    Na nóżce 1a z przerwania nie ma przebiegu żadnego choć powinienem dostać 50% przebieg o częstotliwości dwa razy mniejszej od powyższego.

    Pozdrawiam
    Czajnik

    Dodano po 25 [minuty]:

    Dodano...

    Jednak znalazłem błąd w bascomie...

    Zadziałało mi kiedy dołożyłem wstawkę ala asm...

    
    
    Config Timer1 = Timer , Prescale = 256
    On Timer1 Tim1
    ***************
    Set Timsk1.0
    ***************
    Enable Timer1
    
    


    Jeśli komuś nie będzie chciało się szukać po rejestrach to znaczy ze przy tym uC bascom nie interpretuje poprawnie linii (chyba)

    
    
    Enable timer1
    
    


    bo Timsk1.0 to flaga odblokowania przepełnienia Tim1
  • #12 11601619
    robiw
    Poziom 26  
    Sprawdze Ci to jutro bo dzisiaj pisze z komórki. Może być błąd definicji w pliku m169def.dat.robiw
  • #13 11602007
    piotrva
    VIP Zasłużony dla elektroda
    W wersji 2.0.7.6, przy testach na symulatorze (tego procesora nie mam w warsztacie) bit ten jest poprawnie ustawiany przez program.
    Jeśli ktoś inny ma ten procesor, to niech sprawdzi to na żywym układzie jeszcze.
REKLAMA