Autor Tema: dsPIC33F - Capítulo 2: El TIMER  (Leído 5929 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
dsPIC33F - Capítulo 2: El TIMER
« en: 18 de Diciembre de 2006, 04:10:59 »
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 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)

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

Nota: este artículo es una copia del que está publicado en El Rebujito.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: dsPIC33F - Capítulo 2: El TIMER
« Respuesta #1 en: 21 de Diciembre de 2006, 03:13:28 »
Acabo de terminar un asistente para la configuración automática del Timer de la familia dsPIC33F.

Resulta tremendamente práctico porque he incluido una calculadora de tiempos, que indicará siempre el periodo que corresponda a la configuración que se esté cumplimentando.

Este asistente genera dos códigos fuentes equivalentes:
- asignación de cada uno de los parámetros por separado, es más fácil de entender
- asignación de la palabra de configuración en un sólo paso, es más difícil de entender pero se ahorran ciclos

Lo tenéis disponible aquí:
33F - Asistente para configurar el Timer de la familia dsPIC33F

Espero que pueda resultar de utilidad a alguien.

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: dsPIC33F - Capítulo 2: El TIMER
« Respuesta #2 en: 21 de Diciembre de 2006, 18:05:09 »
Nocturno no me das tiempo de respirar :D, yo apenas estoy visitando a la familia 18.
La familia 33 queda a muchas cuadras todavía, jeje

es broma :D, adelante con tu artículo, que está muy interesante.

Salu2
Pedro
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: dsPIC33F - Capítulo 2: El TIMER
« Respuesta #3 en: 21 de Diciembre de 2006, 19:09:54 »
Aplausos Nocturno, mucho animo con esta inicitiva.  :-/ :-/

Ya este año no te podre seguir en tu curso en linea, pero el 2007 sera el año para aprender DSPic. Muchas gracias!

Desconectado Gabriel_SANLUIS

  • PIC10
  • *
  • Mensajes: 20
Re:dsPIC33F - Capítulo 2: El TIMER
« Respuesta #4 en: 03 de Mayo de 2016, 17:14:58 »
Hola como están.
Tengo un problema con la configuración del TMR1 ... no puedo darle a la formula para configurarlo como temporizador... He intentado mil veces la carga del PR1 ... y ni por casualidad veo en el osciloscopio, el periodo calculado. Alguien podría ayudarme con algún ejemplo... bien con formulas para calcular el PR1 a cargar... y como quedaría en un archivo.. Muchas gracias.


 

anything