In tutti i PIC con bus dati a 8 bit sono presenti uno o più timer/counter, con struttura analoga e compatibile per quanto riguarda il
software, anche se esistono varianti della forma di base.
Le caratteristiche generali di questi timer sono:
- contatore a 8 o a 16 bit a seconda del timer e della famiglia in
cui è implementato (ad esempio, TIMER0 è a 8 bit nei Baseline e Mid, ma è
utilizzabile anche a 16 bit nei PIC18)
- registri di conteggio a crescere, da 0 al massimo (FFh per gli 8
bit e FFFFh per i 16 bit).
Incremento di 1 ad ogni impulso del clock e overflow al 256esimo (8 bit) o
65535esimo (16 bit)
impulso.
- funzionamento come timer con impulsi derivati
dall' oscillatore interno
- funzionamento come contatore, con ingresso da una sorgente esterna collegata ad un pin.
- possibilità di realizzare un oscillatore esterno per quarzi low power
(ad es. oscillatore di Timer1)
- pre-scaler o post-scaler, ripple counter che divide per potenze di
2 il segnale di conteggio
- collegamento con altri moduli funzione per comparazioni, cattura di
impulsi (Timer1) o PWM (Timer2)
- sorgente di interrupt, abilitabile da programma.
Le risorse dipendono dal modello di chip, ma in generale si possono
indicare le seguenti possibilità:
Timer |
PIC10 |
PIC12 |
PIC16 |
PIC18 |
8 bit |
1 o 2 |
da 1 a 2
|
da 1 a 6 |
da 1 a 4 |
16 bit |
- |
da 0 a 1
|
da 1 a 3
|
da 2 a 4 |
Con le sigle PIC12/16 sono disponibili sia Mid-range che Enhanced
Mid-range e questi ultimi hanno il maggior numero di risorse disponibili.
PIC24/32 e dsPIC30/33 dispongono fino a 27 timer a 16 bit e 32 bit, le cui
caratteristiche sono simili, ma anche più complesse, di quelle dei timer presenti
nei PIC a 8 bit.
In funzione dell' impiego tipico, i Timer dei PIC sono nominati da 0 a 10:
Timer |
Baseline |
Mid-range |
Enhanced
Mid |
PIC18 |
PIC16/32 |
TIMER0 |
|
|
|
|
|
TIMER1 |
|
|
|
|
|
TIMER2 |
|
|
|
|
|
TIMER3 |
|
|
|
|
|
TIMER4 |
|
|
|
|
|
TIMER5 |
|
|
|
|
|
TIMER6 |
|
|
|
|
|
TIMER8
|
|
|
|
|
|
TIMER9 |
|
|
|
|
|
TIMER10 |
|
|
|
|
|
Le caratteristiche specifiche sono relative ad ogni singolo chip; ad
esempio, Timer0 può essere il trigger per Timer1/3/5 dove questi sono
presenti; sempre Timer0 è a 8 bit nei Baseline e Mid, mentre diventa a 16 bit
negli Enhanced e PIC18. Timer4/6/8/10 sono cloni di Timer2 e sono relativi
alla gestione dei moduli PWM. E così via.
Le informazioni necessarie per l' uso di una specifica periferica, quindi, vanno tratte
dalla lettura del relativo foglio dati.
In linea di massima, si possono raccogliere così:
Timer |
8bit |
16
bit |
oscillatore |
multi
source |
gate |
supporto |
TIMER0 |
|
|
|
|
|
Timer1/3/5
|
TIMER1 |
|
|
|
|
|
CCP
|
TIMER2 |
|
|
|
|
|
MSSP - PWM |
TIMER3 |
|
|
|
|
|
CCP |
TIMER4 |
|
|
|
|
|
PWM |
TIMER5 |
|
|
|
|
|
CCP |
TIMER6 |
|
|
|
|
|
PWM |
TIMER8 |
|
|
|
|
|
PWM |
TIMER10 |
|
|
|
|
|
PWM |