K U R S

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

K U R S

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 wartoœci 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 wartoœci 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

K U R S

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