Sunteți pe pagina 1din 21

TEMPORIZRI HARDWARE

134


8. TEMPORIZRI HARDWARE



Cuprins
Introducere
Obiective
8.1 TIMER 0
8.1.1 Structura intern a timerului 0
8.1.2 Configurarea timerului 0
8.2 TIMER 1
8.2.1 Structura intern a timerului 1
8.2.2 Configurarea timerului 1
8.3 TIMER 2
8.3.1 Structura intern a timerului 2
8.3.2 Configurarea timerului 2
8.4 TIMER 3
Concluzii
ntrebri de autoevaluare
Termeni eseniali











SISTEME CU MICROPROCESOARE. MICROCONTROLERUL PIC18F4455
135

Introducere
Asigurarea unor temporizri exacte este esenial n cadrul multor sisteme
de calcul bazate pe microcontrolere. Printre funciile care pot fi asociate
temporizrilor se pot aminti: msurarea unor durate, numrarea de
evenimente, eantionarea unor semnale, comanda unor echipamente
externe pentru o anumit durat de timp etc.
Subrutinele care implementeaz ntrzieri pe baza instruciunilor
reprezint una din modalitile de a realiza temporizri, dar tocmai prin
modul lor de implementare acestea ocup timpul procesorului care ar
putea fi utilizat mai eficient n alte scopuri.
Microcontrolerul PIC18F4455 pune la dispoziia utilizatorului 4 timere
(circuite de temporizare) denumite sugestiv Timer0, Timer1, Timer2 i
Timer3. n ciuda numelui sugestiv timerele pot fi utilizate ntr-o varietate
de moduri, nu doar pe post de temporizatoare. n acest capitol se vor
prezenta structura timerelor existente precum i modurile de lucru
asigurate de acestea.


Obiective
Dup parcurgerea acestui capitol cursantul va trebui:
- s neleag principiul pe funcionare al timerelor
- s poat determina valorile de iniializare ale timerelor pentru o
temporizare dorit
- s utilizeze timerele n diferite aplicaii care necesit temporizri.


8.1 TIMER 0

8.1.1 Structura intern a timerului 0

Alturi de porturile de intrare-ieire, Timerul0 este printre singurele module care s-au
mai pstrat de la prima serie de microcontrolere PIC de 8 bii produs vreodat.
Din punct de vedere structural, Timerul0 este un numrtor, a crui valoare poate fi
scris i citit, fiind stocat n doi regitri: TMR0L i TMR0HB. n funcie de configurare,
timerul dispune de dou moduri de lucru: numrtor pe 8 bii, sau pe 16 bii.
Ca la orice numrtor, incrementarea timerului se realizeaz pe baza unor impulsuri de
tact care pot proveni din dou surse distincte:
TEMPORIZRI HARDWARE
136
- surs intern. n acest caz impulsurile numrate reprezint tactul de execuie al
instruciunilor i au o frecven F
OSC
/4
- surs extern. n acest caz, timerul va numra impulsuri externe pe pinul T0CKI
(Timer 0 Clock Input).
n cazul n care se utilizeaz o surs extern de incrementare, timerul permite
selectarea frontului de incrementare, ceea ce nseamn c se pot numra fronturile cresctoare
sau descresctoare ale semnalului de intrare.
Circuitul de temporizare dispune de un predivizor programabil (en. presacler) care
realizeaz divizarea tactului de incrementare i care este util atunci cnd se dorete ca timerul
s nu se incrementeze la fiecare tact, ci doar la fiecare 2, 4, 16, ... sau 256, tacturi
recepionate. Situaia aceasta apare frecvent n cazul implementrii unor temporizri cu durat
mai mare.
Timerul0 va genera o ntrerupere la depirea capacitii de numrare, atunci cnd
valoarea numrtorului trece de la FFh la 00h, n mod de lucru de 8 bii, sau de la FFFFh la
0000h n mod de lucru de 16 bii. Acest depire va fi semnalat prin setarea unui bit
indicator de ntrerupere, denumit TMR0IF, din registrul INTCON. Pentru a putea detecta o
nou depire flag-ul de semnalizare TMR0IF trebuie ters din program.

Mod de lucru 8 bii

Schema bloc a timerului0 n mod de lucru de 8 bii se prezint n Fig. 8.1.

Fig. 8.1. Schema bloc a timerului 0 n mod de lucru de 8 bii conform foii de catalog [15]

