Serwis Edukacyjny w I-LO w Tarnowie Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej Autor artykułu: mgr Jerzy Wałaszek |
©2024 mgr Jerzy Wałaszek |
https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines
ATtiny15L udostępnia dwa 8-bitowe timery/liczniki ogólnego przeznaczenia. Timery liczniki posiadają osobne 10-bitowe preskalery. Timer/licznik 0 jako zegar bazowy używa wewnętrznego zegara (CK). Timer/licznik 1 jako zegara bazowego może używać albo zegara wewnętrznego (CK), albo szybkiego zegara peryferyjnego (PCK).
W rozdziale pojawia się termin angielski Output Compare, który odnosi się do zmiany stanu wybranej końcówki, jeśli wewnętrzny licznik odmierzy odpowiedni okres czasu. Odbywa się to w ten sposób, iż stan licznika jest porównywany z rejestrem przechowującym znacznik czasu. Gdy licznik zliczy impulsy wejściowe do liczby określonej przez wartość znacznika czasu, występuje zgodność porównania (ang. Compare Match) i w tym momencie mikrokontroler może wykonać różne operacje, np. zmienić stan logiczny określonej końcówki. Pozwala to generować różne przebiegi czasowe. Ponieważ nie spotkałem dobrego tłumaczenia dla terminu Output Compare, postanowiłem go zachować w oryginalnej postaci.
Preskaler
timera/licznika 0
Cztery możliwe wybory zegara to: CK / 8, CK / 64, CK / 256 i CK / 1024, gdzie CK jest zegarem oscylatora. Jako źródło zegara można również wybrać CK, źródło zewnętrzne z końcówki T0 oraz "0", czyli stop.
Ustawienie bitu PSR0 w rejestrze SFIOR resetuje preskaler, co pozwala użytkownikowi na pracę z przewidywalnym preskalerem.
Preskaler
timera/licznika 1
Dla timera/licznika 1 możliwe są następujące wybory zegara: PCK,
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x2C | - | - | - | - | - | FOC1A | PSR1 | PSR0 | SFIOR |
Zapis/Odczyt | O | O | O | O | O | Z/O | Z/O | Z/O | |
Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Te bity są w ATtiny15L zarezerwowane i zawsze dają odczyt zero.
Zapis logicznej jedynki do tego bitu wymusza zmianę wyjścia zgodności porównania na końcówce PB1 (OC1A) zgodnie z wartościami ustawionymi wcześniej w rejestrach COM1A1 i COM1A0. Bit wymuszonego Output Compare może być używany do zmiany stanu końcówki wyjścia bez oczekiwania na zgodność porównania w timerze. Automatyczne działanie zaprogramowane w COM1A1 i COM1A0 zostaje wykonane tak, jakby wystąpiła zgodność porównania, lecz nie jest generowane żadne przerwanie, a timer/licznik 1 nie będzie wyzerowany, nawet jeśli ustawiony jest bit CTC1. Bit FOC1A przy odczycie zawsze daje zero. Ustawianie bitu FOC1A w trybie PWM nie daje żadnych efektów.
Gdy ten bit zostanie ustawiony na 1, preskaler timera/licznika 1 zeruje się. Po wykonaniu tej operacji bit zostaje wyzerowany sprzętowo. Zapis zera do tego bitu nie daje żadnych efektów. Przy odczycie bit zawsze ma wartość zero.
Gdy ten bit zostanie ustawiony na 1, preskaler timera/licznika 0 zeruje się. Po wykonaniu tej operacji bit zostaje wyzerowany sprzętowo. Zapis zera do tego bitu nie daje żadnych efektów. Przy odczycie bit zawsze ma wartość zero.
Schemat blokowy timera/licznika 0
Te bity są zarezerwowane w ATtiny15L i zawsze dają odczyt zero.
Bity te definiują preskalowane źródło zegara dla timera 0 wg poniższej tabeli:
CS02 | CS01 | CS00 | Opis |
0 | 0 | 0 | Stop, timer/licznik 0 jest zatrzymany |
0 | 0 | 1 | CK |
0 | 1 | 0 | CK/8 |
0 | 1 | 1 | CK/64 |
1 | 0 | 0 | CK/256 |
1 | 0 | 1 | CK/1024 |
1 | 1 | 0 | Końcówka zewnętrzna T0, zbocze opadające |
1 | 1 | 1 | Końcówka zewnętrzna T0, zbocze narastające |
Warunek stopu udostępnia funkcję wyłączania timera/licznika 0. Tryby preskalowane CK pochodzą bezpośrednio z zegara oscylatora CK. Jeśli jako źródło zegara dla timera/licznika 0 zostaną wybrane tryby zewnętrznej końcówki T0, to przejścia sygnału na PB2 (T0) będą taktowały licznik nawet wtedy, gdy końcówka ta została skonfigurowana jako wyjście. Daje to możliwość programowego sterowania zliczaniem.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x32 | TCNT0[7:0] | TCNT0 | |||||||
Zapis/Odczyt | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | |
Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Timer/licznik 0 jest zaimplementowany jako licznik zliczający w górę z dostępem odczytu i zapisu. Jeśli następuje zapis do timera/licznika 0 przy obecnym źródle zegarowym, to timer/licznik 0 kontynuuje zliczanie od cyklu zegara następującym po operacji zapisu.
Podobnie, możliwości wysokich podziałów częstotliwości zegarowej czynią ten moduł użytecznym dla funkcji o niskich prędkościach lub funkcji dokładnego odmierzania czasów dla rzadko występujących działań.
Poniższy rysunek pokazuje schemat blokowy timera/licznika 1:
Dwa znaczniki stanu (nadmiaru i zgodności porównania) znajdują się w rejestrze znaczników przerwań z timerów/liczników (TIFR). Sygnały sterujące znajdują się w rejestrze sterowania timerem/licznikiem 1 (TCCR1). Ustawienia włączania/wyłączania przerwań znajdują się w rejestrze masek przerwań z timerów/liczników (TIMSK).
Timer/licznik 1 posiada dwa rejestry Output Compare, OCR1A i OCR1B, jako źródła danych do porównywania z zawartością timera/licznika 1. W trybie normalnym funkcja Output Compare współpracuje tylko z rejestrem OCR1A i uwzględnia ona opcjonalne zerowanie licznika przy zgodności porównania i działanie na końcówce Output Compare (PB1) (OC1A).
W trybie PWM rejestr OCR1A dostarcza danych, które są porównywane z zawartością timera/licznika. Przy zgodności porównania generowany jest sygnał wyjściowy PWM. W trybie tym timer/licznik zlicza w górę do wartości określonej w rejestrze OCR1B, po czym zeruje się i rozpoczyna zliczanie od nowa od wartości 0x00. Cecha ta pozwala ograniczyć maksymalną wartość licznika do określonej wartości, mniejszej od 0xFF. Jednakże, jeśli OCR1n ma wartość 0x00, wyjście pozostanie w stanie niezmienionym. Jeśli OCR1n ma wartość 0x01, to impulsy będą miały szerokość dwóch taktów, zwiększającą się liniowo, jeśli OCR1n jest większe niż 0x01. Wraz z wieloma opcjami ustawień preskalera, udostępniony jest elastyczny wybór częstotliwości PWM. Poniższa tablica pokazuje wybór zegara oraz wartości rejestru OCR1B do otrzymania częstotliwości PWM od 10 kHz do 150 kHz w krokach co 10 kHz.
Wybór zegara | OCR1B | Częstotliwość PWM |
CK | 159 | 10 kHz |
PCK/8 | 159 | 20 kHz |
PCK/4 | 213 | 30 kHz |
PCK/4 | 159 | 40 kHz |
PCK/2 | 255 | 50 kHz |
PCK/2 | 213 | 60 kHz |
PCK/2 | 181 | 70 kHz |
PCK/2 | 159 | 80 kHz |
PCK/2 | 141 | 90 kHz |
PCK | 255 | 100 kHz |
PCK | 231 | 110 kHz |
PCK | 213 | 120 kHz |
PCK | 195 | 130 kHz |
PCK | 181 | 140 kHz |
PCK | 169 | 150 kHz |
W aplikacjach o zmiennym PWM zmniejszenie o połowę ustawień preskalera i podwojenie czasu cyklu pracy może zostać użyte do precyzyjnego dostrojenia PWM. Alternatywnie można użyć odwróconego trybu PWM.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x30 | CTC1 | PWM1 | COM1A1 | COM1A0 | CS13 | CS12 | CS11 | CS10 | TCCR1 |
Zapis/Odczyt | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | |
Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Gdy jest ustawiony bit sterujący CTC1, timer/licznik 1 jest resetowany na 0x00 w takcie zegara mikroprocesora po wystąpieniu zgodności porównania z wartością rejestru OCR1A. Jeśli bit ten jest wyzerowany, timer licznik 1 kontynuuje zliczanie i zgodność porównania nie wpływa na niego.
Gdy ten bit zostanie ustawiony na 1, włącza się tryb PWM dla timera/licznika 1. Opis tego trybu podajemy w opisie rejestru OCR1A.
Bity sterujące COM1A1 i COM1A0 określają każde działanie na końcówce wyjściowej, które następuje po zgodności porównania A w timerze/liczniku 1. Operacje na końcówce wyjściowej dotyczą końcówki PB1(OC1A). Ponieważ jest to funkcja alternatywna portu we/wy, odpowiedni bit sterujący kierunkiem przesyłu danych musi być ustawiony na 1, aby sterować końcówką wyjścia. Konfiguracja tych bitów przedstawiona jest w poniższej tabeli:
COM1A1 | COM1A0 | Efekt na końcówce OC1A |
0 | 0 | Niepodłączona |
0 | 1 | Niepodłączona |
1 | 0 | Zerowana przy zgodności
porównania (nieodwrócone PWM). Ustawiana, gdy TCNT1 = 0x00. |
1 | 1 | Ustawiana przy zgodności
porównania (odwrócone PWM). zerowana, gdy TCNT1 = 0x00. |
Uwaga: 1 | W trybie PWM bity te posiadają inną funkcję. Dokładny opis znajdziesz w podrozdziale "Timer/licznik 1 w trybie PWM". Przy zmianie bitów COM1A1/COM1A0 przerwanie Output Compare 1A musi być zablokowane przez wyzerowanie bitu OCIE1A włączającego je w rejestrze TIMSK. W przeciwnym razie może się pojawić przerwanie przy zmianie tych bitów. |
Bity te definiują źródło sygnałów zegarowych zliczanych przez timer/licznik 1.
CS13 | CS12 | CS11 | CS10 | Opis |
0 | 0 | 0 | 0 | Timer/licznik 1 zatrzymany |
0 | 0 | 0 | 1 | CK x 16 (=PCK) |
0 | 0 | 1 | 0 | CK x 8 (=PCK/2) |
0 | 0 | 1 | 1 | CK x 4 (=PCK/4) |
0 | 1 | 0 | 0 | CK x 2 (=PCK/8) |
0 | 1 | 0 | 1 | CK |
0 | 1 | 1 | 0 | CK/2 |
0 | 1 | 1 | 1 | CK/4 |
1 | 0 | 0 | 0 | CK/8 |
1 | 0 | 0 | 1 | CK/16 |
1 | 0 | 1 | 0 | CK/32 |
1 | 0 | 1 | 1 | CK/64 |
1 | 1 | 0 | 0 | CK/128 |
1 | 1 | 0 | 1 | CK/256 |
1 | 1 | 1 | 0 | CK/512 |
1 | 1 | 1 | 1 | CK/1024 |
Warunek stopu udostępnia funkcję zatrzymywania timera. Preskalowane tryby CK są uzyskiwane bezpośrednio z zegara oscylatora CK.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x2F | MSB | LSB | TCNT1 | ||||||
Zapis/Odczyt | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | |
Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Ten 8-bitowy rejestr zawiera wartość timera/licznika 1.
Timer/licznik 1 został zaimplementowany jako licznik zliczający w górę z dostępem odczytu i zapisu. Z powodu synchronizacji mikroprocesora i timera/licznika 1 zapis danych do rejestru licznika jest opóźniany o jeden cykl zegara mikroprocesora.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
---|---|---|---|---|---|---|---|---|---|
0x2E | MSB | LSB | OCR1A | ||||||
Zapis/Odczyt | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | |
Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Rejestr 1A Output Compare Register jest 8-bitowym rejestrem z odczytem i zapisem.
Rejestr ten zawiera dane, które będą ciągle porównywane z zawartością timera/licznika 1. Działania wykonywane przy zgodności tych porównań są określone w rejestrze TCCR1. Zgodność porównania występuje tylko wtedy, gdy timer/licznik 1 zliczy do wartości w rejestrze OCR1A. Programowy zapis, który ustawia TCNT1 i OCR1A na te same wartości, nie generuje zgodności porównania.
Zgodność porównania ustawi na 1 znacznik przerwania przy porównaniu (ang. Compare Interrupt Flag) w następnym takcie zegara mikroprocesora po zdarzeniu porównania.
Gdy zostanie wybrany tryb PWM, to timer/licznik 1 wraz z rejestrem OCR1A tworzą 8-bitowy moduł PWM działający swobodnie i bezproblemowo z wyjściem na końcówce PB1(OC1A). Timer/licznik 1 pracuje jako licznik zliczający do przodu od 0x00 do wartości określonej w drugim rejestrze Output Compare – OCR1B, po czym rozpoczynający ponownie od 0x00. Gdy wartość licznika zgodzi się z zawartością rejestru OCR1A, końcówka PB1(OC1A) zostaje ustawiona lub wyzerowana zgodnie z ustawieniami bitów COM1A1/COM1A0 w rejestrze sterującym timerem/licznikiem 1 – TCCR1. Szczegóły podaje poniższa tabela:
COM1A1 | COM1A0 | Działanie na końcówce OC1A |
0 | 0 | Niepodłączona |
0 | 1 | Niepodłączona |
1 | 0 | Zerowana przy zgodności porównania z OCR1A (nieodwrócony tryb PWM). Ustawiana, gdy TCNT1=0x00. |
1 | 1 | Ustawiana przy zgodności porównania z OCR1A (odwrócony tryb PWM). Zerowana, gdy TCNT1=0x00. |
Zwróć uwagę, iż w trybie PWM zapis do rejestru OCR1A powoduje umieszczenie danych najpierw w rejestrze tymczasowym. Wartość ta zostaje zatrzaśnięta w rejestrze OCR1A, gdy timer/licznik 1 osiąga wartość OCR1B. Zapobiega to generacji impulsów PWM o nieprawidłowej szerokości w przypadku niezsynchronizowanego zapisu do OCR1A.
Efekty
niezsynchronizowanego zatrzaskiwania rejestru Output Compare
W czasie pomiędzy operacją zapisu a operacją zatrzaśnięcia danych, odczyt z OCR1A zwróci zawartość rejestru tymczasowego. Oznacza to, iż odczyt daje zawsze ostatnio zapisaną wartość do OCR1A.
Gdy OCR1A zawiera 0x00 lub wartość maksymalną równą zawartości rejestru OCR1B, wyjście PB1(OC1A) jest utrzymywane w stanie niskim lub wysokim zgodnie z ustawieniami bitów COM1A1/COM1A0.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
---|---|---|---|---|---|---|---|---|---|
0x2D | MSB | LSB | OCR1B | ||||||
Zapis/Odczyt | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | |
Wartość początkowa | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
Rejestr 1B Output Compare (OCR1B) jest 8-bitowym rejestrem z dostępem zapisu i odczytu. Używany jest on tylko w trybie PWM i ogranicza górną wartość, do której będzie zliczał timer/licznik 1. W trybie PWM po osiągnięciu wartości w OCR1B licznik rozpoczyna zliczanie od 0x00.
COM1A1 | COM1A0 | OCR1B | Wyjście PWM |
1 | 0 | 0x00 | L |
1 | 0 | OCR1B | H |
1 | 1 | 0x00 | H |
1 | 1 | OCR1B | L |
W trybie PWM znacznik przepełnienia timera (ang. Timer Overflow Flag, TOV1) jest ustawiany tak samo jak w trybie normalnym. Przerwanie od przepełnienia timera 1 (ang. Timer Overflow Interrupt1) działa dokładnie tak jak w trybie normalnym timera/licznika, tj. zostaje ono wykonane, gdy znacznik TOV1 został ustawiony pod warunkiem, że jest włączona globalna obsługa przerwań (bit I w rejestrze stanu SREG) oraz włączona jest obsługa przerwania od przepełnienia timera/licznika. Odnosi się to również od znacznika OCF1A i związanego z nim przerwania.
Częstotliwość PWM będzie równa częstotliwości zegara timera podzielonej przez wartość OCR1B + 1.
Wybór zegara | OCR1B | Częstotliwość PWM |
CK | 159 | 10 kHz |
PCK/8 | 159 | 20 kHz |
PCK/4 | 213 | 30 kHz |
PCK/4 | 159 | 40 kHz |
PCK/2 | 255 | 50 kHz |
PCK/2 | 213 | 60 kHz |
PCK/2 | 181 | 70 kHz |
PCK/2 | 159 | 80 kHz |
PCK/2 | 141 | 90 kHz |
PCK | 255 | 100 kHz |
PCK | 231 | 110 kHz |
PCK | 213 | 120 kHz |
PCK | 195 | 130 kHz |
PCK | 181 | 140 kHz |
PCK | 169 | 150 kHz |
Dokładny współczynnik wypełnienia sygnału wyjściowego w nieodwróconym trybie PWM wyraża się wzorem:
Gdzie: TT1 jest okresem wybranego źródła zegarowego dla timera/licznika 1 TPCK jest okresem zegara PCK (39,1 ns) |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2024 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.