Tutorials - PIC peripherals

 

TIMER1

 


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.


 

 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 08/04/13.