Analiznd schema din Fig. 8.1 putem constata c elementul principal al timerului0
este circuitul de numrare de 8 bii a crui valoare poate fi accesat prin intermediul
registrului TMR0L. Tactul de incrementare al acestui numrtor poate proveni dintr-o surs
extern, prin intermediul pinului T0CKI sau poate fi tactul intern de execuie al
instruciunilor F
OSC
/4. Bitul T0CS (Timer0 Clock Select) din registrul T0CON[5] este
utilizat pentru a selecta ntre sursa intern sau extern a tactului. n cazul sursei de
SISTEME CU MICROPROCESOARE. MICROCONTROLERUL PIC18F4455
137
incrementare externe se poate opta, prin intermediul bitului T0SE (Timer0 Select Edge) din
registrul T0CON[4], pentru numrarea fronturilor cresctoare sau descresctoare ale
semnalului de pe pinul T0CKI.
Indiferent de sursa tactului, poate fi selectat utilizarea predivizorului, prin punerea
bitului PSA (Prescaler Assign) pe 0. n aceast situaie, timerul se va incrementa la fiecare n
impulsuri primite, selectarea valorii predivizorului fiind realizat prin biii T0PS2:T0PS0.
Pentru a nu folosi predivizorul, bitul PSA trebuie pus pe 1.
Deoarece, n cazul utilizrii impulsurilor externe, evenimentele numrate pot s-i fac
apariia pe pinul T0CKI n mod aleator n raport cu tactul intern, este necesar realizarea unei
sincronizri ntre cele dou semnale pentru a asigura corectitudinea ciclurilor de scriere sau
citire ale Timerului0.
Dup configurarea timerului, acesta se pornete prin setarea bitului TMR0ON din registrul
T0CON[7]. Timerul semnaleaz utilizatorului trecerea de la valoarea maxim la valoarea
minim (Overflow) prin setarea flagului TMR0IF din registrul INTCON[2]. n acelai timp
Timerul 0 poate genera o ntrerupere dac a fost n prealabil validat linia corespunztoare de
ntrerupere. Astfel, utilizatorul nu mai este nevoit s verifice tot timpul flag-ul timerului
pentru a determina momentul n care temporizarea stabilit a expirat.

Mod de lucru 16 bii

Alegerea ntre utilizarea timerului 0 n mod de lucru de 8 bii sau n mod de lucru de 16
bii se realizeaz prin intermediul bitului T08BIT din registrul T0CON[6]. Dac acest bit
este 1, timerul va funciona pe 8 bii. n caz contrar, timerul funcioneaz pe 16 bii. Pentru a
pstra compatibilitatea cu modele anterioare de microcontrolere PIC, la resetare timerul 0 este
configurat implicit n mod de lucru de 8 bii.
Indiferent de modul de lucru ales, principiul de funcionare al timerului se pstreaz:
timerul se incrementeaz la fiecare impuls primit. Se modific doar modul de acces la
valoarea numrtorului.
n cazul funcionrii pe 8 bii, accesul la valoarea timerului se realizeaz direct prin
intermediul registrului TMR0L. Accesarea valorii timerului se modific puin n cazul
funcionrii pe 16 bii, deoarece toate instruciunile microcontrolerului permit accesul la date
cu dimensiunea de 8 bii. n aceste condiii, fr existena unor structuri ajuttoare, nu este
posibil realizarea accesului atomic la valoarea de 16 bii a numrtorului. Accesul atomic
permite citirea sau scrierea valorii instantanee a timerului. De exemplu, n lipsa acestuia
TEMPORIZRI HARDWARE
138
pentru a citi ntreaga valoare de 16 bii a timerului sunt necesare dou operaii succesive de
citire (se citete octetul inferior apoi cel superior) ntre care valorile se pot modifica.
n Fig. 8.2 se prezint structura numrtorului care intr n componena timerului 0 n
mod de lucru de 16 bii care permite accesul atomic la valoarea timerului.


Fig. 8.2. Accesul la regitrii timerului 0 n mod de lucru de 16 bii

Citirea i scrierea timerului pe 16 bii este facilitat de un registru tampon pentru
stocarea octetului superior TMR0H. Octetul superior al numrtorului (TMR0HB) este ascuns,
fiind inaccesibil n mod direct prin instruciuni de scriere sau citire. La citirea TMR0L,
valoarea octetului superior este transferat n registrul tampon TMR0H. Acesta poate fi scris
sau citit cu ajutorul instruciunilor uzuale. La scrierea registrului TMR0L, valoarea stocat n
TMR0H se va transfera n octetul superior al timerului. Prin aceast arhitectur, timerul
permite un acces atomic la valoarea numrtorului pe 16 bii prin intermediul unei magistrale
de 8 bii.
Totui, trebuie avut grij ca operaiile de scriere/citire ale valorii timerului s respecte
ordinea menionat:
- la citire: se citete TMR0L apoi TMR0H;
- la scriere: se scrie TMR0H apoi TMR0L.

8.1.2 Configurarea timerului 0

Simplitatea utilizrii timerului 0 este dat de faptul c toi biii de configurare se
gsesc ntr-un singur registru: T0CON. Structura acestui registru este prezentat n Fig. 8.3 i
este urmat de descrierea biilor.


SISTEME CU MICROPROCESOARE. MICROCONTROLERUL PIC18F4455
139

7 0
TMR0ON T08BIT T0CS T0SE PSA T0PS2 T0PS1 T0PS0
Fig. 8.3. Registrul T0CON: Timer0 Control Register

