Saltar al contenido

RELOJ de TIEMPO REAL basado en MICROCONTROLADOR

En la mayoría de las aplicaciones, un microcontrolador puede satisfacer todos los requisitos del sistema sin circuitos integrados adicionales. Debido a su bajo costo y un alto grado de flexibilidad, los microcontroladores están encontrando acceso a muchas aplicaciones que se lograron previamente por medios mecánicos o lógica combinatoria. Una de esas aplicaciones es un reloj en tiempo real.

Aquí hay un reloj en tiempo real que usa Atmel AT89S8252. El software para el microcontrolador está escrito en Bascom51 (un potente compilador BASIC), que es capaz de crear un archivo hexadecimal. El código de archivo hexadecimal se puede grabar en el microcontrolador utilizando cualquier programador o kit comúnmente disponible.

IC AT89S8252 es un microcontrolador CMOS de 8 bits de bajo rendimiento y alto rendimiento. Se fabrica utilizando la tecnología de memoria no volátil de alta densidad de Atmel y es compatible con el conjunto de instrucciones 80C51 estándar y el pin-out de la industria. El potente microcontrolador AT89S8252 proporciona una solución altamente flexible y rentable para muchas aplicaciones de control integradas. Sus características principales son:

1. Compatibilidad con productos MCS-51
2. Memoria flash descargable reprogramable en el sistema de 8kB con interfaz serial SPI para descarga de programas y
3. EEPROM de 2kB con resistencia de 100,000 ciclos de escritura / borrado
4. Rango de operación 4V – 6V
5. Funcionamiento totalmente estático: 0 Hz a 24 Mhz
6. Bloqueo de memoria de programa de tres niveles
7. RAM interna de 256 × 8 bits
8. 32 líneas de E / S programables
9. Tres temporizadores / contadores de 16 bits
10. Nueve fuentes de interrupción
11. Canal serial UART programable
12. interfaz serial SPI
13. Modos inactivo y apagado de baja potencia
14. Interrumpir la recuperación del apagado
15. Temporizador de vigilancia programable
16. Puntero de datos doble
17. Indicador de apagado Figura. 1 muestra las asignaciones de pin de abajo
15. Temporizador de vigilancia programable
16. Puntero de datos doble
17. Indicador de apagado Figura. 1 muestra las asignaciones de pines del reloj en tiempo real utilizando el microcontrolador AT89S8252 y algunos componentes externos para mostrar la hora en formato HH.MM.SS en seis pantallas de 7 segmentos. Los interruptores S2, S3, S4 y S5 se usan para incremento de hora, disminución de hora, incremento de minutos y disminución de minutos, respectivamente, mientras que el interruptor S6 se usa para restablecer la visualización del reloj a todos los ceros.

De los tres puertos del microcontrolador, un puerto se usa para configurar la hora y los otros dos puertos se usan para mostrar la hora. El controlador de línea y la matriz de controladores Darlington se utilizan para controlar los datos del segmento y habilitar la visualización de 7 segmentos, respectivamente.

Descripción del circuito

La figura 3 muestra el circuito del reloj de tiempo real construido alrededor del microcontrolador AT89S8252 (IC2). La fuente de alimentación de la batería de 9V se convierte y regula por IC 7805 (IC1) para proporcionar 5V regulados al circuito. El brillo del LED1 indica que la alimentación del circuito está encendida. La resistencia R1 actúa como el limitador de corriente.

El interruptor S1 se usa para reiniciar manualmente el microcontrolador, mientras que la señal de reinicio de encendido para el microcontrolador se deriva de la combinación del condensador C5 y la resistencia R2. El pin EA / Vpp (pin 31) del microcontrolador está conectado a Vcc para permitir la ejecución interna del programa. Los pines 19 y 18 son pines de entrada y salida del amplificador inversor incorporado, respectivamente, que se pueden configurar para usar como un oscilador en chip. Se utiliza un cristal de 6MHz para generar la frecuencia de reloj para el microcontrolador.

AT89S8252 tiene cuatro puertos bidireccionales de 8 bits, de los cuales solo tres puertos (0 a 2) se han utilizado en este circuito. El puerto 0 es un puerto de E / S bidireccional de drenaje abierto de 8 bits. Como puerto de salida, cada pin puede hundir ocho entradas TTL. El puerto 0 también se puede configurar como la dirección multiplexada de bajo orden / bus de datos durante los accesos al programa externo y la memoria de datos. Se requieren pullups externos durante las salidas de datos.

