PIC - Periferiche e Moduli
 
  Box
Il modulo Timer1

Vedere anche:

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 timer1

Il modulo Timer1 è un timer/contatore a 16 bit, come si vede nella figura sottostante, e quindi formato dall'unione di due singoli registri ad 8 bit: il TMR1H ed il TMR1L.
Entrambi i registri sono leggibili e scrivibili in qualsiasi momento.

   

L'interrupt verrà generato al raggiungimento del valore 0x0000 incrementando di 1 il valore 0xFFFF, sempre che il bit TMR1IE sia stato abilitato.
Il funzionamento dei bit TMR1IE e TMR1IF è identico a quello visto per i corrispondenti T0IE e T0IF del Timer0.

A differenza del Timer0, il Timer1 ha un registro di controllo tutto suo, visibile nella figura sottostante.

   
TMR1ON (Timer1 ON)
  1 = Abilita Timer1
  0 = Disabilita Timer1

Il bit TMR1ON abilita o arresta il Timer1.

1

Abilita il conteggio del TMR1.

0

Disabilita il conteggio del TMR1.

TMR1CS (Timer1 Clock Source)
  1 = Clock esterno dal pin T1CKI
  0 = Clock interno (Fosc/4)

Il bit TMR1CS seleziona l'incremento sul pin esterno T1CKI oppure sincronizzato col clock del controller (esattamente come nel caso del Timer0).

1

Un segnale generato da un circuito esterno può essere applicato al pin T1CKI.

0

Il segnale arriverà dal clock del PIC, con frequenza pari a quella dell'oscillatore, divisa per 4.

T1SYNC (Timer1 Synchronization)
Quando TMR1CS = 1
  1 = Non sincron. clock esterno
  0 = Sincronizza clock esterno
Quando TMR1CS = 0
  1 = Non influente
  0 = Non influente

Il bit T1SYNC dice se sincronizzare il segnale esterno con il clock del controller oppure no (diversamente dal Timer0 che non lo prevedeva).

1

Se il bit TMR1CS = 1, il segnale in ingresso sul pin T1CKI non verrà sincronizzato col clock interno.

0

Se il bit TMR1CS = 1, il segnale in ingresso sul pin T1CKI verrà sincronizzato col clock interno.

T1OSCEN (Timer1 Oscillator Enable)
  1 = Oscillatore acceso
  0 = Oscillatore spento

Il bit T1OSCEN abilita l'oscillatore del Timer1.

1

Accende oscillatore del Timer1.

0

Spegne oscillatore del Timer1.

T1CKPS1:T1CKPS0 (TMR1 Prescaler)
 T1CKPS1  T1CKPS0    Prescaler
    0        0          1:1
    0        1          1:2
    1        0          1:4
    1        1          1:8

I bit T1CKPS1:T1CKPS0 consentono di impostare il valore del prescaler per questo timer.

Il prescaler, per questo timer, è sempre inserito (si può disabilitare impostando la divisione per 1:1).

Uno dei vantaggi del Timer1 è quello di poter lavorare anche separatamente dal clock del microcontroller stesso: ad esempio è possibile avere un quarzo a 8 MHz per il normale funzionamento del circuito ed uno a 32768 Hz per il mantenimento di un orologio, che andrà collegato ai pin T1OSI e T1OSO.

I pin T1OSI e T1OSO sono, rispettivamente, l'ingresso e l'uscita dell'oscillatore interno del Timer1, a bassa potenza e può funzionare fino a 200kHz.
Vedere il datasheet per il valore dei condensatori C1, C2 e altre note.

L'oscillatore può essere acceso o spento impostando il bit T1OSCEN del registro T1CON. Quando è abilitato (acceso), i 2 I/O RC0 e RC1 saranno disabilitati e viceversa.

Il PIC resta in sleep fino all'interrupt provocato dal Timer1 che lavora con una frequenza più bassa e che quindi consuma molte volte di meno rispetto all'oscillatore a 8 MHz, favorendo la durata delle batterie.

Poiché il Timer1 può lavorare quindi in asincrono con il clock del microcontroller, per leggerne il contenuto si dovranno usare delle precauzioni.
Nel programma sotto si riporta la sequenza corretta delle istruzioni necessarie.

 
movf    TMR1H,W   ;Leggi byte alto
movwf   REG1      ;
movf    TMR1L,W   ;Leggi byte basso
movwf   REG2      ;
movf    TMR1H,W   ;Leggi byte alto
subwf   REG1,W    ;Sottrai lettura 1 con lettura 2
btfsc   STATUS,Z  ;Risultato = 0?
goto    CONTINUA  ;SI
movf    TMR1H,W   ;NO —> Leggi nuovamente byte alto
movwf   REG1      ;
movf    TMR1L,W   ;Leggi byte basso
movwf   REG2      ;
;Riabilita interrupt se richiesto 
CONTINUA
   

In tabella troviamo i registri associati al Timer1.

Esempi di codice con uso del Timer1:

  • MPASM
  • MikroBasic

 

Il Timer0

Il Timer2

Bibliografia:
Datasheet Microchip PIC16F877A

 

Ultima modifica  

 
Privacy Policy Cookie Policy