Sunteți pe pagina 1din 5

1.

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.

Aceast opiune permite implementarea unei ntreruperi periodice de timp real


(sau a unui semnal de ieire periodic) cu un efort minim.

1.4PWM Pulse Width Modulation


Funcia de generator PWM este un caz particular al modului de comparare la
ieire. Aceast funcie permite timer-ului s genereze un semnal de ieire digital
periodic al crui timp de HIGH (factor de umplere) i perioad pot fi configurate
n program. Exist mai muli regitrii prin care se pot seta aceti parametri
precum si tipul semnalului PWM (Fast PWM sau Phase Correct PWM). Aceste
semnale PWM pot fi folosite n multe aplicaii cum ar fi: construcia unor
convertoare digital-analogice simple, implementarea funciei de ABS la maini,
controlul intensitii unui LED sau display numeric sau pentru controlul
motoarelor (servo-motaore, motoare pas cu pas sau motoare de curent
continuu). Generarea de semnale PWM este subiectul unei lucrri urmtoare.

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.

Figura 3.1. Diagrama bloc a unui timer pe 8 bii


n construcia intern a timer-ului se observa existena a 3 regitrii pe 8 bii:TCCR0,
TCNT0 i OCR0. Registrul TCCR0 (Timer/Counter Control Register) este un registru de
control care se folosete pentru setarea diferitelor funcionaliti ale timer-ului : selecteaz
sursa ceasului (clock), seteaz valoarea pentru prescaler, seteaz modul de operare i schimb
funcionalitatea pinului OC0 (PB3) din pin de comparare la ieire n pin de ieire de uz
general i invers. Registrul TCNT0 este registrul de numrare al timer-ului. La fiecare front
cresctor al semnalului de ceas acesta este incrementat sau decrementat conform cu modul de

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

reprezint frecvena ceasului intern al sistemului, N este valoarea prescaler-

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

iar pentru o frecven de ceas de 8MHz, o valoare maxima de numrare de TOP = 2 8 i o


valoare maxim a prescaler-ului de 1024 va rezulta T 0 =32.7 ms , ceea ce e departe de 1s.
Din cauza acesta vom folosi timer-ul pentru a masura 1ms n timp ce o secund o vom ob ine
prin numrarea n program a milisecundelor. Astfel pentru a ajunge la 1ms vom folosi un N =
64 i o valoare maxim de numrare de TOP = 125. Se va folosi modul Normal de operare a
timer-ului, astfel c se va face o resetare software a numrtorului cnd acesta ajunge la 125.
Se va crea o funcie de iniializare a timer-ului iar n bucla for infinit se va implementa
programul. Pe display BCD 7-segmente se vor afia minutele (pe primele 2 poziii stnga) i
secundele (pe ultimele 2 poziii dreapta).
Funcia de iniializare:
void init_timer(){
TCCR0 = 0b00000011;
TCNT0 = 0;
}

//prescaler 64, mod normal de operare


//se iniializeaz numrtorul cu 0

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);
}

//se mplinete o milisecund


//resetare software
//mplinirea unei secunde

2. Modificai exerciiul 1 pentru a folosi Timer2 i un prescaler N = 32.


3. Implementai un cronometru cu secunde i sutimi de secunde. Se vor folosi 2 butoane :
unul pentru start/stop i unul pentru reset.

S-ar putea să vă placă și