El puerto 0 se utiliza para controlar los segmentos de todas las pantallas de cátodo común de 7 segmentos. El pin 1 de la red de resistencias RNW1 está conectado a Vcc y los pines 2 a 9 están conectados a los pines del puerto 0 del 39 al 32 del IC2 como pull-ups externos. Los pines 39 hacia abajo hasta el 32 del puerto 0 también están conectados a los pines de entrada del nivel de renta octal. Las resistencias R5 a R11 limitan la corriente a través de las pantallas de 7 segmentos. Cada pantalla consta de siete diodos emisores de luz (LED) con sus cátodos comunes conectados entre sí, por lo tanto, se denomina pantalla de 7 segmentos de cátodo común.

El puerto 2 actúa como el multiplexor para seleccionar una pantalla particular de 7 segmentos usando la matriz de transistores Darlington octal ULN2803 (IC4). Los pines 21 a 26 del puerto 2 son extraídos por la red de resistencia RNW2 y también se conectan a los pines 1 a 6 de IC4. IC4 emite una señal baja para iluminar los segmentos de la pantalla de 7 segmentos seleccionados por los datos del puerto 2.

Los puertos 0 y 2 proporcionan los datos del segmento y habilitan la señal simultáneamente para mostrar un número particular en la pantalla de 7 segmentos. El pin 5 de punto decimal de las pantallas DIS2 y DIS4 está habilitado por Vcc a través de las resistencias R3 y R4, respectivamente, para diferenciar la hora, los minutos y los segundos.

El puerto 1 detecta la presión de los interruptores para aumentar / disminuir las horas y minutos y restablece la pantalla a “00: 00: 00” tirando de los pines del puerto a tierra. El software detecta la presión de los interruptores y establece el tiempo en consecuencia. Se han evitado las resistencias pull-up en el puerto 1 ya que el puerto ya tiene pull-ups internos.

En la Fig. 4 se muestra una PCB de un solo lado de tamaño real para el reloj de tiempo real y el diseño de sus componentes en la Fig. 5.

 

Software

El software para el reloj en tiempo real está escrito en la versión Bascom51. Aquellos que tengan conocimiento del lenguaje Basic, Basic-A, GW-Basic o QBasic (solían ejecutarse en las viejas PC 286 y 386 con DOS 2.x a 6.2) pueden entender el programa fácilmente. La versión demo de Bascom-8051 está disponible en el sitio web http://www.mcselec.com/download_8051.htm.

La figura 6 muestra el diagrama de flujo del programa. A continuación se explica cómo funciona el programa:

1. Defina los pines del puerto y dónde están conectados.
2. Incluya el archivo de encabezado para el microcontrolador
3. Defina la velocidad del cristal.
4. Declare las variables como bits, bytes y palabras.
5. Inicialice todos los puertos a 0, excepto el puerto 1, que se activa para actuar como puerto de entrada.
6. Ejecute una subrutina de diagnóstico para probar los segmentos de todos los dígitos.
7. Configure el temporizador interno como generador de interrupciones para obtener una fuente de actividad de un segundo.
8. Inicialice las horas, minutos y segundos variables a cero.
9. Entre en un bucle Do permanente para mostrar la hora en formato “HH: MM: SS”. (Dado que no hay circuitos integrados de convertidor BCD a 7 segmentos ni circuitos integrados de cierre, depende del software mostrar la pantalla del reloj sin ser interrumpido).
10. Configure los interruptores de entrada para activar las subrutinas respectivas utilizando el comando incorporado de la declaración de rebote de teclas de Bascom.
11. Verifique cuando las variables de segundo, minuto y hora excedan sus límites e increméntelos en consecuencia.
12. Active los dígitos uno por uno a través del puerto 2 y muestre el número correspondiente en la pantalla usando el puerto 0.
13. Declare subrutinas para la detección de los interruptores presionados para ajustar las horas y los minutos.
14. Declare la subrutina de la pantalla principal. Como no hemos utilizado un IC convertidor de 7 segmentos, se realiza una comprobación rápida de la tabla utilizando el concepto de lectura y datos en Basic para obtener el valor de byte correcto para el dígito que se mostrará.
15. Declare la subrutina de interrupción del temporizador interno. Esta subrutina se llama 2000 veces en un segundo usando un cristal de 6MHz, y para generar una variable precisa de un segundo, establecemos el indicador solo una vez cada 2000 veces. Esta variable se utiliza para detectar el cambio de segundos e incrementar el tiempo en la rutina principal del bucle Do. La precisión del reloj depende de la subrutina del temporizador.

 

Otros posibles usos

Se puede mejorar el circuito y el software para convertir este reloj en tiempo real en una alarma. Con el puerto 3 activado, se puede utilizar como temporizador industrial multicanal. Puedes ver el código fuente en las imágenes…