Documente Academic
Documente Profesional
Documente Cultură
Modulele Timer
Modulele timer sunt n esen constituite dintr-un numrtor, majoritatea
microcontrolerelor punnd la dispoziie unul sau mai multe timere cu o rezolu ie pe 8 sau/ i
16 bii. Timer-ele sunt o parte important a microcontrolerelor fiind folosite ntr-o varietate
mare de aplicaii dependente de timp: de la simpla msurare a unei perioade de timp i pn
la generarea de semnale cu perioad sau frecven impus. Un timer poate fi folosit cu funcia
sa de baz ca i numrtor dar n general timer-ele permit utilizatorului i alte func ii speciale
cu ajutorul mecanismelor hardware implementate. Mecanismul de comparare permite
controlul unor semnale de ieire sau chiar generarea semnalelor PWM (Pulse Width
Modulation) pentru controlul motoarelor; mecanismul de captur permite monitorizarea unor
semnale de intrare, datarea sau marcarea n timp a unui eveniment extern; numrtoarele
interne permit generarea de referine de timp interne, necesare n bucle de ntrziere i chiar
generarea ntreruperilor dup trecerea unei anumit numr de cicluri de ceas sau perioade de
timp.
1.1Numrtorul
Fiecare
timer este, la baza, un numrtor care este incrementat sau
decrementat la fiecare semnal de ceas, direcia fiind fix sau configurabil.
Valoarea curent a numrtorului poate fi citit dintr-un registru de numrare
care poate fi de asemenea setat la o valoare de ctre utilizator. Pentru un timer
cu rezoluie de n bii, numrarea se face n intervalul [0, 2n 1]. n modul normal
de funcionare, numrtorul se reseteaz la atingerea valorii maxime de
numrare (2n 1) i astfel registru de numrare va fi setat la valoarea de nceput.
Totui, valoarea maxim de numrare poate fi programat la orice valoare din
intervalul [0, 2n 1] prin scrierea acestei valori ntr-un alt registru al timer-ului.
Astfel, printr-o setare suplimentar, noua valoare de maxim poate s fie noua
valoare la care numrtorul va fi resetat.
Chiar daca un timer folosete n general aceeai sursa de ceas cu cea a
microcontrolerului n sine, totui se pot permite i alte surse de ceas pentru
timer.
Ceasul sistemului (Ceasul Intern)
Acesta este modul predefinit de funcionare al timer-ului. n acest mod, timer-ul
este incrementat la fiecare front ascendent al semnalului de ceas al
microcontrolerului.
Prescaler
n acest mod se folosete de asemenea ceasul intern al sistemului dar este filtrat
printr-un prescaler. Un prescaler este de fapt un alt numrtor de o lungime
variabil (valorile tipice fiind 8 sau 10 bii) care este incrementat odat cu ceasul
sistemului. Astfel, timer-ul va folosi ca i semnal de ceas semnalul provenit de la
unul din biii numrtorului. Daca, de exemplu, prescaler-ul este incrementat la
fiecare front cresctor al ceasului sistemului, atunci cel mai nesemnificativ bit va
avea perioada dubl fa de cea a ceasului sistemului. n acest caz se folosete o
valoare a prescaler-ului egal cu 2 iar timer-ul va opera la jumtate din frecvena
ceasului sistemului. Al doilea cel mai nesemnificativ bit va diviza frecvena din
nou la jumtate, si tot aa pentru toi ceilali bii. Modului timer ofer
posibilitatea de alegere a unei valori predefinite pentru prescaler (8, 32, 64,
256, ...). Scopul prescaler-ului este de a extinde intervalul de timp n care
numr timer-ul. De exemplu, pentru un timer pe 8 bii i o frecven de ceas de
1 MHz, domeniul de timp este de 255 s, n timp ce dac folosim un prescaler de
1024 domeniul de timp va fi de aproximativ 260 ms.
Semnale externe (Acumulatorul de Impulsuri)
n acest mod, timer-ul primete semnalul de ceas ca un semnal extern care este
conectat pe un anumit pin de intrare al microcotrolerului. Timer-ul incrementeaz
valoarea de numrare la fiecare front cresctor al acestui semnal. Exist o
constrngere n acest caz, i anume, timpul dintre dou fronturi trebuie s fie
mai mare dect perioada ceasului intern. n acest mod, timer-ul poate fi folosit
pentru numrarea unor evenimente externe reprezentate prin fronturi
cresctoare.
Cristal de cuar extern
Aici, timer-ul folosete semnalul de ceas provenit de la un cristal de cuar
conectat pe 2 pini predefinii ai controlerului. Acest mod este proiectat n general
pentru folosirea unui cristal de cuar de 32.768 kHz folosit la ceasuri digitale i
poate fi folosit pentru implementarea unui ceas de timp real (RTC Real-Time
Clock).
1.2Captura la intrare
Funcia de captur la intrare este folosit pentru a marca n timp un eveniment
(de cele mai multe ori extern), care poate s fie constituit de un front cresctor
sau/i descresctor sau de un anumit nivel logic. Atunci cnd are loc acest
eveniment materializat printr-o tranziie pe pinul ICn al microcontrolerului, timerul copiaz automat valoarea curent a numrtorului ntr-un registru ICR (Input
Capture Register), care poate fi citit de program. La momentul evenimentului,
timer-ul seteaz de asemenea i un flag care poate fi folosit pentru generarea
unei ntreruperi pentru a anuna programul c a avut loc un eveniment de
captur la intrare. Pot exista unul sau mai muli pini de acest fel. Un astfel de pin
de captur poate fi folosit de asemenea i ca pin de intrare de uz general.
1.3Comparare la ieire
Funcionalitatea de comparare la ieire (OC - Output Compare) este chiar opusul
capturii la intrare. Pentru captur la intrare, marcajul de timp este memorat
atunci cnd are loc un eveniment extern pe linia de intrare. La comparare la
ieire, va avea loc un eveniment la ieire atunci cnd s-a mplinit o perioad de
timp prestabilit. Timer-ul conine un registru de comparare la ieire (OCR
Output Compare Register) n care se poate seta timpul la care s aib loc
evenimentul de OC. n momentul n care valoarea curent a timer-ului ajunge la
aceast valoare de comparare, evenimentul de OC se activeaz. Acest
eveniment poate s schimbe nivelul logic al unui pin de ieire OCn (HIGH sau
LOW) sau poate doar s genereze o ntrerupere intern. Funcia de OC are de
cele mai multe ori o opiune de resetare care va reseta automat registrul de
numrare al timer-ului atunci cnd acesta a ajuns la valoarea de comparare.
Desfurarea lucrrii
Aceast lucrare de laborator se bazeaz pe folosirea microcontrolerului ATmega32. Foaia de
specificaii (datasheet) poate fi consultat la adresa (www.atmel.com/Images/doc2503.pdf).
Acest microcontroler conine trei timere dintre care doua pe 8 bii si unul pe 16
bii. Din motive de simplitate se va considera n aceast lucrare doar unul din
timer-ele pe 8 bii numit Timer0 (pag. 69, datasheet). Structura bloc simplificat
este prezentat n Figura 3.1. n aceasta diagram, litera n va fi nlocuit de 0
ntruct este vorba despre Timer0. Astfel TCNTn va fi vzut ca i TCNT0.
funcionare setat. Registrul OCR0 reprezint registrul de comparare la ie ire i poate fi scris
cu o valoare din intervalul [0; 255]. n modul de funcionare OC, valoarea lui TCNT0 este
comparat cu valoarea acestui registru pentru declanarea unui eveniment ca de exemplu
resetarea lui TCNT0, generarea unui semnal extern pe pinul OC0 sau generarea unui semnal
de ntrerupere.
Bazat pe semnalul de ceas clkTn i potrivit setrilor din registrul TCCR0, blocul
Control Logic trimite comenzi de numrare, direcie de numrare i resetare a registrului de
numrare TCNT0 i de asemenea activeaz semnalul de ntrerupere pentru Overflow.
n aceast lucrare de laborator se va folosi timer-ul n regim normal de numrare
(WGM01:0 = 0). Acesta este cel mai simplu mod de operare n care direcia de numrare va fi tot
timpul pozitiv i nu va avea loc nici o resetare a registrului de numrare. Cnd numrtorul va trece
de valoarea maxim pe 8 bii (255), acesta va ajunge din nou la valoarea minim (0) i va continua s
numere.
n modul CTC (Clear Timer on Compare Match), registrul OCR0 este folosit pentru a manipula
rezoluia numrtorului i de asemenea valoarea maxim de numrare. n modul CTC (WGM01:0 = 2)
numrtorul este resetat atunci cnd valoarea sa (TCNT0) este egal cu cea din registrul OCR0. n
acest mod de funcionare se poate genera o ntrerupere de fiecare dat cnd are loc egalitatea dintre
cei 2 regitrii.
Pentru a genera un semnal de ieire n modul CTC, pinul OC0 trebuie setat ca i pin de ieire
digital. Modul de ieire pentru OC0 poate fi setat ca s basculeze de fiecare dat cnd se gsete
egalitate ntre TCNT0 i OCR0. Frecvena semnalului este definit de ecuaia urmtoare:
f OC 0 =
unde
f clk /O
I
f clk /O
2 N (1+OCR 0)
I
ului (1, 8, 64, 256, 1024) iar ORC0 este valoarea scris n acest registru.
Descrierea regitrilor
TCCR0 Acest registru permite controlul modului de funcionare a Timer-ului.
Biii WGM01:0 permit schimbarea modului de operare ntre Normal, CTC i PWM.
Biii COM01:0 permit schimbarea funcionalitii pinului OC0 din pin digital de uz
general n pin de OC. Pentru fiecare mod de operare exist o alt modalitate de setare.
Biii CS02:0 ofer posibilitatea selectrii semnalului de ceas dintre ceasul intern,
ceasul intern filtrat prin prescaler (1, 8, 64, 256, 1024) i semnal de ceas de la pinul T0 (PB0).
TCNT0 Acest registru permite accesul direct att pentru scrierea ct i pentru citirea
numrtorului pe 8 bii al timer-ului.
OCR0 Registrul de comparare la ieire conine o valoare pe 8 bii care este comparat
mereu cu registrul de numrare (TCNT0).
Exerciii:
1. Implementarea unui ceas digital
Pentru implementarea unui ceas, prima necesitate care apare este aceea de a avea
posibilitatea s msurm o secund. Pentru un timer pe 8 bii cea mai mare perioada de timp
care poate fi msurat este egal cu:
T0=
1
1
=
f 0 f clk /O / N /TOP
I
Programul:
for(;;){
if(TCNT0>=125){
TCNT0 = 0;
ms++;
if(ms>=1000){
ms=0;
s++;
}
if(s==60){
s=0;
m++;
}
}
display(4,s%10);
display(3,(s/10)%10);
display(2,(m%10);
display(1,(m/10)%10);
}