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] Timer1, obsługa przerwań

cezar89 07 Sie 2009 23:45 1988 5
REKLAMA
  • #1 6868787
    cezar89
    Poziom 11  
    Witam

    Mam pewną wątpliwość/pytanie dotyczące przerwania dla timera1 w trybie CTC. W datasheetcie jest napisane, że mamy dwie niezależne jednostki Output Compare, no więc ustawiam:
    
    TCCR1B=(1 << CS10 |1 << CS11 | 1<< WGM12);   //przykładowo-ustaw timer1 z preskalerem 64 //ustaw timer1 w tryb CTC
    OCR1A=1000;   //przykładowa wartość
    OCR1B=5000;   //przykładowa wartość
    SREG=(1 << 7);   //zezwolenie na przerwania 
    TIMSK=(1 << OCIE1A | 1 << OCIE1B);   //zezwolenia na przerwania dla CTC
    	
    	while(1){}
    }
    	
    ISR(TIMER1_COMPA_vect)
    {
    	[...]
    }
    
    ISR(TIMER1_COMPB_vect)
    {
    	[...]
    }


    Nie wiem czy dobrze to rozumiem ale według mnie timer1 pozwala nam na dwa różne przerwania dla różnych wartości licznika. No ale przecież jak już doliczy do tego 1000 daje przerwanie i licznik liczy od nowa, to w jaki sposób wywoła się przerwania dla kanału B? Czy coś jeszcze trzeba gdzieś ustawić? Może coś przeoczyłem.

    Z góry dzięki za pomoc.

    Pozdrawiam
  • REKLAMA
  • REKLAMA
  • #3 6869370
    cezar89
    Poziom 11  
    No wiem, że tak musi być no ale w trybie CTC po przerwaniu, licznik liczy od początku. Nie wiem może to jakiś banał ale nie wiem jak to zrealizować. Możesz mi to trochę rozjaśnić.

    Pozdrawiam
  • REKLAMA
  • #4 6870268
    ZbeeGin
    Poziom 39  
    Jak Ci się może wywołać przerwanie z OC1B skoro licznik nie ma szans nawet doliczyć do tych 5000 w trybie CTC...

    Czytać i analizować noty katalogowe!
  • REKLAMA
  • #5 6870282
    cezar89
    Poziom 11  
    Przecież wiem, że nie ma szans, napisałem to w pierwszym poście, ale w końcu mamy do dyspozycji dwa kanały na porównanie, tylko, że nie wiem jak z nich skorzystać, notę katalogową czytałem ale nie znajduje tam nic co pomoże mi rozwiązać mój problem.

    Pozdrawiam
  • Pomocny post
    #6 6870320
    ZbeeGin
    Poziom 39  
    Przecież pisze jak na tacy:
    1. Licznik nie doliczy do 5000 w trybie CTC - zatem logicznie myśląc trzeba ten tryb wyłączyć.
    2. Jeśli licznik ma pracować w trybie CTC to wartość z OCR1B musi być mniejsza niż OCR1A.
REKLAMA