|
Le informazioni contenute in questi appunti si riferiscono principalmente al PIC16F877A (vedi datasheet), ma possono essere applicate a molti altri modelli con periferiche uguali o quasi.
In ogni caso, una lettura del datasheet appropriato, è obbligatoria. |
Come funziona il timer2
Dopo il Timer0 ad 8 bit ed il Timer1 a 16 bit, ne troviamo un terzo ad 8 bit, il cui schema a blocchi è visibile in figura.
Le caratteristiche principali sono: 8 bit, prescaler selezionabile tra 1:1, 1:4 e 1:16, postscaler selezionabile tra 1:1 e 1:16 in passi da uno.
A differenza degli altri due timer, questo però può essere incrementato solamente dal clock principale del microcontroller, ovviamente tramite il prescaler appena citato.
Al registro di conteggio vero e proprio TMR2 è associato il registro PR2, detto "di periodo".
Durante il normale funzionamento, questi due registri vengono continuamente confrontati e si ottiene un interrupt quando i valori di questi due registri sono uguali.
Tale interrupt è comunque soggetto al postscaler: questo significa quindi che l'interrupt potrebbe anche essere volutamente ritardato rispetto al momento del confronto stesso.
Per attivare il Timer2, che altrimenti resterebbe in riposo, si devono settare correttamente i bit del registro T2CON (Timer2 CONTROL register) visibili in figura.
|
|
|
T2CKPS1:T2CKPS0 (TMR2 Prescaler)
T2CKPS1 T2CKPS0 Prescaler
0 0 1:1
0 1 1:4
1 0 1:16
1 1 1:16
|
I primi due bit T2CKPS1:T2CKPS0 consentono l'impostazione del prescaler.
|
TMR2ON (Timer2 ON)
1 = Abilita Timer2
0 = Disabilita Timer2
|
Il bit TMR2ON abilita o arresta il Timer2.
1
|
Abilita il conteggio del TMR2.
|
0
|
Disabilita il conteggio del TMR2.
|
|
T2OUTPS(3:0) (TMR2 Postscaler)
PS3 PS2 PS1 PS0 Postscaler
0 0 0 0 = 1:1
0 0 0 1 = 1:2
0 0 1 0 = 1:3
0 0 1 1 = 1:4
0 1 0 0 = 1:5
0 1 0 1 = 1:6
0 1 1 0 = 1:7
0 1 1 1 = 1:8
1 0 0 0 = 1:9
1 0 0 1 = 1:10
1 0 1 0 = 1:11
1 0 1 1 = 1:12
1 1 0 0 = 1:13
1 1 0 1 = 1:14
1 1 1 0 = 1:15
1 1 1 1 = 1:16
|
Con i bit T2OUTPS si imposta il valore di divisione del postscaler, che, come visto, passa da 1:1 a 1:16 in passi da 1.
Ciò è molto importante perché significa che possiamo dividere anche per un numero primo come 7 oppure 11 o 13.
|
Visto così, il Timer2 potrebbe far pensare ad un comune timer aggiunto al chip in ausilio dei primi due, ma vedremo poi che servirà anche più frequentemente di quanto ci si aspetti.
Esempi di codice con uso del Timer2: