Você está na página 1de 8

Reloj de tiempo real DS1307

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:


RS1 RS0 FRECUENCIA
0 0 1 Hz
0 1 4.096 kHz
1 0 8.192 kHz
1 1 32.768 kHz


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:

15
16
5
6 3
7
1
2
4
8
PIC16F876
DS1307
4.7K
SDA
SCL
LED
4.7k
+5V
XTAL
32.768 KHz
BAT
3 VoIts
Litium
RC4
RC5


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

'Configura LCD

DEFINE LCD_DREG PORTB
DEFINE LCD_DBT 0
DEFINE LCD_BTS 4
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBT 4
DEFINE LCD_EREG PORTB
DEFINE LCD_EBT 5
DEFINE LCD_LNES 2

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.

I2CWRITE SDA,SCL,$D0,$00,[$00,$20,$10,$03,$26,$03,$08]
PAUSE 10

'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.

lectura:

I2CREAD SDA,SCL,$D0,$00,[seg,minu,hr,ds,dm,mes,an]
LCDOUT 254,128,HEX2 seg," ", HEX2 minu," ",HEX2 hr," ",HEX2 ds," ",HEX2 dm," "
LCDOUT 254,192,HEX2 mes," ",HEX2 an
GOTO lectura

END






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.

'RELOJ Y CALENDARO CON EL RTC DS1307

'Configura LCD

DEFINE LCD_DREG PORTB
DEFINE LCD_DBT 0
DEFINE LCD_BTS 4
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBT 4
DEFINE LCD_EREG PORTB
DEFINE LCD_EBT 5
DEFINE LCD_LNES 2

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

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
GOTO lectura

END




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.


'CONTROL CON EL RTC DS1307

'Configura LCD

DEFINE LCD_DREG PORTB
DEFINE LCD_DBT 0
DEFINE LCD_BTS 4
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBT 4
DEFINE LCD_EREG PORTB
DEFINE LCD_EBT 5
DEFINE LCD_LNES 2

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.

apaga:

LOW porta.3
GOTO lectura

END

Você também pode gostar