D.R. Alberto Valdez Minibotics Informacin complementaria Curso PBP 1 de 8
RELOJ DE TIEMPO REAL (RTC) DS1307
El circuito integrado DS1307 es un reloj calendario que procesa la informacin de los segundos, minutos, horas, da del mes, da de la semana, mes y ao. El ajuste para la duracin de los meses y aos bisiestos es realizado por el propio circuito y es vlido hasta el ao 2100. Contiene 56 localidades de memoria NVRAM (No voltil RAM). Tiene 2 terminales para conectarle una pila de litio para mantener operando el reloj an sin energa elctrica en sus terminales de alimentacin, con un consumo de 500 nA en esta condicin. Tambin puede generar una seal de salida de onda cuadrada a una frecuencia programable. La siguiente figura, muestra el diagrama de terminales.
Entre las terminales Vcc y GND se aplica el voltaje de alimentacin del circuito integrado, que es de 5 Volts.
La terminal V BAT recibe el voltaje de una pila de 3 Volts, se recomienda emplear una de litio por ser esta altamente eficiente y de larga duracin. Esta pila, mantiene activo el reloj an sin la energa aplicada en sus terminales de alimentacin. Si el voltaje de alimentacin aplicado entre Vcc y GND disminuye por debajo de 1.2 Volts, entra como respaldo la pila externa. Esta pila no hace funcionar la lectura y escritura al DS1307, pero mantiene operando el reloj en modo de bajo consumo de energa.
A travs de la terminal SQW/OUT, se obtiene la generacin de una seal de onda cuadrada de 1 Hz, 4 kHz, 8 kHz o 32 kHz. Este terminal es de tipo open drain (drenaje abierto), por lo que es necesario para su empleo conectar una resistencia de pull-up conectado al voltaje positivo.
Las terminales SCL (clock) y SDA (data), son las encargadas de enviar y recibir la informacin a travs del bus 2C. Debe conectarse una resistencia en pull-up de 4.7 k entre cada terminal y el voltaje positivo.
El DS1307 cuenta con una tabla de memoria, en donde se encuentran los registros que contienen el dato de la hora y fecha. El formato numrico de los datos es en cdigo BCD. De igual manera, se cuenta con un registro de control para la salida SQW/OUT y un rea de memoria libre NVRAM para el usuario.
Reloj de tiempo real DS1307 D.R. Alberto Valdez Minibotics Informacin complementaria Curso PBP 2 de 8
El mapa de memoria del RTC DS1307 es el siguiente:
LocaIidad DATO 00H SEGUNDOS 01H MNUTOS 02H HORAS 03H DA SEMANA 04H DA DEL MES 05H MES 06H AO 07H CONTROL 08H
3FH RAM 56 x 8
El registro 07H es de control para la terminal de salida SQW/OUT y se muestra a continuacin:
BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 07H OUT X X SQWE X X RS1 RS0
El bit SQWE habilita o deshabilita la generacin de la seal cuadrada por el terminal SQW/OUT, la frecuencia de esta seal puede ser definida mediante los bits RS1 y RS0 segn se muestra en la siguiente tabla:
Cuando el bit SQWE es igual a 0, la seal cuadrada no est habilitada, y el bit 7 (out) permite controlar el estado del terminal SQW/OUT, siendo este igual al contenido del bit out.
Para mayores detalles, se recomienda leer la hoja de datos del DS1307, de la firma DALLAS SEMCONDUCTOR.
Reloj de tiempo real DS1307 D.R. Alberto Valdez Minibotics Informacin complementaria Curso PBP 3 de 8
CONEXION DEL RTC DS1307 CON EL PIC16F876
Como ejemplo, se conectar el DS1307 al PC16F876 como se muestra en el siguiente diagrama:
Para un mejor manejo, se dispone de una tablilla electrnica que contiene montados los componentes involucrados en la operacin del reloj de tiempo real. En la siguiente figura se muestran las terminales de conexin de dicha tablilla:
BAT 3 V DS1307 X T A L LED G N D S D A S C L + 5
V MODULO RTC
Reloj de tiempo real DS1307 D.R. Alberto Valdez Minibotics Informacin complementaria Curso PBP 4 de 8
PROGRAMACION
Para enviar y recibir datos desde el PC hasta el DS1307, es necesario utilizar los comandos en Pic Basic Pro: I2CWRITE (envia datos al bus 2C) e I2CREAD (lee datos del bus 2C).
En ambos comandos, es necesario espeficar los pines del PC por donde se enviaran las seales SDA y SCL al bus 2C. De igual forma, es necesario enviar la direccin de control del dispositivo al que se va a enviar la informacin. Cada dispositivo 2C cuenta con una direccin especfica. Para el caso del DS1307 es la siguiente: %11010000, la cual, equivale al valor hexadecimal $D0. Seguido a esto, se coloca la direccin de memoria a la cual se quiere acceder en el DS1307, seguido entre corchetes, por los valores que se desean escribir o leer a partir de esa localidad, uno a uno y separados por comas.
En el siguiente ejemplo, se muestra como leer de la localidad $00 de la memoria del DS1307, equivalente a los segundos, y coloca el valor en la variable segundos:
I2CREAD portc.4, portc.5,$D0,$00,[segundos]
EJERCICIOS DE PROGRAMACION
Lo primero, es "poner a tiempo el reloj y calendario. Una vez puesto a tiempo, el DS1307 se programa en forma permanente. Es importante que para mantener activa la programacin, se encuentre conectada la pila en el circuito DS1307. Para ponerlo a tiempo, es necesario escribir en todas sus localidades de memoria, los datos correspondientes a la hora y fecha actual. El siguiente programa, realiza dicha programacin. Analcelo cuidadosamente.
Las primeras instrucciones son necesarias para operar el LCD as como las configuraciones de puertos de E/S.
'Programa para cargar datos iniciales al RTC DS1307
PAUSE 500 'Pausa para inicializar el LCD de 0.5 seg. LCDOUT 254,1 'Limpia pantalla del LCD.
Reloj de tiempo real DS1307 D.R. Alberto Valdez Minibotics Informacin complementaria Curso PBP 5 de 8
'Asignacin de variables
seg VAR BYTE 'Variable que almacenar los segundos del RTC. minu VAR BYTE 'Variable que almacenar los minutos del RTC. hr VAR BYTE 'Variable que almacenar las horas del RTC. ds VAR BYTE 'Variable que almacenar el da de la semana del RTC. dm VAR BYTE 'Variable que almacenar el da del mes del RTC. mes VAR BYTE 'Variable que almacenar el mes del RTC. an VAR BYTE 'Variable que almacenar el ao del RTC.
SDA VAR portc.4 'Se asigna a la variable SDA el bit 4 puerto C para el envo de datos i2c. SCL VAR portc.5 'Se asigna a la variable SCL el bit 5 puerto C para el envo de clock i2c.
'Configuracin de puertos
TRSA = %00010101 'RA0, RA2 y RA4 = Entradas, RA1,RA3 y RA5 = Salidas. TRSC = %00000000 'Port C es de salidas. ADCON1 = %10001110 'RA0 = analgica, RA1-RA5 = digitales. porta = 0 'Limpia el puerto A portc = 0 'Limpia el puerto C.
'Envia configuracin al registro 07h de la memoria del DS1307
'Escribe en el DS1307 a travs de los bits SDA y SCL (portc.4 y portc.5), el byte de control de dispositivo $D0 (11010000), en la localidad de memoria $07 (localidad de control terminal SQW/OUT del DS1307) la configuracin $10 (00010000).
I2CWRITE SDA,SCL,$D0,$07,[$10] PAUSE 10
'Carga los registros de hora y fecha al DS1307
'Los registros de tiempo y fecha se encuentran a partir de la localidad $00 hasta la $06. 'En este ejemplo, tiene valores de un tiempo y fecha determinados. Para realizar este ejemplo en 'tiempo real, es necesario cargar los datos reales al momento de que se captura este ejercicio.
'Rutina para leer los datos del DS1307 y exhibirlos en el LCD. 'El comando HEX2 convierte el valor ledo de los registros del DS1307 del codigo BCD al cdigo 'ASC que requiere el LCD.
Reloj de tiempo real DS1307 D.R. Alberto Valdez Minibotics Informacin complementaria Curso PBP 6 de 8
EJEMPLO DE APLICACION
El siguiente programa, muestra un reloj calendario en un display de LCD empleando el circuito DS1307. Para el buen funcionamiento de este programa, es indispensable primero poner a tiempo el reloj con el programa anterior.
PAUSE 500 'Pausa para inicializar el LCD de 0.5 seg. LCDOUT 254,1 'Limpia pantalla del LCD.
'definicin de variables seg VAR BYTE minu VAR BYTE hr VAR BYTE ds VAR BYTE dm VAR BYTE mes VAR BYTE an VAR BYTE SDA VAR portc.4 SCL VAR portc.5
'Configuracin de puertos
TRSA = %00010101 'RA0, RA2 y RA4 = Entradas, RA1,RA3 y RA5 = Salidas. TRSC = %00000000 'Port C es de Salidas. ADCON1 = %10001110 'RA0 = analgica, RA1-RA5 = digitales. porta = 0 'Limpia puerto A. portc = 0 'Limpia puerto C.
'Lee los datos del RTC DS1307 y los muestra en el LCD
Reloj de tiempo real DS1307 D.R. Alberto Valdez Minibotics Informacin complementaria Curso PBP 7 de 8
CONTROL CON EL RELOJ DE TIEMPO REAL
Una aplicacin importante del RTC es el poder controlar eventos en determinado tiempo y fecha. Esto es posible si empleamos los datos de los registros del DS1307 y comparamos su valor con otro determinado por el usuario. De esta forma, es posible lograr el control, en tiempo real, de mltiples procesos con aplicaciones tan diversas como puede ser en la industria, domtica, seguridad, etc.
El siguiente programa, muestra un ejemplo simple de encendido de una salida del PC a determinada hora durante el da, as como su apagado a otra determinada hora. El programa tiene como base el ejemplo anterior del reloj calendario.
PAUSE 500 'Pausa para inicializar el LCD de 0.5 seg. LCDOUT 254,1 'Limpia pantalla del LCD.
'Definicin de variables
seg VAR BYTE minu VAR BYTE hr VAR BYTE ds VAR BYTE dm VAR BYTE mes VAR BYTE an VAR BYTE SDA VAR portc.4 SCL VAR portc.5
'Configuracin de puertos
TRSA = %00010101 'RA0, RA2 y RA4 = Entradas, RA1,RA3 y RA5 = Salidas. TRSC = %00000000 'Port C es de Salidas. ADCON1 = %10001110 'RA0 = analgica, RA1-RA5 = digitales. porta = 0 'Limpia puerto A. portc = 0 'Limpia puerto C.
Reloj de tiempo real DS1307 D.R. Alberto Valdez Minibotics Informacin complementaria Curso PBP 8 de 8
'Lee los datos del RTC DS1307 y los muestra en el LCD
lectura:
I2CREAD SDA,SCL,$D0,$00,[seg,minu,hr,ds,dm,mes,an] LCDOUT 254,128," Hora: ",HEX2 hr,":", HEX2 minu,":",HEX2 seg," " LCDOUT 254,192," Fecha: ",HEX2 dm,"/",HEX2 mes,"/",hex2 an GOSUB condicion 'Checa las condiciones de control en esta subrutina. GOTO lectura
'Aqui agregamos todas las condiciones de comparacin deseadas para cualquiera de los registros 'del RTC, de tal forma, que cuando se cumplan manden el flujo del programa a otras rutinas para 'hacer diversas operaciones. Las instrucciones AND permiten que la condicin se forme con varios 'eventos al mismo tiempo. En este caso, los valores son de ejemplo. En la prctica, debern ser 'valores que correspondan a un tiempo deseado.
condicion:
IF hr = $10 AND minu = $24 AND seg = $10 THEN activa 'Si RTC = 10:24:10 IF hr = $10 AND minu = $25 AND seg = $25 THEN apaga 'Si RTC = 10:25:25 RETURN
'Cuando se cumple la primer condicin: hora 10:24:00 'Activa la salida RA3.
activa:
HIGH porta.3 GOTO lectura
'Cuando se cumple la primer condicin: hora 10:25:25 'Apaga la salida RA3.