El chip DS1307 (datasheet) se resume como si fuera un reloj, que solo necesita una batería de 3v tipo boton de 210mA/h y mantiene la hora incluso cuando no hay energía de 5v. Además posee un reloj/calendario de baja potencia, memoria no-volatil y brinda: segundos, minutos, horas, días, semana, mes y año. Utiliza el protocolo I2C para comunicarse con cualquier microcontrolador, lo cual lo vuelve muy versátil.
Existen muchos microntroladores que utilizando temporizadores pueden realizar y obtener intervalos de tiempo como: segundos, minutos y horas. Pero lo que ofrece este chip DS1307 es brindar tiempo/fecha más detallada como: «11 de Junio del 2015 – 18:35:05s», detectar cuantos días tiene cada mes, que año es bisiesto e incluso mantener la hora aún cuando se corte la energía. La comunicación con este chip es a través del protocolo I2C que muchos microcontroladores poseen, pero para ello es necesario conocer procedimientos, comandos y registros de este chip DS1307. A continuación se muestra las características generales y los registros involucrados.
CARACTERÍSTICAS TÉCNICAS DEL DS1307:
- RTC cuenta: segundos, minutos, horas, fecha de Mes, mes, día de la semana y año con año bisiesto.
- 56 Bytes de memoria NO-Volátil.
- Señal de salida den Onda Cuadrada programable.
- Detección de fallo de Energía Automático.
- Consumo: <500nA en batería.
- Rango de temperatura Industrial -40°c hasta +85°c.
- Interfaz I2C de 100Khz y 400Khz.
REGISTROS:
Para poder leer y escribir en el DS1307 es necesario seguir paso a paso el protocolo I2C, pero gracias a que existen muchos ejemplos en Arduino e incluso librerías con la cual solo se necesita llamar a la función especifica. En el siguiente ejemplo se resume como leer tiempo y fecha a través de la libreria RTClib.
EJEMPLO
#include
#include "RTClib.h"
// Crea la clase RTC para acceder a los segundos, minutos....
RTC_DS1307 RTC;
void setup () {
Serial.begin(57600); // Configura el Monitor Serial.
Wire.begin(); // Configura e inicializa el Protocolo I2C.
RTC.begin(); // Inicializa el RTC - DS1307.
}
void loop () {
DateTime now = RTC.now(); // Lee el tiempo Actual del RTC.
Serial.print(now.year(), DEC); // Escribe el Año.
Serial.print('/');
Serial.print(now.month(), DEC); // Escribe el Mes.
Serial.print('/');
Serial.print(now.day(), DEC); // Escribe el Día.
Serial.print(' ');
Serial.print(now.hour(), DEC); // Escribe el Hora.
Serial.print(':');
Serial.print(now.minute(), DEC); // Escribe el Minuto.
Serial.print(':');
Serial.print(now.second(), DEC); // Escribe el Segundo.
Serial.println();
delay(1000);
}
Deja una respuesta
Lo siento, debes estar conectado para publicar un comentario.