La serie de micros
dsPIC33F dispone de 9 timers de 16 bits, de los cuales el Timer1 trabaja de manera individual, y el resto puede trabajar de forma individual o en parejas como Timer de 32 bits.
Timer1El esquema del módulo Timer1 es el siguiente:
Como se puede observar en el gráfico, las características del Timer1 son:
- Timer de 16 bits
- Contador síncrono de 16 bits
- Contador asíncrono de 16 bits
- Acumulador de pulsos altos en TGate
- Prescaler seleccionable en ratios 1:1, 1:8, 1:64 y 1:256
- Ajuste fácil del Periodo con PR1
Además, nuestro Timer1 puede seguir funcionando incluso en el modo
Idle o
Sleep de la CPU.
El Timer1 puede acumular pulsos tanto externos (
TCS=1) a través del pin
T1CK como internos (
TCS=0) al ritmo de la Frecuencia de instrucciones (
Tcy). Además, en el modo de trabajo de acumulación de pulsos altos en TGate puede contar los pulsos internos (
Tcy) sólo cuando el pin externo
T1CK esté a nivel alto lo que permite contar la duración acumulada de una señal a nivel alto. Para seleccionar este modo hay que poner a 1 los bits
TCS y
TGATE.
El interruptor que nos permite encender y apagar el Timer1 es el bit
TON.
A continuación nuestro tren de impulsos atraviesa el prescaler donde es dividido a razón de 1:1, 1:8, 1:64 y 1:256 en función de la combinación seleccionada en los bits
TCKPS<1:0>.A continuación se incrementa en una unidad el registro
TMR1. En función del bit de configuración
TSYNC, si su valor es 1 el incremento de dicho registro será sincronizado con una señal externa. Cada vez que se incrementa el registro
TMR1, se compara con el registro
PR1 y en caso de igualdad se pone a 0 el
TMR1 y se señala el bit de interrupción
T1IF. El registro
PR1 por defecto vale 0xFFFF con lo que el periodo del Timer1 será ese, pero podemos ajustarlo al valor que queramos, lo que nos permite seleccionar una frecuencia de interrupción programable muy útil.
Timer2/3, Timer 4/5, Timer 6/7 y Timer 8/9Estos 8 timers pueden funcionar individualmente como timers de 16 bits o en parejas como timers de 32 bits. Su esquema es el siguiente:
Básicamente el funcionamiento de estos Timers a 16 bits es análogo al del Timer1, con excepciones que veremos más adelante.
Para hacerlos trabajar a 32 bits hay que poner a 1 el bit
T32. En este caso, los bits de configuración del Timer de 32 bits serán los del Timer par; es decir, si queremos trabajar con la pareja Timer 4/5 hay que setear los bits del Timer4, incluyendo el bit
T32=1.
Sin embargo, el bit de señalización de fin de periodo será el del Timer impar, en nuestro ejemplo se activará el bit
T5IF.
En el modo de trabajo a 32 bits, la palabra alta la forma el registro TMR impar y la palabra baja el TMR par.
Las excepciones son las siguientes:
- Sólo el Timer 2/3 puede servir como base de tiempos al módulo CCP (Capture and Output Compare)
- Sólo el Timer 2/3 puede activar una transferencia de datos al módulo DMA
- Sólo los Timer 2/3 y Timer 4/5 pueden activar el Trigger del ADC (1 y 2 respectivamente)
RegistrosLos registros que utilizaremos para gestionar los Timer son los siguientes:
- TMRx
- PRx
- TxCON
- TON: enciende (1) o apaga (0) el timer
- TSIDL: el Timer puede seguir trabajando (1) en modo Idle o Sleep o puede quedar parado (0).
- TGATE: selecciona el modo de acumulación de pulso a nivel alto (1)
- TKCPS: Prescaler, según los ratios 1:1 (00), 1:8 (01), 1:64 (10) o 1:256 (11).
- TSYNC: Sincroniza entrada de clock externa (1)
- TCS: Selecciona una fuente de clock externa (1) o la frecuencia interna de instrucciones (0).
- T32 (sólo en Timer2/4/6/8): activa el modo de 32 bits (1)
- IFS0
- T1IF / T2IF / T3IF: se activan al finalizar el periodo del Timer.
- IFS1
- T4IF / T5IF: idem
- IFS2
- T6IF: idem
- IFS3
- T7IF / T8IF / T9IF: idem
Nota: este artículo es una copia del que está publicado en
El Rebujito.