Temporizador TIMER1 con el PIC18F4550

publicado en: Teoria pic18f4550 | 0

temporizador-timer1-con-el-pic18f4550-1

DESCRIPCIÓN

El módulo TIMER1 puede funcionar como temporizador o contador de 16 bits que se almacena en dos registros TMR1H y TMR1L, al igual que el timer0, este TIMER1 presenta muchas características adicionales que se muestran a continuación.

  • Registro Contador de 16 Bits TMR1H y TMR1L
  • Ambos registros de Lectura/Escritura.
  • Fuente de Reloj Interno o Externo (programable por software).
  • Prescaler de 3 bits.
  • Funcionamiento síncrono o asíncrono.
  • Habilita la salida del modo reposo.
  • Interrupción por desbordamiento.

En las siguientes imágenes se detallan los registros involucrados al TIMER1

temporizador-timer1-con-el-pic18f4550-2temporizador-timer1-con-el-pic18f4550-3

El TIMER1 puede funcionar en uno de estos 3 modos

  1. TEMPORIZADOR: Este modo se determina escribiendo un “0” lógico en el bit TMR1CS del registro T1CON, esto permitirá que los incrementos del registro TMR1 sea en cada ciclo de instrucción interna (Fosc/4).
  1. CONTADOR ASÍNCRONO: Este modo se determina escribiendo un “1” lógico en los bits TMR1CS y T1SYNC del registro T1CON, esto permitirá que los incrementos del registro TMR1 sea en cada flanco de subida de la entrada de reloj externo por el pin RC0/T13CKI de forma asíncrona.
  1. CONTADOR SÍNCRONO: Este modo se determina escribiendo un “1” lógico en el bit TMR1CS y un “0” lógico en el bit T1SYNC, ambos en el registro T1CON, esto permitirá que los incrementos del registro TMR1 sea en cada flanco de subida de la entrada de reloj externo por el pin RC0/T13CKI y de forma síncrona. Cabe resaltar que para que se sincronice el reloj externo con el interno es necesario 2 ciclos de reloj Interno (Fosc/4).

La Interrupción por desbordamiento es para los 3 modos, esto ocurre cuando el registro TMR1 que es el encargado de llevar la cuenta, llega a su máximo valor (0xFFFF) y automáticamente se desborda a (0x0000), en ese preciso instante el Flag de estado TMR1IF se pone a “1” y si está habilitado la Interrupción a través del bit TMR1IE provocará una Interrupción por Desbordamiento.

A continuación se explicarán los PASOS para configurar el TIMER1

  1. Deshabilitar la Interrupción GLOBAL (para evitar Interrupciones falsas).
  2. Configurar la Fuente de reloj para el TIMER1 a través del bit
  3. Configurar el Prescaler a través de los bits T1CKPS1:T1CKPS0.
  4. Seleccionar el modo Síncrono o Asíncrono (solo en modo Contador).
  5. Poner en Marcha el TIMER1 escribiendo en el bit TMR1ON.
  6. Escribir en los registros TMR1H:TMR1L para configurar el Tiempo de Interrupción.
  7. Habilitar la Interrupción por Desbordamiento escribiendo el bit TMR1IE.
  8. Habilitar la Interrupción GLOBAL (GIE y PEIE).

Para poder calcular el PERIODO de Interrupción por Desbordamiento del TIMER0, es necesario las siguientes Fórmulas

temporizador-timer1-con-el-pic18f4550-4

EJEMPLO N°1 – TIMER1 EN MODO TEMPORIZADOR DE 16 BITS

En este ejemplo se muestra como controlar 4 display 7 segmentos a través de la técnica de multiplexación. Para ello utilizaremos el IC 74HC4511 que es un decodificador BCD ideal para mostrar datos en el display; tambien utilizaremos el IC 74HC138 que es un decodificador de 3 a 8 lines, esto es para poder controlar cada display. Con estos dos IC realizaremos un reloj digital que muestre los minutos y segundos, además tendrá 2 botones para iniciar y parar.

temporizador-timer1-con-el-pic18f4550-005

A través de los pines RD[0:3] controlaremos el IC 74HCT4511 el cual escribirá el valor deseado en el display 7 segmentos, con los pines RD[4:6] controlaremos el IC 74HCT138 el cual habilitara cada uno de los 4 display cada 10ms (este tiempo es para multiplexar los 4 display y poder visualizarlos al mismo tiempo). Utilizaremos el timer1 en modo temporizador de 16 bits para generar los 10ms deseados. Además se tendrá un boton para start/pause y otro de stop.

10ms = (4÷FOSC) × (PRESCALER) × (65535 – X)

10000us = (4÷8Mhz) × (2) × (65535 – X)

X = 55535 = 0xD8EF –> este valor escribiremos en el registro TMR1H y TMR1L

Código principal MAIN

Código FUSES

Deja un comentario