Bit 7 TMR0ON Bit de Pornire / Oprire Timer0
1 = Pornire Timer0
0 = Oprire Timer0
Bit 6 T08BIT Bit selecie numrtor pe 8 / 16 bii
1 = Timer0 este configurat ca numrtor pe 8 bii
0 = Timer0 este configurat ca numrtor pe 16 bii
Bit 5 T0CS Bit selecie surs tact de incrementare
1 = impulsuri externe (tranziii pe pinul T0CKI)
0 = impulsuri interne (tactul de execuie al instruciunilor F
OSC
/4)
Bit 4 T0SE Bit selecie front de numrare pentru impulsurile externe
1 = front descresctor pe pinul T0CKI
0 = front cresctor pe pinul T0CKI
Bit 3 PSA Bit Utilizare / Dezactivare predivizor
1 = Dezactivare predivizor
0 = Utilizare predivizor
Biii 2-0 T0PS2:T0PS0 Bii de selecie a valorii de predivizare
111 = Raport de predivizare 1:256
110 = Raport de predivizare 1:128
101 = Raport de predivizare 1:64
100 = Raport de predivizare 1:32
011 = Raport de predivizare 1:16
010 = Raport de predivizare 1:8
001 = Raport de predivizare 1:4
000 = Raport de predivizare 1:2

nainte de a realiza configurarea efectiv a Timerului0, n vederea realizrii unei
temporizri, trebuie determinat valoarea de iniializare a numrtorului corespunztoare
temporizrii dorite.
Astfel, dac se dorete o temporizare bazat pe tactul de execuie al instruciunilor se
poate utiliza urmtoarea formul:
TEMPORIZRI HARDWARE
140
OSC
C dorita
F
edivizor NrIncr T Predivizor NrIncr T
4
Pr = =
(8.1)
unde:
-
dorita
T este durata temporizrii dorite
- NrIncr este numrul total de impulsuri care trebuie numrate pentru obinerea
temporizrii dorite
- Predivizor este valoarea predivizorului (se vor considera valorile predefinite posibile
Predivizor { } 256 , 128 , 64 , 32 , 16 , 8 , 4 , 2 , 1 )
-
OSC
C
F
T
4
= este tactul de execuie al instruciunilor. Pentru MHz F
OSC
20 = s T
C
= 2 . 0

Pentru exemplificare se va considera determinarea valorii de iniializare a
numrtorului necesar obinerii unei temporizri de o secund. Se va considera cazul unui
microcontroler care dispune de un oscilator extern cu MHz F
OSC
20 = .
Conform relaiei (8.1), pentru un raport de predivizare de 1:256, obinem
1
:
s NrIncr s
6
10 2 . 0 256 1

=
(8.2)
19531 25 . 19531 = NrIncr (8.3)
Din relaiile de mai sus rezult c pentru obinerea unei temporizri de o secund,
Timerul0 va trebui s numere 19531 impulsuri cu perioada s T
i
= 2 . 0 , va utiliza un raport de
predivizare de 1:256 i va fi configurat ca numrtor pe 16 bii.
Pentru a putea fi semnalat expirarea temporizrii prin intermediul flag-ului TMR0IF,
numrtorul va trebui iniializat cu valoarea 65535-19531=46004. Astfel, avnd n vedere
faptul c numrtorul numr n sus, n momentul depirii capacitii de numrare s-au
numrat impulsurile necesare pentru obinerea temporizrii dorite, care va fi semnalat prin
setarea bitului TMR0IF.
Cei doi regitri TMR0H:TMR0L vor trebui iniializai cu valorile:
(46004)
10
= B3B4h
B3h TMR0H
B4h TMR0L
(8.4)

n general, problema iniializrii timerului se rezum la determinarea perechii: valoare
de iniializare - raport de predivizare pe baza relaiei (8.1).


1
Dac se consider un raport de predivizare de 1:128, rezult NrIncr = 39062
SISTEME CU MICROPROCESOARE. MICROCONTROLERUL PIC18F4455
141
Odat determinat valoarea de iniializare a Timerului0 se poate trece la etapa de
configurare, care presupune parcurgerea urmtorior pai:
oprirea timerului (bitul TMR0ON=0, registrul T0CON[7]) ;
selectarea sursei de incrementare (bitul T0CS, registrul T0CON[5]):
n cazul unei surse externe de incrementare se va selecta frontul utilizat (bitul T0SE,
registrul T0CON[4])
selectarea utilizrii predivizorului (bitul PSA, registrul T0CON[3])
n cazul utilizrii predivizorului (PSA=0) se va selecta raportul de predivizare dorit
(biii TOPS2:TOPS0, registrul T0CON[2:0])
selectarea modului de funcionare (bitul T08BIT, registrul T0CON[6]);
tergerea flag-ului de semnalizare (bitul TMR0IF, registrul INTCON[2]);
iniializarea valorii timerului (regitrii TMR0H i TMR0L)
pornirea timerului (bitul TMR0ON, registrul T0CON[7]).[8]

Pentru exemplificare se va considera cazul analizat anterior, care conduce la obinerea
unei temporizri cu durata de o secund.

CONFIGURARE_TIMER0:
BCF T0CON, TMR0ON ;Oprirea timerului
BCF T0CON, T0CS ;tact intern
BCF T0CON, PSA ;utilizare predivizor
BSF T0CON, T0PS2 ;predivizare 1:256
BSF T0CON, T0PS1
BSF T0CON, T0PS0
BCF T0CON, T08BIT ;numrtor 16bii
MOVLW 0xB3 ;valoare Timer0 46004
MOVWF TMR0H
MOVLW 0xB4
MOVWF TMR0L
BCF INTCON, TMR0IF ;Stergerea flag-ului
BSF T0CON, TMR0ON ;Pornirea timerului

