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, Timer0 i Timer1 – konfiguracja liczników do zmiany zmiennej co 1 sekundę, 4MHz

uvesik 25 Mar 2008 20:49 1796 5
REKLAMA
  • #1 4953860
    uvesik
    Poziom 10  
    Posty: 35
    Ocena: 1
    Witam

    Próbuję ustawić Timer0 oraz Timer1 aby zmniejszały zmienną co 1 sekundę. Rezonator 4Mhz.

    Czy możecie sprawdzić czy wszystko mam ustawione poprawnie ?

    
    // Inicjalizacja T0
    TCCR0=0x03;
    TCNT0=0x0F;
    
    // Inicjalizacja T1
    TCCR1A=0x00;
    TCCR1B=0x04;
    TCNT1H=0xC2;
    TCNT1L=0xF7;
    
    interrupt [TIM1_OVF] void timer1_ovf_isr(void)
    {       
            TCNT1H=0xC2;
            TCNT1L=0xF7;
            sekundy--;
    }
    
    interrupt [TIM0_OVF] void timer0_ovf_isr(void)
    {
            TCNT0=0x0F;        // Wartosc poczatkowa
            if(ilosc++==250)   // Jesli Timer sie przepelnia  4Mhz/64/250=250
            {
            sekundy--;
            ilosc=0;
            }
    }
    
    // Wlacza oba
    TIMSK=0x05;
    
    // Wlacza tylko T0
    TIMSK=0x01;
    
    //Wlacza tylko T1
    TIMSK=0x04;
    


    Dziekuje.

    Pozdr.
  • REKLAMA
  • #2 4954298
    snow
    Poziom 31  
    Posty: 1825
    Pomógł: 178
    Ocena: 201
    pamiętaj o sei();
  • REKLAMA
  • #3 4954336
    uvesik
    Poziom 10  
    Posty: 35
    Ocena: 1
    Tak Tak, tylko chodziło mi głównie o wartości rejestrów :)
  • REKLAMA
  • Pomocny post
    #4 4955088
    SteveY
    Poziom 11  
    Posty: 56
    Pomógł: 2
    A nie łatwiej jest policzyć DO ilu ma liczyć a nie OD ilu? :) i robić przerwania COMP a nie OVF? Ja tak robię i na kwarcu 4MHz timer1 odlicza sekundy bardzo ładnie.

    Ale u Ciebie timer1 wydaje się mieć dobrze ustawianą wartość. Przy prescalerze 256 musisz mieć 15625 taktów zegara, aby osiągnąć sekundę.

    W drugim coś mi nie gra. Odliczasz od 0x0F czyli 0xF0 taktów = 240 taktów. 250*240*0,000016 = 0,96s. Musisz odliczać od 0x05. Dobrze liczę? :)
  • REKLAMA
  • #5 4956203
    uvesik
    Poziom 10  
    Posty: 35
    Ocena: 1
    Tak faktycznie, mała pomyłka z mej strony. Dzięki za sprawdzenie :)
  • #6 4956215
    SteveY
    Poziom 11  
    Posty: 56
    Pomógł: 2
    Nie ma sprawy :) Dobrym sposobem na sprawdzenie, czy działa Ci co sekundę jest odpalenie na przykład stopera w telefonie :)
REKLAMA