650 likes | 838 Views
Rodzina AVR wykład 5. AVR 2 /64. Watchdog Timery/liczniki. AVR - watchdog ATtiny2313 / ATmega8515 3 /64. w ATtiny2313. WEWN. SZYNA DANYCH. 128kHz 1MHz. WDTCSR / WDTCR.
E N D
AVR 2/64 WatchdogTimery/liczniki
AVR - watchdog ATtiny2313 / ATmega85153/64 w ATtiny2313 WEWN. SZYNA DANYCH 128kHz 1MHz WDTCSR / WDTCR GEN. RC PRESKALER RESET PROGR. WDE :2048 :4096 :8192 WDP3 WDP2 WDP1 WDP0 :65536 :16384 :32768 WDIE WDIF :524288 WDCE :262144 :1048576 :2097152 :131072 (rozkaz WDR) UKŁADRESETU PRZERWANIEWATCHDOGA • Cechy: • własny oscylator RC o f=128kHz / 1MHz przy Vcc=5V; • preskaler umożliwiający wybór okresu przepełnienia watchdoga; • możliwość zgłaszania przerwań; • programowe kasowanie rozkazem WDR; • mechanizm zabezpieczający przed przypadkowym wyłączeniem.
WDTCSR 41h WDIF WDIE WDP3 WDCE WDE WDP2 WDP1 WDP0 21h WDTCR 41h WDCE WDE WDP2 WDP1 WDP0 21h AVR - watchdog ATtiny2313 / ATmega85154/64 Rejestr sterujący watchdoga: WDP3,WDP2,WDP1,WDP0 - bity wybierające stopień podziału sygnału z gen.RC: 0000 - 2k 0010 - 8k 0100 - 32k 0110 - 128k 1000 - 512k 0001 - 4k 0011 - 16k 0101 - 64k 0111 - 256k 1001 - 1024k WDP2,WDP1,WDP0 - bity wybierające stopień podziału sygnału z oscylatora RC: 0 0 0 - 16k 0 1 0 - 64k 1 0 0 - 256k 1 1 0 - 1024k 0 0 1 - 32k 0 1 1 - 128k 1 0 1 - 512k 1 1 1 - 2048k
WDTCSR 41h WDIF WDIE WDP3 WDCE WDE WDP2 WDP1 WDP0 21h AVR - watchdog ATtiny2313 / ATmega85155/64 Rejestr sterujący watchdoga: WDIF - flaga sygnalizacji przerwania watchdoga, kasowana automatycznie przy wejściu w obsługę tego przerwania; WDIE - bit zezwalający na przerwanie watchdoga,kasowany automatycznie przy wejściu w obsługę tego przerwania; WDCE - bit ten musi być ustawiony aby można było zmienić stan bitów WDE i WDPx / WDE w przeciągu następnych 4 cykli maszynowych; WDE - bit zezwalający na pracę watchdoga, aby go wyzerować najpierw należy ustawić bit WDCE w rej. MCUSR, w przypadku ATtiny2313 wcześniej należy wyzerować flagę WDRF w rej. MCUSR
AVR - watchdog ATtiny2313 / ATmega85156/64 Na pracę watchdoga wpływa też bit konfiguracyjny WDTON:
AVR - watchdog ATtiny2313 / ATmega85157/64 ; procedura wylaczajaca watchdog w ATtiny2313 wdt_off: cli ;! blokada przerwan ! wdr in r16,mcusr ;pobranie aktualnego stanu MCUSR andi r16,~(1<<wdrf) out mcusr,r16 ;skasowanie flagi WDRF in r16,wdtcsr ;pobranie aktualnego stanu WDTCSR ori r16,(1<<wdce)|(1<<wde) ;WDCE,WDE:=1 out wdtcsr,r16 ;ustawienie bitow WDCE,WDE andi r16,~(1<<wde) ;WDE:=0 out wdtcsr,r16 ;zerowanie bitu WDE sei ;! odblokowanie przerwan ! ret ; resetowanie licznika watchdoga: wdr
AVR - watchdog ATtiny2313 / ATmega85158/64 ; procedura zmieniajaca preskaler watchdoga w ATtiny2313 wdt_off: cli ;! blokada przerwan ! wdr in r16,wdtcsr ;pobranie aktualnego stanu WDTCSR ori r16,(1<<wdce)|(1<<wde) ;WDCE,WDE:=1 out wdtcsr,r16 ;ustawienie bitow WDCE,WDE andi r16,0xC8 ;WDCE:=0,WDPx:=0,pozostaje WDE=1 ori r16,0x05 ;podzielnik :65536 out wdtcsr,r16 ; zapis do WDTCSR sei ;! odblokowanie przerwan ! ret ; resetowanie licznika watchdoga: wdr
AVR - watchdog ATtiny2313 / ATmega85159/64 ; procedura wylaczajaca watchdog w ATmega8515 przy WDTON=1 wdt_off: in r16,wdtcr ;pobranie aktualnego stanu WDTCR ori r16,(1<<wdce)|(1<<wde) ;WDCE,WDE:=1 cli ;! blokada przerwan ! out wdtcr,r16 ;ustawienie bitow WDCE,WDE andi r16,~(1<<wde) ;WDE:=0 out wdtcr,r16 ;zerowanie bitu WDE sei ;! odblokowanie przerwan ! ret ; resetowanie licznika watchdoga: wdr
AVR - watchdog ATtiny2313 / ATmega8515 10/64 ; zmiana preskalera watchdoga przy S8515C=0 i WDTON=1 in r16,wdtcr ;pobranie aktualnego stanu WDTCR andi r16,0xF8 ;zerowanie bitow WDPx ori r16,0x02 ;podzielnik :65536 out wdtcr,r16 ;zapis do WDTCR ; zmiana preskalera watchdoga przy S8515C=1 lub WDTON=0 in r16,wdtcr ;pobranie aktualnego stanu WDTCR ori r16,(1<<wdce)|(1<<wde) ;WDCE,WDE:=1 cli ;! blokada przerwan ! out wdtcr,r16 ;ustawienie bitow WDCE,WDE ldi r16,0x02 | (1<<wde) ;podzielnik :65536 i WDE=1 ;albo ; ldi r16,0x02 ;podzielnik :65536 i WDE=0 out wdtcr,r16 ;zapis do WDTCR sei ;! odblokowanie przerwan !
10b DZIELNIK CLK 6 4 4 8 : 5 6 2 PSR10 : 2 0 : 1 : GTCCR / SFIOR T0 PD4/PB0 T1 PD5/PB1 CS10 CS00 CS11 CS01 CS12 CS02 TC0 CLK TC1 CLK AVR - preskaler liczników ATtiny2313/ ATmega851511/64 • Preskaler: • wspólny dla obu timerów/liczników; • przełącza źródło impulsów zliczanych: generator/pin zewn./wyłączenie; • realizuje wstępny podział impulsów generatora taktu przez: 1, 8, 64, 256, 1024; • umożliwia wybór aktywnego zbocza impulsów zewnętrznych;
TCCR0B 53h FOC0A FOC0B WGM02 CS02 CS01 CS00 33h TCCR1B 4Eh ICNC1 ICES1 CTC1 CS12 CS11 CS10 2Eh TCCR1B 4Eh ICNC1 ICES1 WGM13 WGM12 CS12 CS11 CS10 2Eh AVR - preskaler liczników ATtiny2313 / ATmega851512/64 • Sterowanie preskalerem - niezależnie dla każdego z układów liczących: • dla timera/licznika 0 TCCR0 53h FOC0 WGM00 COM01 COM00 WGM01 CS02 CS01 CS00 33h • dla timera/licznika 1
GTCCR 43h PSR10 23h 50h XMBK XMM2 XMM1 XMM0 PUD PSR10 30h AVR - preskaler liczników ATtiny2313 / ATmega851513/64 Zerowanie podzielnika preskalera: SFIOR
1023 wewnętrzny stan preskalera 0 ~1ms impulsy TC0CLK chwila zaprogramowania timera #0 do pracy(wpis wartości 254) stan timera #0 przepełnienie się timera #0- koniec pomiaru czasu X 254 255 0 <2ms chwila zaprogramowania timera #0 do pracy:TCNT0:=254 i PSR10:=1 stan timera #0 przepełnienie się timera #0- koniec pomiaru czasu X 254 255 0 ~2ms AVR - preskaler liczników ATtiny2313 / ATmega8515 14/64 Przykład zastosowania zerowania podzielnika preskalera: zadanie: przy pomocy timera odmierzyć krótki odcinek czasu (np. ok. 2ms), przy założeniu, że timer zlicza impulsy zegara 1MHz podzielone przez 1024
TCNT0 52h 8-bitowy timer/licznik 0 32h AVR - timer/licznik #0 ATtiny2313 / ATmega851515/64 • Cechy układu timera/licznika #0 w ATtiny2313: • 8-bitowy, zliczający w górę, przepełnienie ustawia flagę TOV0=1w rejestrze TIFR; • może być źródłem przerwań od przepełnienia, gdy w rejestrze maskowania przerwań TIMSK bit TOIE0=1; • dostępny do odczytu i zapisu jako rejestr TCNT0; • proces zliczania impulsu ma pierwszeństwo przed operacją programowego zapisu; • wyposażony w 2 komparatory bieżącej wartości z 8b wzorcami; • możliwość zgłaszania niezależnych przerwań od komparatorów w obu kanałach; • zadziałanie komparatora może wyzerować licznik; • rejestry wzorców: OCR0A i OCR0B - buforowane; • umożliwia generację przebiegów PWM w dwóch kanałach; • w trybie PWM zlicza także w dół.
PRZERWANIA: TC0BCOMP TC0OV TC0ACOMP OCIE0B TOIE0 WEWN. SZYNA DANYCH OCIE0A REJ. MASEK PRZERWAŃ TIMSK REJ. FLAG PRZERWAŃ TIFR REJ. STERUJĄCY TCCR0A REJ. STERUJĄCY TCCR0B FOC0A CS02 CS01 CS00 FOC0B WGM01 WGM00 COM0B1 COM0B0 COM0A1 COM0A0 WGM02 OCF0B OCF0A TOV0 CLEAR UKŁAD STEROWANIA PRESKALER T0 TC0CLK PD4 CLK UP/DOWN FULL REJ. LICZNIKA TCNT0 GEN. WYJ. OC0A ZERO PB2 GEN. WYJ. OC0B EQ PD5 8b KOMPARATOR = EQ 8b KOMPARATOR = REJ. WZORCA OCR0A REJ. WZORCA OCR0B AVR - timer/licznik #0 ATtiny2313 / ATmega851516/64 Timer/licznik #0 w ATtiny2313
TCCR0B 53h FOC0A FOC0B WGM02 CS02 CS01 CS00 33h TCCR0A 50h COM0A1 COM0A0 COM0B1 COM0B0 WGM01 WGM00 30h AVR - timer/licznik #0 ATtiny2313 / ATmega851517/64 Rejestry sterujące pracą timera/licznika #0 w ATtiny2313: WGM02,WGM01,WGM00 - określają tryb pracy licznika:
AVR - timer/licznik #0 ATtiny2313 / ATmega851518/64 COM0x1,COM0x0 - określają tryb pracy wyjścia sygnału OC0x, w zależności od bitów WGM0x: OC0A i OC0B dla trybu licznika normalnego i CTC:
AVR - timer/licznik #0 ATtiny2313 / ATmega851519/64 OC0A i OC0B dla trybu licznika szybkie PWM:
AVR - timer/licznik #0 ATtiny2313 / ATmega851520/64 OC0A i OC0B dla trybu licznika dokładne PWM:
AVR - timer/licznik #0 ATtiny2313 / ATmega851521/64 FOC0A i FOC0B - istotne tylko gdy bity WGM0x nie włączają trybu PWM ustawienie bitu FOC0x powoduje zmianę stanu wyjścia OC0x w sposób zgodny ze stanem bitów COM0x1..0 tak jak przy zadziałaniu komparatora, ale przerwanie od komparatora nie jest zgłaszane
TCNT0 52h 8-bitowy timer/licznik 0 32h AVR - timer/licznik #0 ATtiny2313 / ATmega8515 22/64 • Cechy układu timera/licznika #0 wATmega8515: • 8-bitowy, zliczający w górę, przepełnienie ustawia flagę TOV0=1w rejestrze TIFR; • może być źródłem przerwań od przepełnienia, gdy w rejestrze maskowania przerwań TIMSK bit TOIE0=1; • dostępny do odczytu i zapisu jako rejestr TCNT0; • proces zliczania impulsu ma pierwszeństwo przed operacją programowego zapisu. • wyposażony w komparator bieżącej wartości z 8b wzorcem; • rejestr wzorca OCR0 - buforowany; • możliwość zgłaszania przerwania od komparatora; • zadziałanie komparatora może wyzerować licznik; • umożliwia jednokanałową generację przebiegu PWM; • w trybie PWM zlicza także w dół.
PRZERWANIA: TC0OV TC0COMP TOIE0 OCIE0 WEWN. SZYNA DANYCH REJ. MASEK PRZERWAŃ TIMSK REJ. FLAG PRZERWAŃ TIFR REJ. STERUJĄCY TCCR0 CS02 CS01 CS00 FOC0 COM01 COM00 WGM00 WGM01 OCF0 TOV0 CLEAR TC0CLK UKŁAD STEROWANIA PRESKALER CLK T0 UP/DOWN FULL REJ. LICZNIKA TCNT0 OC0 GEN. WYJ. ZERO PB0 EQ 8b KOMPARATOR = REJ. WZORCA OCR0 AVR - timer/licznik #0 ATtiny2313 / ATmega851523/64 Timer/licznik #0 w ATmega8515
AVR - timer/licznik #0 ATtiny2313 / ATmega851524/64 Rejestr sterujący pracą timera/licznika #0 w ATmega8515: TCCR0 53h FOC0 WGM00 COM01 COM00 WGM01 CS02 CS01 CS00 33h FOC0 - ustawiony powoduje zmiany na wyjściu OC0 zgodnie ze stanem COM01,COM00 tak jakby powodował je sygnał równości z komparatora. WGM01,WGM00 - określają tryb pracy licznika: COM01,COM00 - określają tryb pracy wyjścia sygnału OC0, w zależności od bitów WGM01,WGM00
OCR0 TCNT0 TOV0 OCF0 AVR - timer/licznik #0 ATtiny2313 / ATmega851525/64 tryb #0 - normalnego licznika: przykład dla COM01,COM00 = 00:
OCR0 TCNT0 TOV0 OCF0 OC0 AVR - timer/licznik #0 ATtiny2313 / ATmega851526/64 tryb #0 - normalnego licznika: przykład dla COM01,COM00 = 01 (zmiana stanu na przeciwny):
OCR0 TCNT0 TOV0 OCF0 OC0 wpis 10 do COM01,COM00 AVR - timer/licznik #0 ATtiny2313 / ATmega851527/64 tryb #0 - normalnego licznika: przykład dla COM01,COM00 = 10 (zerowanie OC0 przez komparator): uzyskuje się jednorazowe zadziałanie wyjścia OC0 ! dla COM01,COM00 = 11 (ustawianie OC0 przez komparator) byłoby analogicznie
OCR0 TCNT0 TOV0 OCF0 OC0 wpis 10 do COM01,COM00 AVR - timer/licznik #0 ATtiny2313 / ATmega851528/64 tryb #0 - normalnego licznika: przykład dla COM01,COM00 = 10 (zerowanie OC0 przez komparator): konieczne jest przeprogramowanie TCCR0 w każdym przerwaniu od TOV0, jak poniżej: ;dla COM01,COM00 = 10 albo 11 in r16,tccr0 ;odczyt dotychczasowego sterowania ldi r17,0xCF and r17,r16 ;skasowanie bitow COM0x ori r17,0x10 ;ustawienie COM0x=01 out tccr0,r17 ;przeprogramowanie timera #0 ori r17,0x80 ;ustawienie FOC0=1 out tccr0,r17 ;wymuszenie przelaczenia OC0 out tccr0,r16 ;powrot do pierwotnego sterowania
OCR0 TCNT0 TOV0 OCF0 AVR - timer/licznik #0 ATtiny2313 / ATmega851529/64 tryb #2 - licznika ze zmiennym cyklem: przykład dla COM01,COM00 = 00: • Możliwe zastosowania: • przerwania zegarowe od flagi OCF0; • zliczanie zadanej liczby impulsów zewnętrznych.
OCR0 TCNT0 TOV0 OCF0 OC0 AVR - timer/licznik #0 ATtiny2313 / ATmega851530/64 tryb #2 - licznika ze zmiennym cyklem: przykład dla COM01,COM00 = 01 (zmiana stanu na przeciwny): • Możliwe zastosowania: • generacja fali prostokątnej o zmiennej częstotliwości i wypełnieniu 1/2;
OCR0 TCNT0 TOV0 OCF0 OC0 wpis 10 do COM01,COM00 wpis 11 do COM01,COM00 AVR - timer/licznik #0 ATtiny2313 / ATmega851531/64 tryb #2 - licznika ze zmiennym cyklem: przykład dla COM01,COM00 = 1x (zerowanie/ustawianie OC0 przez komparator): ; zmiana stanu bitow COM0x: in r16,tccr0 andi r16,0xCF ori r16,0x20 ;wybor trybu z zerowaniem OC0 ;albo: ; ori r16,0x30 ;wybor trybu z ustawianiem OC0 out tccr0,r16
AVR - timer/licznik #0 ATtiny2313 / ATmega851532/64 tryb #1 - dokładne (phase correct) PWM:
wpis do rej. OCR0 wpis do rej. OCR0 OCR0 TCNT0 aktualizacja rej. OCR0 aktualizacja rej. OCR0 TOV0 OCF0 OC0 dla COM0x=10 OC0 dla COM0x=11 AVR - timer/licznik #0 ATtiny2313 / ATmega851533/64 tryb #1 - dokładne (phase correct) PWM: Stałe wartości wyjścia OC0 w zależności od bitów COM0x i wartości rej. OCR0
AVR - timer/licznik #0 ATtiny2313 / ATmega851534/64 tryb #3 - szybkie PWM:
wpis do rej. OCR0 wpis do rej. OCR0 OCR0 TCNT0 aktualizacja rej. OCR0 aktualizacja rej. OCR0 TOV0 OCF0 OC0 dla COM0x=10 OC0 dla COM0x=11 AVR - timer/licznik #0 ATtiny2313 / ATmega851535/64 tryb #3 - szybkie PWM: Stałe wartości wyjścia OC0 w zależności od bitów COM0x i wartości rej. OCR0
TCNT1H 4Dh timer/licznik 1 - st. bajt licznika 2Dh TCNT1L 4Ch timer/licznik 1 - mł. bajt licznika 2Ch AVR - timer/licznik #1 ATtiny2313 / ATmega851536/64 • Cechy układu timer/licznik #1 w ATtiny2313 / ATmega8515: • 16-bitowy, zliczający w górę lub w dół, z sygnalizowanym przepełnieniem; • dostępny do odczytu i zapisu jako 2 rejestry TCNT1H i TCNT1L; • kolejność zapisów do rejestrów: TCNT1H, TCNT1L; • kolejność odczytu z rejestrów: TCNT1L, TCNT1H; • może pracować w kilku trybach: licznika, licznika z przechwytywaniem, licznika z porównaniem, generatora PWM;
AVR - timer/licznik #1 ATtiny2313 / ATmega851537/64 • Cechy układu timer/licznik #1 w ATtiny2313 / ATmega8515: • 16-bitowy rejestr przechwytujący ICR1; • dwa kanały porównywania stanu licznika z 16b wzorcami (OCR1x); • rejestry wzorców (OCR1A i OCR1B) podwójnie buforowane; • !!! TCNT, OCR1A i OCR1B - korzystają ze wspólnego rej. TEMPH • kolejność zapisów do rejestrów: OCR1xH, OCR1xL; • kolejność odczytu z rejestrów: OCR1xL, OCR1xH; • układ filtracji szumów zewn. sygnału wyzwalającego zapamiętywanie stanu; • dwa 16b kanały PWM o zmiennym okresie i różnych szybkościach pracy; • funkcja licznika impulsów zewnętrznych; • funkcja generatora przebiegu wyjściowego o zmiennej częstotliwości; • 4 źródła przerwań.
TC1COMPA TC1COMPB PRZERWANIA: TC1OV TC1CAPT TOIE1 WEWN. SZYNA DANYCH OCIE1A OCIE1B ICIE1 REJ. STER. TCCR1A REJ. STER. TCCR1C REJ. STER. TCCR1B REJ. MASEKPRZERWAŃTIMSK ICNC1 CS12 CS11 CS10 REJ. FLAGPRZERWAŃTIFR ICES1 COM1A1 COM1A0 COM1B1 COM1B0 WGM13 FOC1B FOC1A WGM11 WGM10 WGM12 ICF1 OCF1B OCF1A TC1CLK UKŁAD STEROWANIA PRESKALER TOV1 WYZW. ICNC1 CLK CLEAR PRZECHW. UP/DOWN 16b KOMPARATOR = REJESTR WZORCAOCR1AH OCR1AL REJESTR WZORCAOCR1BH OCR1BL TIMER LICZNIK #1TCNT1H TCNT1L REJESTR PRZECHWYTUJĄCYICR1H ICR1L 16b KOMPARATOR = KOMP. ANAL. FILTR ICP PD6 TEMPH * OC1A PB3 WYJŚCIA PWM OC1B PB4 TEMPH * TEMPH * AVR - timer/licznik #1 ATtiny2313 / ATmega851538/64 Timer/licznik #1w ATtiny2313/ ATmega8515 * - wspólny rejestr pośredniczący
TCCR1A 4Fh COM1A1 COM1A0 COM1B1 COM1B0 FOC1A FOC1B WGM11 WGM10 2Fh TCCR1B 4Eh ICNC1 ICES1 WGM13 WGM12 CS12 CS11 CS10 2Eh AVR - timer/licznik #1 ATtiny2313 / ATmega851539/64 Rejestry sterujące pracą timera/licznika #1 w ATtiny2313 / ATmega8515: ICNC1 - ustawienie bitu włącza filtr sygnału wyzwalającego przechwytywanie (filtracja polega na oczekiwaniu na stabilny stan wejścia podczas 4 kolejnych okresów zegara systemowego); ICES1 - wybór zbocza wyzwalającego przechwytywanie: ICES1=0 - zbocze opadające, ICES1=1 - zbocze narastające WGM13,WGM12,WGM11,WGM10 – określają tryb pracy układu COM1x1,COM1x0 - określają tryb pracy wyjścia sygnału OC1x, w zależności od bitów WGM1x;
AVR - timer/licznik #1 ATtiny2313 / ATmega851540/64 Dostępne tryby pracy timera/licznik #1:
REJESTR WZORCAOCR1AH OCR1AL REJESTR WZORCAOCR1BH OCR1BL 16b KOMPARATOR = TIMER LICZNIK #1TCNT1H TCNT1L 16b KOMPARATOR = AVR - timer/licznik #1 ATtiny2313 / ATmega851541/64 TC1COMPA TC1COMPB Tryb #0 - normalny – praca licznikowa (WGM1..=0000) PRZERWANIA: TC1OV TOIE1 WEWN. SZYNA DANYCH OCIE1A OCIE1B REJ. STER. TCCR1A REJ. STER. TCCR1C REJ. STER. TCCR1B REJ. MASEKPRZERWAŃTIMSK ICNC1 CS12 CS11 CS10 REJ. FLAGPRZERWAŃTIFR ICES1 COM1A1 COM1A0 COM1B1 COM1B0 WGM13 FOC1B FOC1A WGM11 WGM10 WGM12 OCF1B OCF1A TC1CLK UKŁAD STEROWANIA PRESKALER TOV1 CLK CLEAR UP/DOWN TEMPH OC1A PB3 WYJŚCIA PWM OC1B PB4 TEMPH TEMPH
0FFFFh OCR1x TCNT1 0000h TOV1 OCF1x AVR - timer/licznik #1 ATtiny2313 / ATmega851542/64 • Tryb #0 - normalny – praca licznikowa (WGM1x=0000) • licznik zlicza w górę modulo 65536; • przepełnienie ustawia flagę TOV1; • równolegle mogą pracować obwody komparatorów 16-bitowych (zawartość rejestrów OCR1A i OCR1B jest aktualizowana natychmiast, zadziałanie komparatora ustawia odpowiednią flagę OCF1x). • możliwe jest uzyskanie przebiegów prostokątnych na wyjściach OC1A i OC1B w zależności od ustawienia bitów COM1Ax i COM1Bx
AVR - timer/licznik #1 ATtiny2313 / ATmega851543/64 Tryb #0 Przykład obsługi licznika w przerwaniach zegarowych o fZ=fCLK:50000 (przy fCLK=10MHz fZ=200Hz), zał. preskaler ustawiony na ‘:1’: .equ tc1const=65536-50000 ldi r18,low(tc1const+5) ;korekta ‘+5’ konieczna ldi r19,high(tc1const+5) ;przy preskalerze ‘:1’ in r16,tcnt1l in r17,tcnt1h add r16,r18 adc r17,r19 out tcnt1h,r17 out tcnt1l,r16 ...
OC1x 0FFFFh OCR1x TCNT1 0000h TOV1 OCF1x AVR - timer/licznik #1 ATtiny2313 / ATmega851544/64 Tryb #0 stan wyjść OC1A i OC1B dla trybu licznika normalnego: przykład dla COM1x1,COM1x0 = 01 (zmiana stanu na przeciwny):
0FFFFh OCR1x TCNT1 0000h TOV1 OCF1x OC1x wpis 11 do COM1x1,COM1x0 przeprogramowanie COM1x1,COM1x0w celu wyzerowania wyjścia OC1x AVR - timer/licznik #1 ATtiny2313 / ATmega851545/64 Tryb #0 stan wyjść OC1A i OC1B dla trybu licznika normalnego: przykład dla COM1x1,COM1x0 = 11 (ustawianie OC1x przez komparator):
AVR - timer/licznik #1 ATtiny2313 / ATmega851546/64 • Tryb #4, #12 - z przechwytywaniem(WGM1..=x100) • licznik zlicza w górę do wartości wyznaczonej przez zawartość: rej. OCR1A w trybie #4 albo rej. ICR1 w trybie #12; • w trybie #12, po zapamiętaniu wartości w rej. ICR1, licznik TCNT1 jest zerowany; • przechwytywanie może być wyzwolone: - zaprogramowaną zmianą w komparatorze analogowym; - sygnałem zewnętrznym na wejściu ICP. • sygnał zewnętrzny może być filtrowany (bit ICNC1 w rej. TCCR1B); • można wybrać aktywne zbocze sygnału na wej. ICP (bit ICES1 w rej. TCCR1B); • przepełnienie się licznika TCNT1 (z 0FFFFh na 0000h) powoduje ustawienie flagi TOV1; • zawartość rejestrów OCR1A i OCR1B jest aktualizowana natychmiast, zadziałanie komparatora ustawia odpowiednią flagę OCF1x. • wyjścia OC1A i OC1B mogą pracować tak jak dla trybu #0 (licznikowego).
0FFFFh OCR1AOCR1BTCNT1 0000h TOV1 OCF1A OCF1B impulswyzwalający 0FFFFh ICR1 0000h ICF1 AVR - timer/licznik #1 ATtiny2313 / ATmega851547/64 Tryb #4 – praca z przechwytywaniem, przy bitach COM1A..=00, COM1B..=00
0FFFFh OCR1AOCR1BTCNT1 0000h TOV1 OCF1A OCF1B impulswyzwalający 0FFFFh ICR1 0000h ICF1 AVR - timer/licznik #1 ATtiny2313 / ATmega851548/64 Tryb #12 – praca z przechwytywaniem, przy bitach COM1A..=00, COM1B..=00
AVR - timer/licznik #1 ATtiny2313 / ATmega851549/64 • Tryb #5, #6, #7, #14, #15 - szybkie PWM • licznik zlicza w górę do wartości maksymalnej (TOP), zależnej od wybranego trybu: 255 w trybie #5, 511 w trybie #6, 1023 w trybie #7, zawartość rej. ICR1 w trybie #14, zawartość rej. OCR1A w trybie #15; • osiągnięcie przez licznik TCNT1 wartości TOP powoduje ustawienie flagi TOV1; • zawartość rejestrów OCR1A i OCR1B jest aktualizowana przy TCNT1=TOP; • zadziałanie komparatora ustawia odpowiednią flagę OCF1x. • pracę wyjść OC1A i OC1B określa tabela:
wpis do rej. OCR1x TOP OCR1BOCR1ATCNT1 0000h aktualizacja rej. OCR1x TOV1 OCF1A OC1A OCF1B OC1B AVR - timer/licznik #1 ATtiny2313 / ATmega851550/64 • Tryb #5, #6, #7 bity COM1A1,COM1A0=10, COM1B1,COM1B0=11 • licznik zlicza w górę do wartości maksymalnej TOP=255 / 511 / 1023; • flagi OCF1x ustawiają się gdy TCNT1=OCR1x.