BUCLA_TESTARE:
BTFSS INTCON, TMR0IF
GOTO LOOP_TESTARE
;Cnd se ajunge n acest punct, temporizarea s-a terminat

Bineneles, configurarea timerului se poate realiza i ntr-un singur pas, prin
specificarea valorii octetului care va trebui nscris n registrul T0CON. Astfel, codul de mai
sus devine:

TEMPORIZRI HARDWARE
142
CONFIGURARE_TIMER0:
MOVLW b00000111 ;initializare T0CON
MOVWF T0CON
MOVLW 0xB3 ;valoare Timer0 46004
MOVWF TMR0H
MOVLW 0xB4
MOVWF TMR0L
BCF INTCON, TMR0IF ;Stergerea flag-ului
BSF T0CON, TMR0ON ;Pornirea timerului

BUCLA_TESTARE:
BTFSS INTCON, TMR0IF
GOTO LOOP_TESTARE
;Cnd se ajunge n acest punct, temporizarea s-a terminat



8.2 TIMER 1

8.2.1 Structura intern a timerului 1

Timerul 1 (Fig. 8.4) este construit n jurul unui numrtor de 16 bii implementat sub
forma unei perechi de regitri de 8 bii (TMR1HB:TMR1L), din care registrul superior
(TMR1HB) este ascuns. La fel ca i n cazul timerului 0 accesul la octetul superior al timerului
1 se realizeaz prin intermediul registrului tampon TMR1H. Citirea registrului TMR1L va
determina transferul coninutului registrului TMR1HB n registrul TMR1H. Totodat, o scriere
a registrului TMR1L va rezulta n actualizarea TMR1HB cu valoarea din TMR1H.


Fig. 8.4. Schema bloc a timerului 1 conform foii de catalog [15]

Spre deosebire ns de timerul0, accesarea atomic a regitrilor TMR1HB:TMR1L
poate fi dezactivat cu ajutorul bitului RD16 din registrul T0CON[7], iar cei doi regitri pot
fi accesai prin dou operaii succesive. Acest mod de acces este compatibil cu versiunile
SISTEME CU MICROPROCESOARE. MICROCONTROLERUL PIC18F4455
143
anterioare ale acestui modul disponibile pe microcontrolerele din familia PIC16 i trebuie
utilizat cu preacauie. De exemplu, Microchip recomand ca timerul s fie oprit atunci cnd se
acceseaz cei doi regitri.
La depirea capacitii de numrare (la trecerea de la valoarea FFFFh la 0000h) se va
seta bitul indicator TMR1IF din registrul PIR[0].

Similar timerului 0, i acest timer pune la dispoziia utilizatorului posibilitatea
realizrii unor temporizri sau posibilitatea numrrii impulsurilor (externe sau interne).
Incrementarea timerului poate avea trei surse, care pot fi alese prin intermediul biilor
TMR1CS i T1OSCEN din registrul T1CON[3,1]:
- surs intern. n acest caz impulsurile numrate reprezint tactul de execuie al
instruciunilor i au o frecven F
OSC
/4.
- surs extern-utilizator. n acest caz timerul va numra impulsuri externe (fronturi
cresctoare) pe pinul T13CKI (Timer 1/3 Clock Input).
- surs extern-oscilator. n acest caz, timerul va fi incrementat de impulsurile
provenite de la un oscilator suplimentar extern asociat timerului 1. Frecvena
acestui oscilator poate fi de maximum 200kHz. n general se utilizeaz un cristal
cu frecvena de 32.768kHz. Prin utilizarea unui asemenea oscilator pot fi
implementate aplicaii de temporizare de tip ceas, n care nu apar erori de ordinul
microsecundelor din divizarea tactului de incrementare. Aceste erori sunt frecvente
la implementarea ceasurilor prin utilizarea oscilatorului sistem, ce lucreaz la nivel
de MHz. Schema de conectare a ocilatorului extern asociat timerului 1 se prezint
n Fig. 8.5. Condensatorii au rolul de stabilizare a semnalului rezultat, valorile
recomandate de productor fiind de 27 i 33 pF.


Fig. 8.5. Conectarea oscilatorului extern conform foii de catalog [15]

Indiferent de sursa impulsurilor numrate, timerul se poate incrementa direct sau la
fiecare al doilea, al patrulea sau al optulea tact, n funcie de starea biilor T1CKPS1 i
T1CKPS0 din registrul T0CON[5:4].
TEMPORIZRI HARDWARE
144
Ieirea predivizorului este sincronizat implicit cu tactul sistem, dar sincronizarea
poate fi dezactivat dac bitul T1SYNC=1. Bitul de sincronizare este luat n considerare doar
n cazul utilizrii unui tact extern (TMRCS=1).

