dsPIC33F – Capítulo 2: El TIMER

Los estupendos microcontroladores dsPIC33F nos vuelven a sorprender con su módulo Timer, que incorpora hasta 9 Timer que pueden funcionar a 16 o 32 bits.

 


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.

Timer1

El 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/9

Estos 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 adelante0. 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)

Registros

Los 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
Share