Wbudowane układy peryferyjne cz. 2 Wykład 8
Timery Timery (liczniki) 2
Timery informacje ogólne Mikrokontroler ATmega32 posiada 3 liczniki: Timer0 8-bitowy Timer1 16-bitowy Timer2 8-bitowy, mogący pracować w trybie asynchronicznym Każdy licznik może pracować w jednym z kilku trybów pracy i być źródłem przerwań 3
Timery informacje ogólne Timery mogą być taktowane sygnałem z różnych źródeł Każdy timer ma możliwość pracy z preskalerem sygnału taktującego, stopnie podziału są zależne od numeru timera 4
Timery - pojęcia BOTTOM minimalna wartość możliwa do osiągnięcia przez timer (0x00 lub 0x0000) MAX maksymalna wartość możliwa do osiągnięcia przez timer (0xff lub 0xffff zależnie od timera) TOP maksymalna wartość timera możliwa do osiągnięcia w danej sekwencji zliczania. Może być nią MAX lub wartość OCRn lub ICRx. 5
Timer0 i timer2 Timer0 i timer2 6
Timer 0 7
Timer2 8
Timer0 i timer2 informacje ogólne Pojemność: 8-bitów Pojedynczy moduł porównujący 10-bitowy preskaler Tryby: Zliczanie (zegar zewnętrzny lub wewnętrzny) Szybki PWM i PWM z korekcją fazy Zerowanie w momencie zgodności (CTC - Clear Timer on Compare) Przerwania: Przepełnienie, zgodność 9
Timer0 i timer1 - preskaler 10
Timer2 - preskaler 11
Tryb zliczania W trybie tym licznik zlicza impulsy taktujące, pochodzące z zegara systemowego lub źródła zewnętrznego W momencie przepełnienia może zostać zgłoszone przerwanie Stan licznik przechowywany jest w rejestrze TCNT0 (timer0) lub TCNT2 (timer2) 12
Tryb zliczania (timer0) 13
Tryb zliczania (timer2) 14
Tryb porównywania W trybie tym stan licznika TCNT0 (timer0) lub TCNT2 (timer2) jest porównywany ze stanem rejestru OCR0 (timer0) lub OCR0 (timer2) W momencie wystąpienia zgodności może zostać zgłoszone przerwanie Ponadto w momencie wystąpienia zgodności może zostać zmieniony stan pinu OC0 (timer0) lub OC2 (timer2) 15
Tryb porównywania 16
Tryb zerowania timera w momencie zgodności (CTC) W trybie tym stan timera TCNT0 (timer0) lub TCNT2 (timer2) jest zerowany w momencie wystąpienia zgodności ze stanem rejestru OCR0 (timer0) lub OCR2 (timer2) Oprócz wyzerowania może zostać stan pinu OC0 (timer0) lub OC2 (timer2) 17
Tryb zerowania timera w momencie zgodności (CTC) 18
Tryb zerowania timera w momencie zgodności (CTC) Częstotliwość przebiegu generowanego na wyjściu OC0 (timer0) lub OC2 (timer2) jest zadana wzorem: f OCn 2 N f clk _ I (1 / O OCRn) gdzie N jest współczynnikiem podziału preskalera (różne dla timera0 i timera1) 19
Tryb szybkiego PWM W trybie tym licznik zlicza od BOTTOM do MAX, po czym jest zerowany Zmiana stanu następuje w momencie osiągnięcia BOTTOM i TOP 20
Tryb szybkiego PWM 21
Tryb szybkiego PWM Częstotliwość przebiegu generowanego na wyjściu OC0 (timer0) lub OC2 (timer2) jest zadana wzorem: f OCnPWM fclk _ I / O 256 N gdzie N jest współczynnikiem podziału preskalera (różne dla timera0 i timera1) 22
Tryb PWM z korekcją fazy W trybie tym licznik zlicza od BOTTOM do TOP W momencie osiągnięcia zgodności zmieniany jest stan OC0 (lub OC2 dla timera2) na przeciwny Po osiągnięciu TOP licznik zmienia kierunek zliczania Ponownie w momencie osiągnięcia zgodności zmieniany jest stan OC0 (lub OC2 dla timera2) na przeciwny 23
Tryb PWM z korekcją fazy 24
Tryb PWM z korekcją fazy Częstotliwość przebiegu generowanego na wyjściu OC0 jest zadana wzorem: f OCnPCPWM fclk _ I / O 510 N gdzie N jest współczynnikiem podziału preskalera (różne dla timera0 i timera1) 25
Timer0 i timer2 - rejestry TCCRn: FOCn: w trybie zwykłym zmienia wartość pinu OCn zgodnie z bitami COMn0 i COMn1 WGMn0 i WGMn1: tryb pracy WGMn1 WGMn0 Tryb TOP Aktualizacja OCRn 0 0 Normalny 0xff natychmiast MAX Flaga TOVn ustawiana 0 1 PWM z korekcją fazy 0xff TOP BOTTOM 1 0 CTC OCRn natychmiast MAX 1 1 Szybki PWM 0xff BOTTOM MAX 26
Timer0 i timer2 - rejestry TCCRn c.d.: COMn0 i COMn1: tryb porównywania zgodności COMn1 COMn0 Opis dla trybów innych niż PWM 0 0 OCn odłączony 0 1 Zmień stan OCn na przeciwny w momencie zgodności 1 0 Zeruj OCn w momencie zgodności 1 1 Ustaw OCn w momencie zgodności 27
Timer0 i timer2 - rejestry COMn1 COMn0 Opis dla trybu szybkiego PWM 0 0 OCn odłączony 0 1 Zarezerwowany 1 0 Zeruj OCn w momencie zgodności, ustaw OCn dla BOTTOM 1 1 Ustaw OCn w momencie zgodności, zeruj OCn dla BOTTOM COMn1 COMn0 Opis dla trybu PWM z korekcją fazy 0 0 OCn odłączony 0 1 Zarezerwowany 1 0 Zeruj OCn w momencie zgodności przy liczeniu w górę, ustaw OCn w momencie zgodności przy liczeniu w dół 1 1 Zeruj OCn w momencie zgodności przy liczeniu w dół, ustaw OCn w momencie zgodności przy liczeniu w górę 28
Timer0 - rejestry TCCR0 c.d.: CS00, CS01, CS02: dzielnik preskalera CSn2 CSn1 CSn0 Opis 0 0 0 Sygnał taktujący odłączony (licznik zatrzymany) 0 0 1 clk/1 0 1 0 clk/8 0 1 1 clk/64 1 0 0 clk/256 1 0 1 clk/1024 1 1 0 Sygnał taktujący podany na pin T0 reakcja na zbocze opadające 1 1 1 Sygnał taktujący podany na pin T0 reakcja na zbocze narastające 29
Timer2 - rejestry TCCR2 c.d.: CS20, CS21, CS22: dzielnik preskalera CS22 CS21 CS20 Opis 0 0 0 Sygnał taktujący odłączony (licznik zatrzymany) 0 0 1 clk/1 0 1 0 clk/8 0 1 1 clk/32 1 0 0 clk/64 1 0 1 clk/128 1 1 0 clk/256 1 1 1 clk/1024 30
Timer0 i timer2 rejestry TCNTn: bieżący stan licznika OCRn: rejestr wartości do porównania TIMSK: OCIEn: 1 - włączenie przerwania przy zgodności TOIEn: 1 - włączenie przerwania przy przepełnieniu TIFR: OCFn: flaga wystąpienia przerwania przy zgodności TOVn: flaga wystąpienia przerwania przy przepełnieniu 31
Timer1 Timer1 32
Timer1 33
Timer1 informacje ogólne Pojemność: 16-bitów Podwójny moduł porównujący Pojedynczy moduł przechwytywania 10-bitowy preskaler Tryby: Zliczanie (zegar zewnętrzny lub wewnętrzny) Szybki PWM, PWM z korekcją fazy, PWM z korekcją fazy i częstotliwości Zerowanie w momencie zgodności (CTC) Przerwania: Przepełnienie, zgodność, przechwycenie 34
Tryb zliczania Tryb ten działa tak samo jak w przypadku licznika timer0 Wartość licznika jest przechowywana w rejestrze TCNT1 (TCNT1H i TCNT1L) 35
Tryb zliczania 36
Tryb przechwytywania W trybie tym istnieje możliwość zachowania stanu licznika timer1 w momencie pojawienia się wybranego zbocza na pinie ICP1 Przechwycona wartość jest zachowywana w rejestrze ICR1 (ICR1H i ICR1L) W momencie przechwycenia może być zgłoszone przerwanie 37
Tryb przechwytywania 38
Tryb porównywania Tryb ten działa identycznie jak w liczniku timer0, z tą różnicą, że timer1 posiada dwa takie moduły: A i B Moduły te posiadają odpowiednio rejestry OCR1A i OCR1B oraz własne opcje konfiguracyjne, dzięki czemu mogą działać częściowo niezależnie od siebie Moduły A i B mogą zgłaszać przerwania niezależnie od siebie 39
Tryb porównywania 40
Tryb zerowania timera w momencie zgodności (CTC) Zasada działania tego trybu jest identyczna jak w przypadku timera0, lecz dzięki posiadaniu dwóch modułów porównawczych możliwe jest generowanie dwóch niezależnych przebiegów na pinach OCR1A i OCR1B 41
Tryb zerowania timera w momencie zgodności (CTC) 42
Tryb zerowania timera w momencie zgodności (CTC) Częstotliwość generowanego przebiegu na wyjściach OC1A i OC1B można wyrazić wzorem f OCnx f 2N(1 clk _ I / O OCRnx) gdzie N jest współczynnikiem podziału preskalera (1,8,64,256,1024) 43
Tryb szybkiego PWM Tryb ten różni się od trybu szybkiego PWM dla timera0 możliwością użycia jako TOP rejestru ICR1 lub OCR1x Dzięki obecności dwóch modułów porównujących A i B istnieje możliwość jednoczesnego generowania dwóch przebiegów o różnym wypełnieniu 44
Tryb szybkiego PWM 45
Tryb szybkiego PWM Częstotliwość i rozdzielczość generowanego przebiegu można wyrazić wzorami f OCnxPWM R FPWM 2 N clk _ I / O (1 TOP) gdzie N jest współczynnikiem podziału preskalera (1,8,64,256,1024) f log( TOP 1) log( 2) 46
Tryb PWM z korekcją fazy Podobnie jak tryb szybkiego PWM, tryb ten różni się od trybu PWM z korekcją fazy dla timera0 możliwością użycia jako TOP rejestru ICR1 lub OCR1x Dzięki obecności dwóch modułów porównujących A i B istnieje możliwość jednoczesnego generowania dwóch przebiegów o różnym wypełnieniu 47
Tryb PWM z korekcją fazy W przypadku zmiany wartości TOP przez program jego wartość jest aktualizowana z bufora tymczasowego w momencie osiągnięcia przez licznik wartości aktualnej wartości TOP Podczas ustawiania nowej wartości TOP należy ustawiać ją zawsze większą lub równą niż wartość w rejestrze porównującym, w przeciwnym wypadku ponowne porównanie nigdy nie nastąpi 48
Tryb PWM z korekcją fazy 49
Tryb PWM z korekcją fazy Częstotliwość i rozdzielczość generowanego przebiegu można wyrazić wzorami f OCnxPCPWM R PCPWM fclk _ I / O 2 N TOP log( TOP 1) log( 2) gdzie N jest współczynnikiem podziału preskalera (1,8,64,256,1024) 50
Tryb PWM z korekcją fazy i częstotliwości Tryb ten jest podobny do trybu z korekcją fazy, z tą różnicą, że aktualizacja wartości TOP następuje w momencie, gdy licznik ma wartość BOTTOM Tryb ten ma zastosowanie, jeśli TOP ulega zmianom w trakcie pracy licznika. Jeśli wartość TOP jest stała, tryb ten jest taki sam jak PWM z korekcją fazy. 51
Tryb PWM z korekcją fazy i częstotliwości 52
Tryb PWM z korekcją fazy i częstotliwości Częstotliwość i rozdzielczość generowanego przebiegu można wyrazić wzorami f OCnxPCPWM R PCPWM fclk _ I / O 2 N TOP log( TOP 1) log( 2) gdzie N jest współczynnikiem podziału preskalera (1,8,64,256,1024) 53
Timer1 - rejestry TCCR1A COM1A1 i COM1A0: tryb porównywania dla modułu A COM1B1 i COM1B0: tryb porównywania dla modułu B 54
Timer1 - rejestry COM1A1 COM1B1 COM1A0 COM1B0 Opis (tryby inne niż PWM) 0 0 Pin OC1A/OC1B odłączony 0 1 Zmień stan OC1A/OC1B na przeciwny w momencie zgodności 1 0 Zeruj OC1A/OC1B w momencie zgodności 1 1 Ustaw OC1A/OC1B w momencie zgodności 55
Timer1 - rejestry COM1A1 COM1B1 COM1A0 COM1B0 Opis (tryb szybkiego PWM) 0 0 Pin OC1A/OC1B odłączony 0 1 Jeśli TOP:=OCR1A: zmień stan OC1A na przeciwny w momencie zgodności, OC1B odłączony Pozostałe przypadki: zmień stan OC1A/OC1B odłączone 1 0 Zeruj OC1A/OC1B w momencie zgodności, ustaw dla BOTTOM 1 1 Ustaw OC1A/OC1B w momencie zgodności, zeruj dla BOTTOM 56
Timer1 - rejestry COM1A1 COM1B1 COM1A0 COM1B0 Opis (tryb PWM z korekcją fazy i PWM z korekcją fazy i częstotliwości) 0 0 Pin OC1A/OC1B odłączony 0 1 Jeśli TOP:=OCR1A: zmień stan OC1A na przeciwny w momencie zgodności, OC1B odłączony Pozostałe przypadki: zmień stan OC1A/OC1B odłączone 1 0 Zeruj OC1A/OC1B w momencie zgodności przy liczeniu w górę, ustaw OC1A/OC1B w momencie zgodności przy liczeniu w dół 1 1 Ustaw OC1A/OC1B w momencie zgodności przy liczeniu w górę, zeruj OC1A/OC1B w momencie zgodności przy liczeniu w dół 57
Timer1 - rejestry TCCR1A c.d.: FOC1A: w trybie zwykłym zmienia wartość pinu OC1A zgodnie z bitami COM1A0 i COM1A1 FOC1B: w trybie zwykłym zmienia wartość pinu OC1B zgodnie z bitami COM1B0 i COM1B1 WGM11 i WGM10: tryb pracy licznika 58
Timer1 - rejestry WGM13 WGM12 WGM11 WGM10 Tryb pracy TOP Aktualizacja OCR1x 0 0 0 0 Normalny 0xffff natychmiast MAX Flaga TOV1 ustawiana 0 0 0 1 PWM z kor. Fazy, 8-bit 0x00ff TOP BOTTOM 0 0 1 0 PWM z kor. Fazy, 9-bit 0x01ff TOP BOTTOM 0 0 1 1 PWM z kor. Fazy, 10-bit 0x03ff TOP BOTTOM 0 1 0 0 CTC OCR1A Natychmiast MAX 0 1 0 1 Szybki PWM, 8-bit 0x00ff BOTTOM TOP 0 1 1 0 Szybki PWM, 9-bit 0x01ff BOTTOM TOP 0 1 1 1 Szybki PWM, 10-bit 0x03ff BOTTOM TOP 59
Timer1 - rejestry WGM13 WGM12 WGM11 WGM10 Tryb pracy TOP Aktualizacja OCR1x Flaga TOV1 ustawiana 1 0 0 0 PWM z korekcją fazy i częst. ICR1 BOTTOM BOTTOM 1 0 0 1 PWM z korekcją fazy i częst. OCR1A BOTTOM BOTTOM 1 0 1 0 PWM z korekcją fazy ICR1 TOP BOTTOM 1 0 1 1 PWM z korekcją fazy OCR1A TOP BOTTOM 1 1 0 0 CTC ICR1 Natychmiast MAX 1 1 0 1 zarezerwowane - - - 1 1 1 0 Szybki PWM ICR1 BOTTOM TOP 1 1 1 1 Szybki PWM OCR1A BOTTOM TOP 60
Timer1 - rejestry TCCR1B: ICNC1: 1 - włączenie eliminacji zakłóceń na wejściu ICP1 ICES1: wybór zbocza przechwytywania: 0 opadające, 1- narastające WGM12 i WGM13: tryb pracy licznika CS10, CS11, CS12: dzielnik preskalera 61
Timer1 - rejestry CS12 CS11 CS10 Opis 0 0 0 Sygnał taktujący odłączony (licznik zatrzymany) 0 0 1 clk/1 0 1 0 clk/8 0 1 1 clk/64 1 0 0 clk/256 1 0 1 clk/1024 1 1 0 Sygnał taktujący podany na pin T1 reakcja na zbocze opadające 1 1 1 Sygnał taktujący podany na pin T1 reakcja na zbocze narastające 62
Timer1 - rejestry TCNT1 (TCNT1H i TCNT1L): bieżący stan licznika OCR1A (OCR1AH i OCR1AL): rejestr wartości do porównania (A) OCR1B (OCR1BH i OCR1BL): rejestr wartości do porównania (B) ICR1 (ICR1A i ICR1L): rejestr przechwytujący 63
Timer1 - rejestry TIMSK: TICIE1: 1 - włączenie przerwania przy przechwyceniu OCIE1A i OCIE1B: 1 - włączenie przerwania przy zgodności (moduł A i B komparatora) TOIE1: 1 - włączenie przerwania przy przepełnieniu TIFR: ICF1: flaga przerwania przy przechwyceniu OCF1A i OCF1B: flagi przerwania przy zgodności (moduł A i B) TOV1: flaga przerwania przy przepełnieniu 64
Timer 2 tryb asynchroniczny Timer2 tryb asynchroniczny 65
Timer2 tryb asynchroniczny Timer2 posiada możliwość pracy w trybie asynchronicznym, niezależnym od głównego zegara systemowego Źródłem sygnału zegarowego dla trybu asynchronicznego może być oscylator kwarcowy 32,768kHz Tryb ten umożliwia pracę timera w niektórych trybach oszczędzania energii 66
Timer2 tryb asynchroniczny Timer2 pracujący w trybie asynchronicznym może zostać wykorzystany do wybudzania mikrokontrolera z trybu uśpienia lub jako wzorzec częstotliwości dla zegara RTC 67
Timer2 tryb asynchroniczny - rejestry ASSR: AS2: 1 - przełączenie timera2 w tryb asynchroniczny, zmiana tego bitu w trakcie pracy timera2 może uszkodzić zawartość rejestrów TCNT2, OCR2 i TCCR2 TCNT2UB: flaga aktualizacji rejestru TCNT2 w trybie asynchronicznym, jeśli jest ustawiona, to wartość rejestru TCNT2 jest aktualizowana 68
Timer2 tryb asynchroniczny - rejestry ASSR c.d.: OCR2UB: flaga aktualizacji rejestru OCR2 w trybie asynchronicznym, jeśli jest ustawiona, to wartość rejestru OCR2 jest aktualizowana TCR2UB: flaga aktualizacji rejestru TCR2 w trybie asynchronicznym, jeśli jest ustawiona, to wartość rejestru TCR2 jest aktualizowana 69