O funcionalitate ascuns de schema bloc este aceea c timerul 1, prin intermediul
oscilatorului su conectat ntre pinii T1OSI i T1OSO, poate asigura tactul intern n cazul
modurilor de lucru cu consum redus. Astfel, microcontrolerul ofer posibilitatea asigurrii
tactului sistem nu numai prin oscilatorul principal (extern) ci i prin intermediul oscilatorului
Timerului 1. De fiecare dat cnd oscilatorul timerului 1 reprezint sursa pentru tactul sistem,
bitul de stare T1RUN din registrul T1CON[6] este setat.
O alt utilizare a timerului 1 vizeaz asocierea sa cu modulele de captur / comparare /
PWM, caz n care evenimentele provenite de la aceste module pot reseta starea regitrilor
interni ai timerului.

8.2.2 Configurarea timerului 1

Configurarea timerului 1 se reduce la modificarea biilor din registrul T1CON.
Structura acestui registru este prezentat n Fig. 8.6 i este urmat de descrierea biilor.

7 0
RD16 T1RUN T1CKPS1 T1CKPS0 T1OSCEN
T1SYNC
TMR1CS TMR1ON
Fig. 8.6. Registrul T1CON: Timer0 Control Register

Bit 7 RD16 selectarea modului de acces la regitrii timerului
1 = acces atomic
0 = acces succesiv prin dou operaii de 8 bii
Bit 6 T1RUN Bit de stare. Indic dac tactul sistem este obinut pe baza
oscilatorului timerului 1
1 = tactul sistem este obinut pe baza oscilatorului timerului 1
0 = tactul sistem este obinut din alt surs
Biii 5-4 T1CKPS1:T1CKPS0 Bii de selecie a valorii de predivizare
11 = Raport de predivizare 1:8
10 = Raport de predivizare 1:4
01 = Raport de predivizare 1:2
00 = Raport de predivizare 1:1
SISTEME CU MICROPROCESOARE. MICROCONTROLERUL PIC18F4455
145
Bit 3 T10SCEN Activarea/dezactivarea oscilatorului extern
1 = oscilatorul timerului 1 este activat
0 = oscilatorul timerului 1 este oprit
Bit 2
T1SYNC Activarea/dezactivarea sincronizrii impulsurilor externe cu tactul
intern
Dac TMR1CS = 1
1 = Fr sincronizare
0 = Sincronizare
Dac TMR1CS = 0
Bitul este ignorat. Timer1 utilizeaz impulsuri interne pentru incrementare.
Bit 1 TMR1CS Bit selecie surs tact de incrementare
1 = impulsuri externe (front cresctor pe pinul RC0/T1OSO/T13CKI)
0 = impulsuri interne (tactul de execuie al instruciunilor F
OSC
/4)
Bit 0 TMR1ON Bit de Pornire / Oprire Timer0
1 = Pornire Timer1
0 = Oprire Timer1

n vederea realizrii unei temporizri cu o valoare dorit se poate utiliza relaia (8.5)
pentru a determina valoarea de iniializare a numrtorului.
C dorita
T Predivizor NrIncr T =
(8.5)
unde:
-
dorita
T este durata temporizrii dorite
- NrIncr este numrul total de impulsuri care trebuie numrate pentru obinerea
temporizrii dorite
- Predivizor este valoarea predivizorului (se vor considera valorile predefinite posibile
Predivizor { } 8 , 4 , 2 , 1 )
- T
C
este perioada impulsurilor numrate. n cazul utilizrii tactul de execuie al
instruciunilor ca surs de incrementare T
C
=4/F
OSC
. Dac se utilizeaz o surs extern,
Timer1 se incrementeaz la fiecare front cresctor al semnalului de tact extern. Dac
acest semnal este periodic atunci, n relaia (8.5) se poate considera T
C
=1/F
OSCext
.




TEMPORIZRI HARDWARE
146
Odat determinat valoarea de iniializare a Timerului1 se poate trece la etapa de
configurare, care presupune parcurgerea urmtorior pai:
oprirea timerului (bitul TMR1ON=0, registrul T1CON[0]) ;
selectarea sursei de incrementare (bitul TMR1CS, registrul T1CON[1]);
n cazul unei surse externe se alege tipul acesteia (bitul T1OSCEN, registrul
T1CON[3]) i sincronizarea (bitul T1SYNC, registrul T0CON[2]);
selecta raportul de predivizare dorit (biii T1CKPS1:T1CKPS0, registrul
T1CON[5:4]);
selectarea modului de acces la regitrii timerului (bitul RD16, registrul T1CON[7]);
opional configurarea modulelor CCP
tergerea flag-ului de semnalizare (bitul TMR1IF, registrul PIR1[0]);
iniializarea valorii timerului (regitrii TMR1H i TMR1L);
pornirea timerului (bitul TMR1ON, registrul T1CON[0]).[8]

Pentru exemplificarea utilizrii timerului 1 i a etapei sale de configurare se va
considera exemplul urmtor.


