Temporizador de 1 segundo con el TIMER1 del PIC16F628.

Que tal camaradas, apasionados amantes de la electrónica, en esta oportunidad les quiero explicar a mi manera como funciona el TIMER1 y como lograr temporizar 1 segundo con el PIC16F628.

Comencemos entonces este divertido tutorial.

Que es el TIMER1 del PIC16F628

El timer 1 es un recurso, algunos le llaman también un módulo, muy útil por cierto, con el que vienen equipados la gran mayoría de nuestros amigos los Microcontroladores.

Y afirmo que es muy útil pues nos puede ayudar a implementar soluciones a problemas relacionados al control de tiempos  o al conteo de eventos para llevar a cabo un fin especifico. Como por ejemplo controlar un reloj o activar una alarma.  Dime si eso no es Útil.

Timer 1 del PIC16f628

Veamos un poco como es que trabaja el TIMER1, en este caso en el micro controlador PIC16F628A.

Funcionamiento del TIMER1 en el PIC16F628

EL TIMER1 del PIC16F628 está constituido por 2 registros de 8 bits haciendo un total de 16 bits, disponibles para leer y escribir información en ellos.

Timer 1 del PIC16f628

Como cada bit puede tomar el valor de 1 o 0 (2 valores posibles) y tenemos 16 bits entonces 2 a la 16 = 65536. Esto significa que podemos contar desde 0 hasta 65535 con este par de registros. Debemos tener muy claro este concepto porque nos va a servir más adelante.

El TIMER1 Puede funcionar de 2 maneras:

  • Como Temporizador.
  • Como Contador.

En este tutorial hablaremos del TIMER1 como temporizador y de su funcionamiento, el cual como veras es bastante sencillo:

El registro del TIMER1 Incrementa su valor en una unidad desde el numero 0 hasta el número 65535 y ya sabes por qué (0 hasta 65535 es lo mismo que 0x0000 hasta 0xFFFF) y al llegar a este punto simplemente activa una interrupción y se acabó la historia.

Y eso nada más ¿?

Bueno esa es la parte útil pues al activarse dicha interrupción sabemos que ha transcurrido una cantidad de tiempo X.

Y esa cantidad de tiempo X podemos utilizarla para hacer un montón de cosas útiles como por ejemplo controlar segundos, días, meses o años en un reloj o activar alarmas en un periodo fijo de tiempo.

El límite de lo que puedes hacer esta en tu imaginación.

Veamos un diagrama de Bloques animado del TIMER1 de exploreembedded.com que me parece genial:

Timer 1 del PIC16f628

Aplicación practica del TIMER1 como TEMPORIZADOR

Ahora que ya sabes como funciona y que cosas se pueden hacer con el timer 1 en modo temporizador vamos a ver como lo aterrizamos a la práctica.

Como ya habíamos dicho podemos usar el timer 1 para controlar un determinado periodo de tiempo.

Entonces que mejor que generar periodos de 1 segundo, ¿Por qué? por que es la unidad de tiempo que más utilizamos y mejor comprendemos los humanos, verdad?

Vamos por ello entonces.

Como Temporizar 1 segundo con el TIMER1 del PIC16F628

Lamentablemente para nosotros, los micro controladores operan tan pero tan rápido que hablar de 1 segundo es hablar de una eternidad para su ritmo de trabajo.

Veamos por qué:

El TIMER1 funciona en base a la frecuencia de operación del micro controlador llamado FOSC, pero dividido entre 4. A ese resultado se le llama frecuencia de trabajo del TIMER1.

F TIMER1 = FOSC /4

Veamos un ejemplo de esto:

Un microcontrolador PIC16F628 funcionando con un cristal de 4MHZ (FOSC = 4MHz) tendrá una frecuencia para el TIMER1 de:

F TIMER1 = FOSC/4 = 4MHz/4 = 1MHz

1 Mhz por segundo significa que el TIMER1 puede realizar 1 millón de operaciones cada 1 segundo o lo que es lo mismo 1 operación cada 1 micro-segundo (1us).

Entonces si cada operación de incremento de una unidad le toma al TIMER1 un tiempo de 1us, contar desde 0x0000 hasta 0xFFFF (lo que es lo mismo de 0 a 65535) y activar la interrupción le tomara 65536 micro segundos (65536us) o lo que es lo mismo 0.006536 SEGUNDOS!

Este periodo de tiempo no es muy útil si nuestro objetivo es llegar a controlar periodos de 1 segundo. Entonces necesitamos hacer que nuestro TIMER1 vaya un poco más lento.

Para poder relentizar un poco el ritmo de trabajo del TIMER1 debemos relentizar el proceso de incremento de unidades del registro de conteo.

