Celem tego artyku³u jest opis funkcjonowania oraz sposobÛw konfiguracji i†wykorzystania
timerÛw w†mikrokontrolerach z†rodziny AVR. Rozpoczynaj¹c od ogÛlnego opisu, poprzez
przyk³adowe programy, postaram siÍ wyt³umaczyÊ jak wykorzystaÊ timer wbudowany
w†strukturÍ mikrokontrolera AVR dla w³asnych potrzeb. W†przyk³adach programÛw
pos³ugiwa³em siÍ mikrokontrolerem AT90S8535.
Obsługa timerów
część 1
w mikrokontrolerach AVR
Trudno jest znaleüÊ polski odpo-
niesienia. Prowadzi to nas do wnios-j¹ siÍ z†CPU mikrokontrolera oraz jak wiednik s³owa ìtimerî. WiÍkszoúÊ
ku, øe czas trwania impulsu moøe mog¹ byÊ przezeÒ wykorzystane.
konstruktorÛw, ktÛrzy mieli juø do byÊ mierzony z†dok³adnoúci¹ do cza-czynienia z†mikrokontrolerami, dosko-su trwania impulsÛw wzorcowych.
Sygnalizacja zdarzeÒ
nale wiedz¹ jakie funkcje moøe on Stanowi¹ one swego rodzaju jednost-CPU mikrokontrolera AVR moøe mo-
spe³niaÊ. PozwÛlcie wiÍc, øe bÍdÍ siÍ
kÍ pomiarow¹. Najwaøniejsz¹ jednak nitorowaÊ do 3†zdarzeÒ powodowa-tym s³owem pos³ugiwa³ bez poszuki-cech¹ timera jest ta, øe moøe on fun-nych przez kaødy z†timerÛw. Zdarze-wania jego odpowiednika w†naszym kcjonowaʆniezaleønie od reszty pro-nia te s¹ sygnalizowane przez usta-ojczystym jÍzyku.
cesÛw obs³ugiwanych przez jednostkÍ
wienie odpowiednich bitÛw†statusu Timer to prosty uk³ad licz¹cy, naj-centraln¹ mikrokontrolera (abstrahuj¹c (tak zwanych flag) w†rejestrze TIMSK
czÍúciej o†rozdzielczoúci 8†lub 16 bi-od konfiguracji bitÛw kontroluj¹cych ( Timer Interrupt Mask). Tak wiÍc kontÛw. Niech nie zwiedzie nas jednak pracÍ timera, ktÛra musi byÊ wyko-trola stanu timera sprowadza siÍ do prostota jego budowy - z†kaødym ti-nana przez CPU).
testowania przez CPU mikrokontrolera merem zwi¹zany jest bowiem szereg Struktury wspÛ³czesnych mikrokon-maksymalnie 3†bitÛw sygnalizuj¹cych rÛønych zmiennych (najczÍúciej s¹ to trolerÛw wyposaøane s¹ w†2†lub
stan timera. Bitami tymi s¹:
bity rejestru kontrolnego) wp³ywaj¹-
3†uk³ady timerÛw. Mikrokontrolery
Timer Overflow
cych na to w†jaki sposÛb bÍdzie on rodziny AVR (AT90 i†ATmega) s¹
(przepe³nienie timera)
pracowa³. CzÍsto istniej¹ wiÍc moøli-wyposaøone w†dwa timery 8-bitowe Ustawienie tego bitu informuje, øe woúci nastaw kierunku zliczania (w i†jeden 16-bitowy. W†wiÍkszoúci za-timer osi¹gn¹³ wartoúÊ maksymaln¹
gÛrÍ lub w†dÛ³) oraz wyboru ürÛd³a stosowaÒ†wiÍksze moøliwoúci oferuje i†zostanie wyzerowany w†nastÍpnym impulsÛw zegarowych - czy to z†oto-timer 16-bitowy, jednak dla wielu ap-cyklu zegarowym. Jak wczeúniej
czenia mikrokontrolera, czy teø z†we-likacji rozdzielczoúÊ 8-bitowa jest wy-wspomnia³em, AVR wyposaøony jest wnÍtrznego generatora zegarowego lub starczaj¹ca. Jest ona teø bardziej do-w†dwa timery 8-bitowe oraz jeden 16-do³¹czonego rezonatora kwarcowego pasowana do architektury rdzenia bitowy. W†praktyce oznacza to dwa (AVR). Programista - elektronik naj-
(ktÛry jest 8-bitowy) i†przez to timery mog¹ce liczyÊ do wartoúci czÍúciej uøywa timera b¹dü to do zli-umoøliwia znacznie szybsze wykony-0xFF oraz jeden licz¹cy do 0xFFFF.
czania impulsÛw, b¹dü to do pomia-wanie operacji arytmetycznych czy Przepe³nienie sygnalizowane jest przy ru czasu ich trwania albo teø do bu-porÛwnaÒ ze sta³ymi lub zmiennymi pomocy bitu nosz¹cego nazwÍ Timer dowy tak zwanego generatora PWM.
uøywanymi przez dan¹ aplikacjÍ.
Overflow Flag (TOVx) w†rejestrze BÍdzie o†tym mowa w†dalszej czÍúci Ze wzglÍdu na swoj¹ elastycznoúÊ, TIFR ( Timer Interrupt Flag Register).
artyku³u.
timery mikrokontrolerÛw AVR mog¹
Compare Match
NajczÍúciej, jeúli timer wykorzysty-byÊ wykorzystywane dla rÛønych ce-
(spe³niony warunek porÛwnania)
wany jest do pomiaru czasu trwania lÛw. Dalsza czÍúÊ tekstu ma na celu W†przypadku, gdy nie jest koniecz-impulsu, to jako wzorzec wykorzystu-przybliøenie tych zastosowaÒ oraz ne monitorowanie stanu flagi prze-je siÍ wewnÍtrzny generator zegarowy wyt³umaczenie w†jaki sposÛb nieza-pe³nienia, moøe byÊ uøywane prze-lub wzorcowy, zewnÍtrzny sygna³ od-leøne uk³ady funkcjonalne komuniku-rwanie typu COMPARE MATCH wy-
wo³ywane, gdy wartoúÊ zapamiÍtana w†rejestrze OCRx ( Output Compare Tabela 1. Nastawy bitów preskalera Register) zgadza siÍ ze zliczon¹
TC
T C
C R
C x
R
Synchroniczny Timer 0
Synchroniczny/Asynchroniczny
przez timer. Wskazanie przez timer i Timer 1
i Timer
Timer 2
wartoúci identycznej z†zapisan¹ w†re-Bit 2 Bit 1
Bit 0
PCK0,1 = zegar syst.
PCK2 = zegar syst./zegar zewn.
jestrze OCRx powoduje ustawienie 0
0
0
0 (Timer 0/1 zatrzymany)
0 (Timer 2 zatrzymany)
w³aúciwego bitu OCFx ( Output Com-0
0
1
PCK (zegar systemowy)
PCK2 (zegar systemowy lub asynchroniczny) pare Flag) w†rejestrze TIFR. Timer 0
1
0
PCK/8
PCK2/8
moøe byÊ rÛwnieø skonfigurowany
0
1
1
P
w†taki sposÛb, aby jednoczeúnie
CK/64
PCK2/32
z†ustawieniem flagi OCFx wartoúÊ re-1
0
0
PCK/256PCK2/64
jestru licz¹cego timera by³a zerowa-1
0
1
PCK/1024
PCK2/128
na. Istnieje rÛwnieø moøliwoúÊ wy-1
1
0
PCK opadaj¹ce zbocze na wypr.Tx
PCK2/256
boru takiego trybu pracy, dziÍki ktÛ-
1
1
1
PCK narastaj¹ce zbocze na wypr.Tx PCK2/1024
remu automatycznie, w†momencie
Elektronika Praktyczna 7/2003
77
a)
b)
Rys. 1. Poglądowy schemat połączeń pomiędzy preskalerem i multiplekserem dla Timerów 0 i 1 (a) oraz 2 (b)
Uwagi:
1. Preskaler pracuje nieprzerwanie - równie¿
od wartoci 0. W mikrokontrolerach nie przepro-2. W nowszych mikrokontrolerach posiadaj¹-
podczas wprowadzania nastaw timerów. W przy-wadzaj¹cych zerowania preskalera mo¿e ono zo-cych preskaler dzielony pomiêdzy kilka timerów, padkach gdy wymagane jest bardzo dok³adne odstaæ przeprowadzone przez detekcjê przepe³nienia przeprowadzenie sekwencji reset w taki sam sposób mierzanie czasu, nale¿y samemu zadbaæ o to, aby preskalera przez aplikacjê oraz inicjalizacjê rejest-wp³ywa na wszystkie pod³¹czone urz¹dzenia, inicju-timer zosta³ zatrzymany i preskaler zacz¹³ podzia³
ru TCNTx po tym zdarzeniu.
j¹c je i przeprowadzaj¹c odliczanie od wartoci 0.
spe³nienia warunku porÛwnania, od-1. Kontrolowanie stanÛw bitÛw sta-in r16,TIFR
powiednim wyprowadzeniom mikro-
tusu (flag) w†czasie pracy programu
;załadowanie rejestru TIFR
kontrolera moøe zostaÊ przypisany poprzez ich testowanie metod¹ odpy-
;do r16
stan niski, wysoki lub zanegowany.
tywania ( pooling - odpytywanie) i†po-Funkcja ta jest bardzo uøyteczna dejmowanie akcji odpowiedniej dla sbrs
r16,TOV0
podczas budowy generatorÛw sygna-danej ich kombinacji.
;omiń następną instrukcję,
³u prostok¹tnego o†rÛønej czÍstotli-2. Odpowiednie ustawienie rejestru
;jeśli bit 0 w r16 jest
woúci. Oferuj¹c szeroki zakres gene-kontroluj¹cego przerwania a†nastÍpnie
;ustawiony
rowanych czÍstotliwoúci umoøliwia automatyczne przerywanie pracy pro-na przyk³ad budowÍ prostych prze-gramu g³Ûwnego i†wykonywanie pro-rjmp
loop
twornikÛw cyfrowo - analogowych, gramÛw obs³ug przerwaÒ.
;wykonaj skok do początku
jakkolwiek do tego zastosowania bar-3. SprzÍtowa i†ca³kowicie automa-
;pętli głównej programu
dziej w³aúciwym wydaje siÍ wyko-
tyczna zmiana stanu odpowiedniego
;jeśli bit przepełnienia
rzystanie trybu generatora o†modulo-wyprowadzenia mikrokontrolera.
;Timera 0 nie był ustawiony
wanej szerokoúci impulsu (PWM).
Kontrola statusu flag korzysta z†fak-
Input Capture
tu, øe wewnÍtrzne uk³ady mikrokon-event:
(przechwyt wartoúci)
trolera ustawiaj¹ okreúlone bity powo-
.........
Mikrokontrolery AVR posiadaj¹ wej-duj¹ce przejúcie do procedury obs³u-
;tu rozpoczyna się obsługa
úcie nazywane Input Capture (IC).
gi przerwania o†ile ta nie zosta³a za-
;zdarzenia “przepełnienie
Zmiana stanu na tym wejúciu powo-broniona. Oczywiúcie warunkiem ko-
;Timera 0”
duje, øe aktualna wartoúÊ timera jest rzystania z†tej metody jest wy³¹czenie odczytywana i†zapamiÍtywana w†re-obs³ugi przerwania, bo inaczej odpy-Linie te powinny byÊ umieszczone jestrze ICRx ( Input Capture Register).
tywanie nie mia³oby sensu. Kontrola w†pÍtli g³Ûwnej wykonywanego pro-Jednoczeúnie ustawiana jest flaga stanu bitÛw flag, jakkolwiek chyba gramu a†stan flag musi byÊ kontrolo-ICFx ( Input Capture Flag) w†rejestrze naj³atwiejsza do wykonania, jest jed-wany tak czÍsto, jako tylko jest to TIFR. Funkcja ta najczÍúciej wyko-noczeúnie ma³o efektywn¹ bo zajmuje moøliwe.
rzystywana jest do pomiaru czasu czas mikrokontrolera. Naleøy rÛwnieø Najlepszym - moim zdaniem - spo-trwania impulsu.
liczyÊ siÍ z†pewnym opÛünieniem
sobem kontroli stanu timera jest wy-Kaødy z†wyøej wymienionych bitÛw przy podejmowaniu akcji, poniewaø korzystanie systemu przerwaÒ. Jak moøe wywo³ywaÊ odpowiedni wektor CPU zanim zacznie kontrolowaÊ stan wczeúniej wspomnia³em, okreúlone przerwania. Przerwaniami oraz ich flag, moøe byÊ zaangaøowane w†reali-zdarzenia zwi¹zane ze stanem timera obs³ug¹ zajmiemy siÍ w†dalszej czÍú-
zacjÍ zupe³nie innej czÍúci kodu powoduj¹ ustawianie flag w†rejestrze ci artyku³u.
zwi¹zanej z†obs³ug¹ ca³kowicie in-TIMSK. Powodem ustawienia flagi
nych funkcji mikrokontrolera.
moøe byÊ przepe³nienie rejestru licz¹-
Kontrola stanu timera
Poniøszy fragment programu w†asem-cego, spe³nienie warunku porÛwnania S¹ trzy podstawowe metody kont-blerze ilustruje uøycie tej metody wy-czy teø zakoÒczenie dzia³ania przez rolowania zdarzeÒ generowanych
korzystanej do kontroli Timera 0: funkcjÍ pomiaru czasu trwania impul-przez timer a†tym samym powodowa-su zwi¹zan¹ z†wejúciem ICP. Tyle nia reakcji mikrokontrolera w†zaleø-
loop: ;główna pętla programu
gwoli przypomnienia. O†ile wykony-noúci od stanu timera:
.........
wanie funkcji obs³ug przerwaÒ jest 78
Elektronika Praktyczna 7/2003
dozwolone, CPU mikrokontrolera
siÍtn¹ 32). Zawiera on teø sposÛb dzia³u czÍstotliwoúci generatora zega-przerywa wykonywanie bieø¹cego
ustawienia wartoúci porÛwnywanej.
rowego. Multiplekser uøywany jest do programu lub wychodzi ze stanu
Konfiguracja timera jest dokonywana wyboru ktÛra z†czterech (szeúciu) uúpienia i†wykonuje skok pod úciúle przy pomocy ustawienia bitÛw COMx0
czÍstotliwoúci uøywana jest jako pod-okreúlony adres zwi¹zany z†danym i†COMx1 w†rejestrze TCCRx - w†przy-stawa czasu timera. Alternatywnie powodem przerwania. Jednoczeúnie padku uøycia Timera 2†s¹ to bity multiplekser moøe byÊ uøyty do omi-zapamiÍtany zostaje stan licznika roz-COM20 i†COM21 w†rejestrze TCCR2.
niÍcia preskalera oraz konfiguracji ze-kazÛw tak, øe jest moøliwe jego od-Naleøy jednak pamiÍtaÊ o†tym, øe wnÍtrznego wyprowadzenia jako wej-tworzenie w†momencie powrotu do
wybÛr trybu pracy timera nie wp³y-
úciowego dla timera.
programu g³Ûwnego.
wa na ustawienie kierunku linii por-Timery 0†i†1†s¹ timerami synchro-Jest to metoda bardzo efektywna -
tu w³aúciwej dla OC2. Aby zezwoliÊ
nicznymi i†uøywaj¹ zegara systemo-oszczÍdza czas mikrokontrolera anga-na ustawianie wartoúci wyprowadze-wego CPU jako ürÛd³a sygna³u zega-
øuj¹c CPU tylko wÛwczas, gdy to jest nia OC2, odpowiedni bit konfiguracji rowego. Asynchroniczny Timer 2†wy-naprawdÍ potrzebne, chociaø nastrÍ-
kierunku bitu portu musi byÊ usta-maga w³asnego preskalera co czyni go cza pewne trudnoúci przy implemen-wiony w†taki sposÛb aby wyprowa-
niezaleønym od zegara systemowego.
tacji. Program g³Ûwny jest bowiem dzenie to pracowa³o jako wyjúciowe.
Na rys. 1 pokazano po³¹czenia po-przerywany w†momencie, ktÛry trud-miÍdzy preskalerem i†multiplekserem.
no przewidzieÊ i†to programista musi Opcje nastaw zegara
Danych na temat konkretnej konfigu-zadbaÊ o†to, aby przy wejúciu do pro-Generator zegarowy AVR zawiera
racji dla danego mikrokontrolera AVR
cedury obs³ugi przerwania i†po jej preskaler pod³¹czony do multiplekse-naleøy szukaÊ w†jego karcie katalogo-opuszczeniu program nadal wykony-ra. Preskaler to dzielnik czÍstotliwoú-
wej. W†tab. 1 zawarto listÍ moøli-wany by³ normalnie. Odpowiednie
ci zegara. Zosta³ on zaimplementowa-wych nastaw preskalera. I†tu rÛwnieø przerwania za³¹czane s¹ przez nasta-ny jako licznik z†kilkoma wyjúciami naleøy odwo³aÊ siÍ do danych zawar-wy bitÛw w†rejestrze TIMSK ( Timer o†rÛønych stopniach podzia³u.
tych w†konkretnej karcie katalogowej, Interrupt Mask).
W†przypadku AT90S8535 jest to 10-gdzie prawdopodobnie bÍd¹ one opi-Poniøszy przyk³ad w†asemblerze
bitowy licznik uøywany do wytworze-sane dok³adniej i†powi¹zane z†kon-ilustruje w†jaki sposÛb w³¹czyÊ pro-nia czterech (w przypadku Timera kretnym modelem mikrokontrolera.
cedurÍ obs³ugi przerwania na skutek 2†szeúciu) rÛønych czÍstotliwoúci tak-Jacek Bogusz, AVT
przepe³nienia Timera 2:
tuj¹cych timery, wynikaj¹cych z†po-jacek.bogusz@ep.com.pl
ldi r16,1<<OCIE2
out TIMSK,r16
;zezwolenie na
;przerwanie Output
;Compare Timera 2
sei
;zezwolenie na
;przyjmowanie przerwań
Tryby pracy, w†ktÛre wyposaøono
Timer 1†i†Timer 2†umoøliwiaj¹ rÛwnieø nastawy akcji wykonywanych
w†sposÛb sprzÍtowy, bez koniecznoú-
ci wykonywania øadnego podprogra-mu. Odpowiednie wyprowadzenie
mikrokontrolera moøe zostaÊ skonfi-gurowane w†taki sposÛb, aby by³o ustawiane, zerowane b¹dü teø nego-wane w†momencie spe³nienia warun-ku porÛwnania. W†stosunku do
dwÛch poprzednich rozwi¹zaÒ ten
tryb nie angaøuje w†øaden sposÛb CPU mikrokontrolera. Poniøszy przyk³ad ilustruje ten sposÛb konfiguracji z†wykorzystaniem Timera 2:
ldi r16,(1<<COM20)|(1<<CS20) out
TCCR2,r16
;OC2 negowany po spełnieniu
;warunku compare/match
;zegar = zegar systemowy
ldi
r16,32
out
OCR2,r16
;ustawienie
;porównywanej wartości na 32
Poziom logiczny wyprowadzenia
OC2 jest negowany w†momencie spe³-
nienia warunku porÛwnania (gdy licznik Timera 2†osi¹gnie wartoúÊ dzie-Elektronika Praktyczna 7/2003
79