Exemplu
S considerm urmtoarea aplicaie, n care se dorete interogarea unui senzor
la fiecare 10 minute i transmiterea datelor citite la distan. Avnd n vedere
intervalul mare de timp cuprins ntre dou citiri succesive ale senzorului se
poate implementa o aplicaie cu consum redus de energie care va apela la
punerea procesorului n mod SLEEP.
Pentru obinerea temporizrii dorite se va utiliza timerul 1 avnd ca surs de
incrementare impulsurile provenite de la un oscilator extern de 32.768kHz
care va furniza baza de timp. Conform relaiei (8.5), utiliznd un raport de
predivizare de 1:4 prin incrementarea numrtorului de la 0 la valoarea
maxim pe 16 bii (65535) se obine o temporizare de 8 secunde. Astfel,
600/8 = 75 de intervale successive de 8 secunde vor asigura temporizarea
dorit de 10 minute.
Pentru a reduce consumul de energie al acestei aplicaii, procesorul este pus n
mod SLEEP, fiind trezit la fiecare 8 secunde. Pentru a intra n acest mod de
lucru se utilizeaz instruciunea SLEEP. n mod SLEEP, oscilatorul principal
al microcontrolerului este oprit. Ieirea din acest mod de funcionare este
condiionat de apariia unei ntreruperi. n aceste condiii, trebuie activat
SISTEME CU MICROPROCESOARE. MICROCONTROLERUL PIC18F4455
147
ntreruperea timerului 1 prin setarea bitului TMR1IE din registrul PIE[1].
De asemenea, trebuie activate ntreruperile provenite de la periferice prin
setarea bitului PEIE al registrului INTCON[6]. (vezi Capitolul 9)
Astfel, la fiecare 8 secunde procesorul va iei din modul SLEEP, se va terge
bitul indicator de ntrerupere TMR1IF, apoi se va incrementa un contor pn
va ajunge la valoarea 75, care marcheaz scurgerea intervalului timp de 10
minute. n acest moment se vor citi datele de la senzor i se vor transmite mai
departe cu ajutorul unei subrutine, al crei cod nu are importan pentru acest
aplicaie. La revenirea din subrutin, procesorul intr din nou n modul
SLEEP i ciclul de 10 minute se reia.

#include "p18f4455.inc"

CONTOR EQU 0x20

MAIN
movlw b10101111 ;configurare timer1
movwf T1CON ;oscilator ext., PS 1:4
bsf INTCON,PEIE ;ntreruperi periferice
bsf PIE1,TMR1IE ;ntrerupere timer1

clrf CONTOR ;terg contor
clrf TMR1H ;terg timer
clrf TMR1L

STAND_BY
sleep ;UCP n mod SLEEP
bcf PIR1,TMR1IF ;terg flag ntrerupere
incf CONTOR,f ;incrementez contor
movlw d75 ;contor=75 ? (10 min.)
cpfseq CONTOR ; da: citete senzor
bra STAND_BY ; nu: SLEEP

clrf CONTOR ;terg contor
call Senzor ;citesc senzor
bra STAND_BY ;SLEEP







TEMPORIZRI HARDWARE
148
8.3 TIMER 2

8.3.1 Structura intern a timerului 2

Timerul 2 (Fig. 8.7) are la baz un numrtor de 8 bii care dispune de un predivizor i
un postdivizor programabil. Timerul va numra ntotdeauna impulsurile de tact interne
(F
OSC
/4). Spre deosebire de celelalte timere, timerul 2 ofer posibilitatea generrii unei
ntreruperi la atingerea unei valori prestabilite, nu la depirea capacitii de numrare cum se
ntmpla n cazul timerului 0, 1 i 3. Astfel, n structura timerului 2 exist un bloc comparator
care compar permanent valoarea curent a numrtorului (TMR2) cu valoarea stocat n
registrului PR2 (Period Register). La egalitatea celor dou valori se genereaz un impuls care
va reseta timerul n ciclul instruciune urmtor. n funcie de postdivizor, dup ce s-au realizat
n comparri reuite ( 16 , 1 = n ), se va seta bitul indicator de ntrerupere TMR2IF din registrul
PIR1[1]. Dac ntreruperea timerului a fost activat (bitul TMR2IE=1) atunci n aceste
condiii se va genera o ntrerupere.

Fig. 8.7. Schema bloc a timerului 2 conform foii de catalog [15]

Din schema bloc a timerului prezentat n Fig. 8.7 se poate observa c regitrii TMR2
i PR2 sunt accesibili direct prin operaii uzuale. Tactul de incrementare al registrului TMR2
este divizat prin intermediul predivizorului, a crui valoare poate fi programat prin biii
T2CKPS1 i T2CKPS0 din registrul T2CON[1:0]. Registrul PR2 este ncrcat cu o valoare
ce se compar cu valoarea registrului TMR2. Pentru stabilirea valorii postdivizorului se
utilizeaz biii T2OUTPS3:T2OUTPS0 ai registrului T2CON[6:3]. Atingerea celor n
comparri reuite poate fi interogat prin bitul TMR2IF al registrului PIR1[1].
Utilizarea timerului 2 nu se rezum doar la realizarea temporzrilor. Capacitatea sa de
a semnala o egalitate ntre dou valori prin intermediul comparatorului implementat este o
caracteristic utilizat de modulele de comunicaie serial sincron sau de modulul PWM.
SISTEME CU MICROPROCESOARE. MICROCONTROLERUL PIC18F4455
149
8.3.2 Configurarea timerului 2

