miércoles, 1 de abril de 2009

Reloj con el DS1307 ajustable por PC


Buscando un CI que actuara como reloj encontré el PCF8583P de Philips y el DS1307 fabricado por Dallas Semiconductor.
En el PC8583P observé dos cosas que no me gustaron, la primera es que no tiene una entrada para conectar una batería de respaldo, y la segunda es que la fecha no se ajusta al cambio del mes. Hice la siguiente prueba: configuré la hora 23:59:00 y la fecha 31/12/08, al cabo de un minuto la fecha indicaba 32/12/08.

El reloj DS1307 permite contar: horas, minutos, segundos, fecha, mes, año y día de la semana, y esta compensado hasta el año 2100.
Posee una entrada para conectar una batería de respaldo de 3V, y haciendo la prueba anterior, el DS1307 respondió de forma correcta con la fecha 01/01/09.

La comunicación entre el reloj y el pic se hace por el bus I2C, y el pic empleado en este proyecto es el 16F88 que posee puerto serie y bus I2C.
La configuración del reloj se hace vía PC a través del puerto serie.
Para probar el circuito se usó el programa de simulación Proteus 7.2, el único cristal presente en el circuito es el del reloj con una frecuencia de oscilación de 32.768KHz.
El pic trabaja con una frecuencia de 4MHz provista por el oscilador interno que tiene incorporado.

El programa.

El programa fue escrito en lenguaje C usando el compilador CCS versión 4.02, la biblioteca del DS1307 no está incorporada en el compilador la que uso la obtuve en Internet.
Después de configurar al microcontrolador queda habilitada la interrupción para recibir
datos desde la PC.
Cada vez que se pulsa una tecla en el teclado de la PC se produce la interrupción de lectura del puerto serie, el valor ingresado se compara con el número 123 (puede ser otro) si coincide con este valor se va a la función de ajuste del RTC, en caso contrario, se va a la función que muestra la hora y la fecha.
Todo esto es lo que hace el programa, a tener en cuenta es que los datos que se almacenan en el RTC son convertidos a BCD, en la biblioteca del DS1307 está la función que hace la conversión de binario->BCD y BCD->binario.
Los datos que se ingresan se deben hacer con la tecla Alt presionada, por ejemplo: Alt 0123 después suelte la tecla Alt, y se ingresa al modo de ajuste del RTC .
Para ingresar un dato de 2 dígitos haga lo siguiente; por ejemplo: 59 minutos, digite Alt 059 y luego suelte la tecla Alt, el cero entes de la cifra es importante de lo contrario no acepta el dato.
No existe tecla de retorno en caso de haber ingresado mal un dato se debe repetir el proceso de ajuste.
Para ver la hora y fecha actualizada solo tiene que presionar cualquier tecla.
El programa que se usa para ver funcionando el sistema en la PC, es a través de Hiperterminal de Windows, se ajusta para “9600” bauds, bits de datos “8”, paridad “ninguna”, bit de stop “1”, control de flujo “ninguno”.

El propósito de todo esto es el de investigar el funcionamiento de un reloj de tiempo real (RTC), y quizás ayudar a alguien que necesita incorporar un RTC a su proyecto.

Fuentes:

DS1307 es el proyecto para descargar con el código fuente y circuito para simular.

Para bajar el compilador PIC-C version 4.023 .

Proteus 7.2 programa para simular circuitos.

Hoja de datos del DS1307.







2 comentarios:

Ediap dijo...

Buen trabajo amigo.

En micaso, necesito el código para el Arduino.

Enhorabuena. Saludos

Sistemas de Seguridad dijo...

Lamento pero no tengo el código para ese micro. Saludos