Uso del pre escalador para relentizar la frecuencia de operación del TIMER1.

Y eso se logra con algo llamado preescalador, que consiste en reducir la frecuencia de trabajo del TIMER1 reduciendo el ciclo de Reloj FOSC dividiéndolo entre 1,  2 o 4 u 8.

Veamos una comparación con Preescalador y sin Presecalador :

Timer 1 del PIC16f628

Como vemos en la tabla con un preescalador de 8 pasamos de valores del orden de los microsegundos a los milisegundos y 524.28 milisegundos es solo un poquito mas de medio segundo.

Nuevamente si observamos el diagrama de bloques vemos como el preescaler disminuye la frecuencia de trabajo del TIMER1

Timer 1 del PIC16f628
Timer 1 del PIC16f628

Lo ideal seria encontrar la manera de quitarle esos 24.28 milisegundos de exceso para tener un valor exacto de 500 ms.

Como lo logramos, la respuesta es sencilla cargando un valor determinado X en el REGISTRO del TIMER1 para que el conteo no inicie desde 0x0000 si no desde un valor mas alto y de esa forma lograr generar la interrupción a los 500ms.

Formula para encontrar el valor a cargar en el registro del TIMER1.

Para hallar ese valor X que debemos cargar al registro del TIMER1 utilizamos la siguiente formula:

Timer 1 del PIC16f628

Donde:

  • Vtemp es el valor de temporización que queremos lograr en Micro segundos ojo.
  • FOSC es la frecuencia de reloj del PIC.
  • PREESCALER: 1 , 2 , 4 u 8.
  • Vcarga es el valor X que cargaremos al registro.

Entonces para nuestro ejemplo operando y despejando tendríamos:

Timer 1 del PIC16f628

Para Validar el resultado debemos asegurarnos que este se encuentre entre 0 y 65536.

En este caso es válido.

Analizado este punto vemos que el TIMER1 del PIC16f628 utilizando el máximo preescaler (8) solo puede generar temporizaciones en el orden del medio segundo.

Aunque debes saber que existen otros PICS con preescalers que llegan hasta 16 y fácilmente se puede alcanzar el segundo completo.

Entonces para lograr temporizaciones de 1 segundo con nuestro PIC16F628 podemos usar 2 veces la interrupción de medio segundo. No hay que ser un genio para darnos cuenta de eso.

Presentamos el siguiente programa escrito en lenguaje C :

Código de programa TIMER1 temporizador de 1 segundo

#INCLUDE <16f628a.h>
#FUSES NOWDT,NOPROTECT,NOLVP,NOLVP,NOMCLR 
#USE fast_io(B) 
#USE delay (clock=4000000,INTERNAL)
#USE rs232(baud=9600,xmit=pin_b2)

int1 cont=0;
int flag=0;
int segundos=1;

#int_timer1
void temp_1s(void)
{if (cont==1)
{
output_toggle(PIN_B0);
flag=1;
}
set_timer1(3036);
cont++;
//printf("cont=%d ",cont);
}
void main(){
SET_TRIS_B(0x00);
Output_low(PIN_B0);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
SET_TIMER1(3036);
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);

while(TRUE){
if(flag==1)
{
printf("Segundos=%d ",segundos);
segundos++;
flag=0;
}}}

Lo compilamos en CCS.

Timer1 temporizador de 1 segundo

Esta perfecta rutina se basa en la interrupción que ya sabemos como generar cada medio segundo y en la capacidad de la variable int1 de tomar solo 2 valores 0 y 1.

Como podemos ver en el programa con las instrucción SET_TIMER1 le cargamos el valor de 3036 al registro.

Además, el programa cuenta con una salida de terminal que nos muestra claramente el avance del conteo.

Al realizar la simulación tenemos este hermoso resultado:

El led se enciende un segundo y se apaga el siguiente y en cada segundo transcurrido se muestra el conteo en la salida del terminal usando el pin B2.

TImer1 PIC16f628 1 segundo

Simulación en Proteus del circuito del TIMER1 que parpadea un led cada segundo

Timer1 temporizador 1 segundo

Muy interesante no ? bueno, eso ha sido todo por ahora amigos.

A continuación les dejo el LINK con la simulación y el código del programa:

LINK MEGA TIMER1 1SEC

Espero realmente que este tutorial te ayude a comprender como funciona el TIMER1 y lo mas importante como implementarlo con éxito en algún tipo de proyecto.

Recuerda que puedes visitar todas las entradas del Blog de electrónica en:

BLOG ELECTRONICA TECNOCIENCIA

También puedes visitar nuestro canal de Youtube en:

CANAL DE TECNOCIENCIA

Agregue un comentario

Su dirección de correo no se hará público. Los campos requeridos están marcados *