Diseño con microcontroladores PIC18F y AVR en lenguajes MikroC y MikroBasic Docente: Ing.
Roger Guachalla Narváez
xoroger@[Link]
PRACTICA 09: RTC-I2C Reloj de Tiempo Real DS1307
1. Objetivos
Realizar un reloj sencillo con el PIC18F4550
Comprender el funcionamiento del reloj de tiempo real DS1307
Establecer la comunicación I2C entre el microcontrolador PIC18F4550 y el DS1307 para realizar un reloj
de tiempo real
2. Fundamento Teórico
RTC Reloj de Tiempo Real DS1307
¿Por qué es necesario un reloj-calendario en chip separado?
Tal y como lo muestra el Ejemplo de la práctica, no es difícil construir un completo RTC con un microcontrolador. La parte
del reloj es la más simple; solo ajustamos bien la temporización y listo. Luego implementamos los algoritmos del
calendario para reconocer los meses que tienen 28, 29, 30 ó 31 días, los algoritmos para realizar las compensaciones de
los años bisiestos, etc.
Los relojes-calendario no suelen ser el elemento principal en los dispositivos electrónicos, sino un aditamento que es
preferible que opere independientemente, incluso con su propia fuente de alimentación. Por ejemplo, el procesador de
la computadora PC podrá ser muy potente pero aun así el reloj del sistema va en otro chip y usa su propia batería. En
esta práctica se usará el reloj de Dallas Semiconductor con interface I2C DS1307.
Características
El DS1307 es uno de los RTC I2C más fáciles de usar debido a sus características que, con pocas variaciones, se repiten en
los modelos de la serie DS1337, DS1338, DS1339, DS1340, DS1375.
Computa los segundos, minutos, horas, días de la semana, días del mes, meses y años (de 2000 hasta 2099).
Aparte de los registros de hora y fecha del RTC, ofrece una SRAM de 56 bytes que se podrían usar como RAM
extendida del microcontrolador.
Provee por el pin SQW/OUT una señal cuadrada de frecuencia programable.
Alimentación alterna usando una batería. En ausencia o deficiencia de la alimentación principal de Vcc, el DS1307
pasa automáticamente a alimentarse de la batería.
Soporta el protocolo I2C (máxima frecuencia de reloj de 100 kHz)
Patillaje del RTC
SDA y SCL. Pines de interface I2C.
Vcc y GND. Pines de alimentación. Vcc es de +5 V.
X1 y X2. Pines para conectar un XTAL de cuarzo estándar externo de 32.768 KHz. Los capacitores para estabilizar
el circuito oscilador se incluyen internamente.
Vbat. Pin para conectar opcionalmente una batería de 2.0 a 3.5 V. Normalmente el DS1307 operará con su fuente
del pin Vcc. En ausencia de dicha tensión o cuando su nivel caiga por debajo de Vbat, el DS1307 empezará a
trabajar con la batería.
SQW/OUT. Por aquí el DS1307 puede sacar una onda cuadrada de cuatro frecuencias: 1 Hz, 4.096 kHz, 8.192 kHz
ó 32.768 kHz. Se configura con el registro de control. Es un pin de drenador abierto y por tanto necesitará de una
resistencia pull-up si se usa.
Diagrama de Bloques
Algunas de las partes que se aprecian en el esquema de arriba ya fueron mencionadas previamente.
Ahora citaremos los elementos más relevantes que nos servirán para entender el funcionamiento del DS1307:
Los registros de hora y fecha del RTC.
El registro de control. Configura la señal del pin SQW/OUT.
Los Registros de Hora y Fecha
El primer segmento de la SRAM corresponde a los registros de función del RTC y son conocidos como Timekeeping
registers. Allí se almacenan los datos de hora y fecha en formato BCD, como en la mayoría de los RTCs.
Como se ve, en general, el nibble bajo de cada registro contiene el dígito de las unidades y el nibble alto contiene el
dígito de las decenas de cada dato BCD. Las visibles excepciones son los nibbles altos de los segundos y de las horas.
En el registro de segundos el bit 7 es CH (Clock Halt o reloj detenido). El bit CH indica si el oscilador del DS1307 está en
marcha (0) o está detenido (1). Siendo de lectura o escritura, significa que:
Si escribimos un 0 en CH, iniciamos el DS1307.
Si escribimos un 1 en CH, detenemos el oscilador del DS1307 y su operación.
Sirve para ahorrar energía cuando no se le necesite.
El valor inicial de CH tras conectar la alimentación es 1. Es decir, si vemos un 1 en CH cuando no debería, tal vez sea
porque falló la alimentación y el dispositivo se “reinició”. La validez de los datos de fecha y hora, por tanto, no estará
garantizada.
En el registro de las horas el bit 6 (12/24) establece si el DS1307 operará en modo de 12 horas o de 24 horas si vale 1 ó 0,
respectivamente.
En modo 24 horas el bit 5 (10HR / AMPM) complementa el dígito de decenas de horas. En modo 12 horas el bit 5 señala
AM (0) o PM (1).
El Registro de Control
Además de los registros de fecha y hora, los RTCs cuentan con registros de control-status para las funcionalidades extra
que ofrecen: registros para programar alarmas (si las hubiera), registros para configurar algunas interrupciones, registros
para configurar otros timers (si los hubiera), etc.
El DS1307 solo tiene un registro de control, y de pocos bits efectivos. Su función básica es configurar la onda cuadrada
que saldrá por el pin SQW/OUT del DS1307.
Acceso a los Registros del DS1307
Todos los registros del DS1307, ya sean de fecha y hora, el de control o los registros de propósito general, se acceden de
igual forma. Primero escribimos en el puntero de registros la dirección del registro a acceder y luego efectuamos la
lectura o escritura del registro. Cada transferencia debe seguir las normas del protocolo I2C, empezando con un START y
terminando con un STOP.
Tras cada lectura o escritura el puntero de registros se incrementa automáticamente en 1 para apuntar al siguiente
registro, lo cual nos permite acceder a varios registros secuencialmente por cada transferencia.
En los siguientes diagramas se verá que leer y escribir los registros de un RTC es más simple que leer y escribir datos en
una EEPROM I2C, tanto en modo individual como en bloques. Después de todo, el protocolo I2C es único. Además, ahora
las direcciones de registros son de un byte, no hacen falta rutinas para comprobar la disponibilidad del dispositivo, etc.
El procedimiento descrito paso a paso es:
Enviar una Condición START
Enviar el byte de control (dirección de esclavo con R/W = 0, para escritura)
Enviar la dirección del primer (o único) registro a escribir, Register Address en la figura
Escribir uno o tantos registros como se desee, Register Data 0, 1, x en la figura
Enviar una Condición STOP
El procedimiento para leer uno varios registros del DS1307 es el siguiente:
El procedimiento descrito paso a paso es:
Enviar una condición START
Enviar el byte de control (dirección de esclavo con R/W = 0, para escritura)
Enviar la dirección del primer (o único) registro a leer, Register Address en la imagen
Enviar una condición START (llamada START repetida aunque sea lo mismo)
Enviar el byte de control (dirección de esclavo con R/W = 1, para lectura)
Leer uno o tantos registros como se desee. A cada registro leído se responde con un ACK, excepto al último, al
cual se le devuelve un NACK. Un único dato es el último
Enviar una condición STOP
Dirección de Esclavo del DS1307
Todos los RTC I2C de Dallas Semiconductor tienen la misma dirección de esclavo, que es fija e igual a 1101000. Sin opción
a reconfiguración, implica que solo se puede tener una de estas partes en un bus I2C.
Recordemos que la dirección de esclavo viaja en el primer byte o byte de control y va acompañado por el bit R/W para
indicar si los siguientes bytes serán de lectura (R/W = 1) o de escritura (R/W = 0).
3. Programa Ejemplo: Reloj - Diagrama Esquemático
Componentes Proteus:
4. Programa Ejemplo: Reloj – Código fuente MikroBasic
5. Reloj de Tiempo Real – Diagrama esquemático
Componentes Proteus:
6. Código Fuente en MIKROC PRO FOR PIC para el PIC18F4550
6. Procedimiento Experimental en Laboratorio
Primera Firma:
a. Convertir el Código Fuente del programa Ejemplo de MikroBasic a MikroC
b. Simular el circuito en Proteus
c. Armar y probar el circuito en protoboard
Segunda Firma:
a. Convertir el Código Fuente del programa de RTC I2c de MikroC a MikroBasic
b. Simular el circuito en Proteus
c. Armar y probar el circuito en protoboard
7. Informe impreso de laboratorio
Cada trabajo de investigación debe incluir:
Resumen escrito a mano (de un mínimo de 4 páginas)
Fuentes de Información (direcciones web, bibliografía)
Copias impresas de la información adquirida a través de las fuentes
A. Trabajo de Investigación: Reloj de Tiempo Real Paralelo DS1642
Teoría de funcionamiento
Características técnicas
Conexión de del RTC paralelo al microcontrolador
Secuencias de Lectura, Escritura
Aplicaciones
B. Para el programa realizado durante la obtención de la ‘Primera Firma’ del ‘Procedimiento experimental
en laboratorio’, imprimir la siguiente información:
i. Diagrama de Flujo del Programa
ii. Código Fuente en MikroC
C. Para el programa realizado durante la obtención de la ‘Segunda Firma’ del ‘Procedimiento
experimental en laboratorio’, imprimir la siguiente información:
i. Diagrama de Flujo del Programa
ii. Código Fuente en MikroBasic
D. Conclusiones