Paii de configurare pentru utilizarea timerului 2 se bazeaz pe coninutul registrului
de configurare T2CON. Structura acestui registru este prezentat n Fig. 8.8 i este urmat de
descrierea biilor.

7 0
- T2OUTPS3 T2OUTPS2 T2OUTPS1 T2OUTPS0 TMR2ON T2CKPS1 T2CKPS0
Fig. 8.8. Registrul T2CON: Timer2 Control Register


Bit 7 Neutilizat
Biii 6-3 T2OUTPS3:T2OUTPS0 Bii de selecie a valorii de postdivizare
1111 = Raport de postdivizare 1:16
1110 = Raport de postdivizare 1:15
...
0001 = Raport de postdivizare 1:2
0000 = Raport de postdivizare 1:1
Bit 2 TMR2ON Bit de Pornire / Oprire Timer2
1 = Pornire Timer2
0 = Oprire Timer2
Biii 1-0 T2CKPS1:T2CKPS0 Bii de selecie a valorii de predivizare
1x = Predivizor 16
01 = Predivizor 4
00 = Predivizor 1

Durata temporizrii realizate cu timerul 2 se poate determina pe baza relaiei:
( )
OSC
dorita
F
r Postdivizo PR Predivizor T
4
1 2 + =
(8.6)
unde:
-
dorita
T este durata temporizrii dorite
- Predivizor este valoarea predivizorului (se vor considera valorile predefinite posibile
Predivizor { } 16 , 4 , 1 )
- PR2 este valoarea de 8 bii nscris n registrul PR2 utilizat pentru realizarea
comparaiei
TEMPORIZRI HARDWARE
150
- Postdivizor este valoarea postdivizorului (se vor considera valorile predefinite posibile
Postdivizor { } 16 ,..., 3 , 2 , 1 )
- 4/F
OSC
este perioada impulsurilor numrate. Tactul de execuie al instruciunilor.

Etapa de configurare, a Timerului 2 presupune parcurgerea urmtorior pai:
oprirea timerului (bitul TMR2ON=0, registrul T2CON[2]) ;
selectare predivizor (biii T2CKPS1:T2CKPS0, registrul T2CON[1:0]);
selectare postdivizor (biii T2OUTPS3:T2OUTPS0, registrul T2CON[6:3]);
ncrcare registru PR2
opional configurarea modulelor CCP
tergerea flag-ului de semnalizare (bitul TMR2IF, registrul PIR1[1]);
pornirea timerului (bitul TMR2ON, registrul T2CON[2]).[8]

Utilizarea timerului 2 pentru realizarea unei temporizri este exemplificat n continuare.


Exemplu
S considerm o implementare a unui ceas. Pentru aceast aplicaie este
necesar o nterupere care s apar de 100 de ori n fiecare secund. Aceast
temporizare de 1ms se va folosi ca baz de timp n aplicaie. Presupunnd c
microcontrolerul este dotat cu un oscilator cu F
OSC
=20MHz, prin alegerea
unui raport de predivizare de 1:4, a valorii din registrul PR2 = 249 i a
raportului de postdivizare de 1:5 se obine temporizarea dorit de
1ms=0.2s4(249+1)5.
Codul urmtor cuprinde iniializarea Timerului 2 pentru realizarea unei
temporizri cu durata de 1ms.

movlw b00100101 ;prediv. 1:4, postdiv. 1:5
movwf T2CON ;timer 2 pornit
movlw d249
movwf PR2







SISTEME CU MICROPROCESOARE. MICROCONTROLERUL PIC18F4455
151
8.4 TIMER 3

Timerul 3 este o clon a timerului 1 n care T3 nlocuiete T1 n denumirea biilor din
regitrii SFR corespunztori i n denumirea bitului indicator de ntrerupere.


Fig. 8.9. Schema bloc a timerului 3 conform foii de catalog [15]

Exist totui cteva diferene n structura registrului de control a timerului 3 (T3CON),
care sunt marcate n Fig. 8.10 i n descrierea biilor care o urmeaz. Aceste diferene (biii
T3CCP2 i T3CCP1), nu influeneaz funcionarea timerului n implementarea
temporizrilor, ele fiind necesare atunci cnd timerul se utilizeaz n asociere cu modulele
CCP (pentru detalii suplimentare vezi capitolul dedicat modulelor CCP).

7 0
RD16 T3CCP2 T3CKPS1 T3CKPS0 T3CCP1
T3SYNC
TMR3CS TMR3ON
Fig. 8.10. Registrul T3CON: Timer3 Control Register


Bit 7 RD16 selectarea modului de acces la regitrii timerului
1 = acces atomic
0 = acces succesiv prin dou operaii de 8 bii
Bit 6 i 3 T3CCP2:T3CCP1 pentru utilizarea cu modulele CCPx
1x = Timer3 utilizat ca baz de timp pentru CCP1 i CCP2
01 = Timer1 utilizat ca baz de timp pentru CCP1, Timer3 pentru CCP2
00 = Time1 utilizat ca baz de timp pentru CCP1 i CCP2






