Il TIMER1 nei PIC
Timer1 è una periferica presente dai Mid-Range in su. Si
tratta di una contatore a 16 bit con struttura analoga e compatibile tra le
varie famiglie.
Vediamo qualche dettaglio.
TIMER1 nei PIC Mid-range
Nella maggioranza dei Mid-range il Timer1 ha questo diagramma a blocchi
tipico:
Le caratteristiche di questo timer sono le seguenti:
- contatore a 16 bit: come solito per Microchip, si tratta di un contatore "a
crescere", cioè che conta in salita da 0000 a FFFFh (65535 decimale),
incrementando di 1 ad ogni impulso del clock e che va in overflow al 65536esimo
impulso.
- clock interno o esterno: è possibile contare impulsi derivati
dall' oscillatore interno o da una sorgente esterna collegata ad un pin.
- prescaler 1/2/4/8: il prescaler dedicato divide per il
fattore indicato il segnale di ingresso.
- funzione di oscillatore low power : è possibile collegare
componenti esterni per realizzare un oscillatore quarzato che genera il
clock di ingresso al timer
- sorgente di interrupt periferico: in generale, il TIMER1 è
fonte di interrupt periferico, abilitabile da programma.
switch on/off : il timer può essere acceso o, se non utilizzato, spento per minimizzare il
consumo di energia.
dove è disponibile un modulo CCP,
TIMER1 dispone di un reset interno attivato dall' uscita del modulo
L' uso di Timer1 dipende da 4 registri:
- 2 registro di conteggio TMR1H e TMR1L ciascuno a 8 bit
- 1 registro di controllo T1CON
Se viene utilizzato in interrupt, occorre considerare che si tratta di una
sorgente di interrupt periferico.
Alla gestione sono interessati i registri PIE1
per l' abilitazione e PIR1 per il
flag di overflow.
Inoltre va attivato sia GIE che PEIE
.
La sequenza di interrupt all' overflow è questa:
- viene settato un flag di interrupt TMR1IF (PIR1<0>)
.
Questo flag resta settato fino a che non è cancellato da programma
- se sono stati abilitati i bit TMR1IE(PIE1<0>),
PEIE
e GIE, si genera una
richiesta di interrupt. Come detto, occorre che sia abilitato PEIE
perchè
si tratta di un interrupt periferico.
Il clock di conteggio può essere derivato da due diverse fonti:
- dal clock del processore, Fosc/4. Il bit CimeR1 Clock Select) a livello basso, in T1CON
, provvede alla selezione. Il bit TC1KPS1:0
selezionano il valore del prescaler (che è dedicato solo al timer)..
Il segnale di conteggio viene sincronizzato con il clock interno e inviato
al registro contatore.
In relazione al clock interno, il bit !T1SYNC,
che stabilisce se il segnale di conteggio va sincronizzato con il
clock non ha effetto (dato che il clock di conteggio è quello interno!),
mentre il bit TMR1ON è necessario sia a
livello 1 per attivare il timer. Nel diagramma l' azione è identificata con
un gate che inibisce l' ingresso dei registri di conteggio, ma, in effetti, l'
azione di TMR1ON è estesa su tutto il
timer e ha funzione di spegnere il modulo, quando questo non è necessario, in
modo da ridurre il consumo di energia
Il conteggio può essere anche riferito ad un segnale esterno:
- il clock esterno arriva attraverso il pin T1CKI (Timer1
ClocK Input), che deve essere definito come pin in ingresso con il relativo
TRIS. Tipicamente T1CKI corrisponde a RC0 .
Da notare che l' ingresso è un gate schmitt trigger
Qui, ha effetto il bit !T1SYNC,
che stabilisce se il segnale di conteggio va sincronizzato con il
clock interno (=0, percorso viola) oppure non va sincronizzato (=1, percorso
verde). Occorre sempre che il bit TMR1ON
sia a livello 1 per attivare il conteggio.
Il bit T1OSCEN non va abilitato se non nel
caso in cui si desideri utilizzare la funzione di oscillatore.
Da notare che, rispetto al TIMER0, il prescaler è sempre inserito e
se non è richiesta una pre divisione, va impostato per un rapporto 1:1.
Con selezioni diverse, il prescaler, che è un ripple counter, divide il clock in ingresso, sia che provenga dall' oscillatore
interno, sia che provenga dal pin T1CKI, per numeri pari
(2/4/8). Ad esempio, il rapporto 1:8 indica che il prescaler
invierà al contatore un impulso ogni 8 in ingresso. La scelta del valore è effettuata con i bit
T1CKPS1:0.
|