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

[atmega8][C] Timer1 czas.

dawid512 26 Sty 2011 16:20 1687 6
REKLAMA
  • #1 9059852
    dawid512
    Poziom 32  
    Witam serdecznie forumowiczów.

    Od dłuższego czasu nie miałem do czynienia z AVR. Ostatnio zaszła potrzeba wykonania pewnego urządzenia. Do tego celu zaprzęgnąłem Timer1 ustawiony w tryb CTC. W efekcie miało być przerwanie generowane co 1s. Niestety generuje się o wiele rzadziej. Co robię nie tak?

    
    
    OCR1A = 0x7A11;  
    TCCR1A |= (1<< WGM12); //tryb CTC
    TCCR1B |= (1<< CS12);   // preskaler 256
    TIMSK |= (1 << OCIE1A); // zezwolenie na generowanie przerwania
    
    .....
    
    ISR(TIMER1_COMPA_vect)
    {
    
    }
    
    


    Wg. kalkulatora wartość 0x7A11 powinna dać przerwanie co 1s niestety praktyka mówi ze nie...

    Pozdrawiam Dawid.
  • REKLAMA
  • #2 9059965
    Azonic_2006
    Poziom 17  
    Witam!!!
    Nie napisałeś niestety jaki kwarc, ale stawiam na 16Mhz.
    Konfiguracja wygląda na OK.
    Jeżeli, twierdzisz, że przerwanie się generuje, ale rzadziej to bym polecił sprawdzić fusebity.
    Po pierwsze źródło sygnału taktującego, a po drugi czy nie jest uruchomiony dzielnik zegara przez 8.
    Pozdrawiam!!!
    Azonic_2006
  • REKLAMA
  • Pomocny post
    #3 9060428
    dondu
    Moderator na urlopie...
    A jak policzyłeś 0x7A11??

    Licząc "od tyłu" wychodzi: 0x07a11 * 256 = 31249 * 256 = 7.999.744

    Czyli blisko 8MHz.
    Gdybyś miał 0x7A12 to byłoby równo 8MHz.
    Czy taki masz kwarc?
  • REKLAMA
  • #4 9060645
    janbernat
    Poziom 38  
    To pewnie jest nowy procesor z wewnętrznym taktowaniem 1MHz bo ma włączony bit CKDIV.
    Jak to odptaszkujemy to będzie 8MHz i wszystko się zgodzi.
  • Pomocny post
    #5 9060701
    landy13
    Poziom 31  
    Azonic_2006 napisał:
    czy nie jest uruchomiony dzielnik zegara przez 8.

    janbernat napisał:
    bo ma włączony bit CKDIV.


    Tylko od kiedy Atmega8 ma fusebit CKDIV8?


    TCCR1A |= (1<< WGM12); //tryb CTC 
    WGM12 jest w rejestrze TCCR1B
  • #6 9061178
    janbernat
    Poziom 38  
    Przepraszam- moja pomyłka.
    Ostatnio nic nie robiłem na ATMega8.
  • REKLAMA
  • #7 9062069
    dawid512
    Poziom 32  
    Dziękuję serdecznie za odpowiedzi.

    Przepraszam że nie wspomniałem o zegarze który ustawiony jest na 8MHz.
    Sprawdzałem w fuse bitach odnośnie dzielnika i okazało się że w m8 nie istnieje tak jak to były np w attiny2313.

    Dziękuję za pomoc koledze landy13 rzeczywiście bit ten jest w innym rejestrze, moje niedopatrzenie.

    Po zmianie wszystko ruszyło.

    Pozdrawiam Dawid.
REKLAMA