TEMPORIZRI HARDWARE
152
Biii 5-4 T3CKPS1:T3CKPS0 Bii de selecie a valorii de predivizare
11 = Raport de predivizare 1:8
10 = Raport de predivizare 1:4
01 = Raport de predivizare 1:2
00 = Raport de predivizare 1:1
Bit 2
T3SYNC Activarea/dezactivarea sincronizrii impulsurilor externe cu tactul
intern
Dac TMR3CS = 1
1 = Fr sincronizare
0 = Sincronizare
Dac TMR3CS = 0
Bitul este ignorat. Timer1 utilizeaz impulsuri interne pentru incrementare.
Bit 1 TMR3CS Bit selecie surs tact de incrementare
1 = impulsuri externe (front cresctor pe pinul RC0/T1OSO/T13CKI)
0 = impulsuri interne (tactul de execuie al instruciunilor F
OSC
/4)
Bit 0 TMR3ON Bit de Pornire / Oprire Timer3
1 = Pornire Timer3
0 = Oprire Timer3

Cnd timerul 3 este configurat s utilizeze o surs extern pentru impulsurile
numrate, aceasta provine de pe pinul T13CKI, utilzat n comun i de timerul 1.
Dac oscilatorul timerului 1 este activat (bitul T1OSCEN=1 din registrul
T1CON[3]) atunci acesta va furniza impulsurile externe i pentru timerul 3, dac acesta din
urm este configurat pentru a numra impulsuri externe. Acest lucru nu este condiionat de
utilizarea timerului 1 pentru numrarea impulsurilor externe.








SISTEME CU MICROPROCESOARE. MICROCONTROLERUL PIC18F4455
153

Concluzii
Dei microcontrolerul este dotat cu mai multe timere, n general, acestea se
utilizeaz pentru sarcini diferite dup cum urmeaz:
- Timer 0 aplicaii periodice, temporizri, eantionri
- Timer 1,3 aplicaii cu consum redus de energie, aplicaii care
utilizeaz circuitele de comparare i captur
- Timer 2 generarea semnalelor PWM i n realizarea comunicaiilor
seriale sincrone.
n cazul aplicaiilor care necesit mai multe temporizri se recomand
utilizarea unei singure baze de timp pentru acestea.
Este foarte important nelegerea modului de utilizare i a rolului pe care l are
bitul indicator de ntrerupere (TMRxIF) care semnalizeaz expirarea
temporizrilor realizate cu ajutorul timerelor:
- acest bit se seteaz n mod automat la depirea capacitii de numrare
a timerelor (excepie, n cazul timerului 2 bitul se seteaz la egalitatea
valorilor din TMR2 i PR2)
- bitul poate fi interogat pentru a identifica momentul n care a expirat
temporizarea dorit
- bitul poate genera o ntrerupere care s aib o rutin de deservire
- bitul trebuie ters manual din program n urma fiecrei ntreruperi,
pentru a putea prinde urmtorul eveniment (a urmtoarei temporizri).
Dac bitul rmne setat dupa prima ntrerupere, nu avem de unde ti
cnd se produce urmtoarea ntrerupere (Fig. 8.11).


Fig. 8.11. Efectul incrementrii asupra bitului TMR0IF

n concluzie, timerele sunt circuite de temporizare implementate hardware n
structura microcontrolerului. Cu ajutorul lor pot fi implementate funcii de
temporizare, numrare sau funcii mai complexe prin asocierea lor cu alte
module ale microcontrolerului. Indiferent de funciile implementate timerele
reprezint o component esenial n structura oricrui sistem de calcul bazat
pe micrcontrolere.
TEMPORIZRI HARDWARE
154
1. Ce deosebiri exist ntre temporizrile software i cele hardware?
2. Discutai principiul de funcionare al Timerului 0.
3. Ce nelegei prin accesul atomic la regitrii timerului?
4. Care este durata maxim a temporizrii realizate cu ajutorului
timerului 0, n cazul utilizrii F
OSC
= 48MHz? Cum s-ar implementa
o ntrziere cu durata de 1min n cazul acesta?
5. Ce rol are predivizorul la timere?
6. Ce rol ndeplinete bitul TMRxIF?
7. Cum se calculeaz i care este valorea de iniializare a
TMR0H:TMR0L pentru implementarea unei temporizri cu durata
de 100ms n cazul utilizrii F
OSC
= 48MHz?
8. Care este codul utilizat pentru iniializarea timerului 2 n vederea
realizrii unei temporizri cu durata de 10ms n cazul F
OSC
=
4MHz?

ntrebri de
autoevaluare
9 Care sunt etapele necesare pentru iniializarea timerului 0?
10 Ce se ntmpl la apelul instruciunii SLEEP?



Termeni
eseniali
Flag
Bit indicator
ntrerupere
Mecanism prin care un periferic poate semnaliza procesorului despre
schimbarea strii sale
Predivizor
Circuit n structura timerelor care permite incrementarea la fiecare n
fronturi ale semnalului de tact
Postdivizor
Circuit n structura timerului 2 care permite activare bitului indicator de
ntrerupere la fiecare n comparaii reuite ntre PR2 i TMR2.
PWM
Pulse Width Modulation. Modulare n laime a impulsurilor
Tact de incrementare
Semnal pe a crui front se incrementeaz valoarea unui numrtor
Timer
Circuit de temporizare

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