HOME

PRODUCTOS

PROYECTOS

TUTORIALES

VIDEOS

FREEWARE

PROGRAMAS

FUNCIONES C

EMPRESA

ENGLISH

                   

 proyecto:  reloj de tiempo real de alta precisión, con rutina de interrupción en ANSI C, para EVOLUPIC Bootloader 16F88 (compilador CCS)

 

VER VIDEO

EVOLUPIC BootloaderV.jpg (119444 bytes)

 

Antecedentes:

En la sección tutorial, se explica el mecanismo de interrupciones realizado por el 16F84/F628/F88 para el manejo de varios de sus dispositivos internos. En particular, en el proyecto Reloj de Tiempo Real, se desarrolló un programa escrito en lenguaje ensamblador, para mostrar la hora en un LCD, empleando la interrupción del TIMER0.

Descripción:

En este proyecto, se muestra un programa para el sistema EVOLUPIC Bootloader 16F88, con una rutina de interrupción utilizando programación de alto nivel ANSI C. El RTC (Real Time Clock, Reloj de tiempo real) descrito aquí, permite manejar segundos, minutos, hora, día, mes, año e incluso realiza las actualizaciones necesarias en forma automática en los años bisiestos. Además utiliza un algoritmo de alta precisión, que permite el manejo de la base de tiempo con una exactitud  que depende de la desviación de frecuencia del cristal de 4 MHz, es decir, un error máximo de 1 segundo por cada 24 horas.

El uso de esta rutina permite realizar con facilidad aplicaciones más complejas en ANSI C, como podrían ser temporizadores programables, relojes bancarios, registros de control de acceso, etc.

 

LOS PROGRAMAS FUENTE Y EJECUTABLES SON:

OBSERVACIONES SOBRE EL PROGRAMA CCSRTC3TINY.c

El programa usa las variables: Segundos, Minuto, y Hora. Sin embargo, como se explicó antes, el programa puede manejar Día, Mes, y Año (Year). Este programa tiene una hora inicial de 00:00:00, que puede ser modificada en el programa fuente. Sin embargo, en una segunda versión, la hora actual puede ingresarse a través del teclado.

Se utiliza el temporizador 1 (TIMER1), que tiene 16 bits en su registro, para obtener la base de tiempo por interrupciones. El programa puede adaptarse a cualquier frecuencia de operación, y prácticamente a cualquier versión de PIC de las familias /16/18. En el caso del sistema EVOLUPIC Bootloader, se tiene un microcontrolador 16F88, operando con cristal externo de 4 Mhz.  Veamos el algoritmo de la rutina de interrupción:

#int_TIMER1
void TIMER1_isr( ) //subrutina de interrupción.
{Ticker=Ticker-65536; // Decrementa ticker
if (Ticker<65536) // si ya transcurrió un segundo
{Ticker=Ticker+FRECUENCIA_TIMER1; // Incrementa ticker
Segundos++; // Incrementa número de segundos
}
}

ALGORITMO DE ALTA PRECISION

Mediante este ingenioso algoritmo, la base de tiempo de 1 segundo se mantiene exacta. La variable denominada "Ticker" se inicializa con un valor de 1000000. El TIMER1 genera una interrupción cada 65536 ciclos de instrucción, ó 65536 us. El algoritmo alterna ciclos de 983040 us (15 x 65536), con ciclos de 1048576 us (16 x 65536), compensando automáticamente unos con otros, de tal manera de obtener siempre un número total exacto de segundos, sin acumular ningún error durante el tiempo transcurrido.

La precisión obtenida en el dato de la hora, depende únicamente de la máxima desviación de la frecuencia de oscilación del cristal de cuarzo de 4 Mhz. sobre su valor nominal, ésto es, según la hoja de datos del fabricante, de 0.001% (a 25 grados centígrados). En 24 horas, el máximo error del reloj será de aproximadamente más-menos 1 segundo. En un mes, son 30 segundos y en un año, 5 minutos de error como máximo.

Para probar los programas en el sistema EVOLUPIC Bootloader 16F88, no olvide conservar los microswitches SW1..SW4, en la posición "OFF", para permitir el funcionamiento del display LCD.