Select Page

Antes de comenzar con el RTC DS3231 en modulo, te recuerdo que existe otro modulo muy conocido RTC DS1307. Este módulo es mucho más preciso y más nuevo, es decir, no atrasa ni adelanta tanto por el predecesor y puede considerarse sustituto del DS1307. Vamos a responder la mama de las preguntas:

Qué es un reloj de tiempo real

Un RTC o un reloj de tiempo real, es un dispositivo, que guarda el tiempo, la hora y la fecha en tiempo real, es decir, lo mantiene actualizado a todo momento. Es perfecto para proyectos que contienen registro de datos datacenter), construcción de relojes, sellado de tiempo, temporizadores, control de accesos y alarmas.

Módulo DS3231 RTC

En el corazón del módulo se encuentra un chip RTC de bajo costo y extremadamente preciso de Maxim – DS3231. Gestiona todas las funciones de cronometraje y presenta una interfaz I2C simple de dos hilos que se puede conectar fácilmente con cualquier microcontrolador de su elección.

RTC DS3231 - Real Time Clock 1

El chip mantiene información de segundos, minutos, horas, día, fecha, mes y año. La fecha al final del mes se ajusta automáticamente para los meses con menos de 31 días, incluidas las correcciones por año bisiesto (válido hasta 2100).

El reloj funciona en formato de 24 horas o de 12 horas con un indicador AM / PM. También proporciona dos alarmas programables de hora del día.

La otra característica interesante de esta placa viene con un pin SQW, que genera una onda cuadrada a 1Hz, 4kHz, 8kHz o 32kHz y puede manejarse mediante programación. Esto puede usarse además como una interrupción debido a la condición de alarma en muchas aplicaciones basadas en el tiempo.

Compensación por Temperatura (TCXO)

La mayoría de los módulos RTC vienen con un cristal externo de 32 kHz para mantener el tiempo. Pero el problema con estos cristales es que la temperatura externa puede afectar su frecuencia de oscilación. Este cambio en la frecuencia puede ser insignificante, pero seguramente se suma a lo largo del tiempo.

Para evitar tales pequeñas variaciones en el cristal, el DS3231 es impulsado por un oscilador de cristal con compensación de temperatura de 32 kHz (TCXO). Es altamente inmune a los cambios de temperatura externos.

RTC DS3231 - Real Time Clock 2

TCXO está encapsulado dentro del chip RTC, lo que hace que todo el paquete sea voluminoso. Justo al lado del cristal integrado hay un sensor de temperatura.

Este sensor compensa los cambios de frecuencia agregando o eliminando tics de reloj para que el cronometraje permanezca en la pista.

Esa es la razón por la cual TCXO proporciona un reloj de referencia estable y preciso, y mantiene el RTC en una precisión de ± 2 minutos por año.

DS3231 Vs DS1307

La principal diferencia entre el DS3231 y el DS1370 es la precisión del cronometraje.

DS1307 viene con un cristal externo de 32 kHz para el cronometraje cuya frecuencia de oscilación se ve afectada fácilmente por la temperatura externa. Esto generalmente da como resultado que el reloj esté apagado alrededor de cinco minutos por mes.

RTC DS3231 - Real Time Clock 3

Sin embargo, el DS3231 es mucho más preciso, ya que viene con un oscilador de cristal compensado por temperatura interno (TCXO) que no se ve afectado por la temperatura, lo que lo hace preciso a unos pocos minutos por año como máximo.

DS1307 sigue siendo un RTC de gran valor y le sirve bien, pero para proyectos que requieren un cronometraje más preciso, se recomienda DS3231.

Batería CR2032 del DS3231

El DS3231 incorpora un zócalo de batería y mantiene un cronometraje preciso cuando se interrumpe la alimentación principal del dispositivo.

El circuito de detección de energía incorporado monitorea continuamente el estado de VCC para detectar fallas de energía y cambia automáticamente al suministro de respaldo. Por lo tanto, no debe preocuparse por los cortes de energía, su MCU aún puede hacer un seguimiento del tiempo.

RTC DS3231 - Real Time Clock 4

El lado inferior de la placa contiene un soporte de batería para monedas de litio de 20 mm 3V. Cualquier batería CR2032 puede caber bien.

Suponiendo que se utiliza una batería CR2032 completamente cargada con una capacidad de 220 mAh y el chip consume su mínimo de 3 µA, la batería puede mantener el RTC en funcionamiento durante un mínimo de 8 años sin una fuente de alimentación externa de 5V.

220mAh/3µA = 73333.34 horas= 3055.56 dias= 8.37 años

24C32 EEPROM

El módulo DS3231 RTC también viene con un chip EEPROM 24C32 de 32 bytes de Atmel que tiene ciclos de lectura y escritura ilimitados. Se puede usar para guardar configuraciones o realmente cualquier cosa.

RTC DS3231 - Real Time Clock 5

La EEPROM 24C32 utiliza la interfaz I2C para la comunicación y comparte el mismo bus I2C que DS3231.

La dirección I2C de la EEPROM se puede cambiar fácilmente con los tres puentes de soldadura A0, A1 y A2 en la parte posterior. Cada uno de estos se utiliza para codificar en la dirección. Si un puente está en cortocircuito con soldadura, eso establece la dirección.

RTC DS3231 - Real Time Clock 6

Según la hoja de datos del 24C32, estos 3 bits se colocan al final de la dirección I2C de 7 bits, justo antes del bit de lectura / escritura.

RTC DS3231 - Real Time Clock 7

Como hay 3 entradas de dirección, que pueden tomar 2 estados, ALTO / BAJO, por lo tanto, podemos crear 8 (23) combinaciones diferentes (direcciones).

De forma predeterminada, las 3 entradas de dirección estan en ALTO mediante pullups integrados, lo que proporciona a 24C32 una dirección I2C predeterminada de 1010111Binary o 0x57Hex.

Al acortar los puentes de soldadura, las entradas de dirección se descifran BAJA. Le permite configurar la dirección I2C de acuerdo con la siguiente tabla.

RTC DS3231 - Real Time Clock 8

Módulo DS3231 RTC PinOut

El módulo DS3231 RTC tiene un total de 6 pines que lo interconectan con el mundo exterior. Las conexiones son las siguientes:

RTC DS3231 - Real Time Clock 9

El pin de 33K emite el reloj de referencia estable (compensado por temperatura) y preciso.

El pin SQW genera una onda cuadrada agradable a 1Hz, 4kHz, 8kHz o 32kHz y puede manejarse mediante programación. Esto puede usarse además como una interrupción debido a la condición de alarma en muchas aplicaciones basadas en el tiempo.

SCL es un pin de reloj en serie para la interfaz I2C.

SDA es un pin de datos en serie para la interfaz I2C.

El pin VCC suministra energía para el módulo. Puede estar en cualquier lugar entre 3.3V a 5.5V.

GND es un pin de tierra.

Conectando DS3231 al Arduino

Las conexiones son bastante simples. Comience conectando el pin VCC a la salida de 5V en el Arduino y conecte GND a tierra.

Ahora nos quedamos con los pines que se utilizan para la comunicación I2C. Tenga en cuenta que cada placa Arduino tiene pines I2C diferentes que deben conectarse en consecuencia. En las placas Arduino con el diseño R3, el SDA (línea de datos) y SCL (línea de reloj) están en los encabezados de los pines cerca del pin AREF. También se conocen como A5 (SCL) y A4 (SDA).

Si tienes un Mega, ¡los pines son diferentes! Querrá usar el formato digital 21 (SCL) y 20 (SDA). Consulte la tabla a continuación para una comprensión rápida.

SCLSDA
Arduino UnoA5A4
Arduino NanoA5A4
Arduino Mega2120
Leonardo/Micro32

El siguiente diagrama le muestra cómo conectar todo.

RTC DS3231 - Real Time Clock 10

Librería RTClib para DS3231

La comunicación con un módulo RTC es un montón de trabajo. Afortunadamente, la biblioteca RTClib se escribió para ocultar todas las complejidades y poder emitir comandos simples para leer los datos RTC.

Para instalar la biblioteca, navegue hasta Sketch> Incluir biblioteca> Administrar bibliotecas … Espere a que Library Manager descargue el índice de bibliotecas y actualice la lista de bibliotecas instaladas.

RTC DS3231 - Real Time Clock 11
RTC DS3231 - Real Time Clock 12

Código Arduino DS3231

El siguiente sketch le dará una comprensión completa sobre cómo configurar / leer la fecha y la hora en el módulo DS3231 RTC y puede servir como base para experimentos y proyectos más prácticos.

#include <Wire.h>
#include "RTClib.h"

RTC_DS3231 rtc;

char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

void setup () 
{
  Serial.begin(9600);
  delay(3000); // wait for console opening

  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }

  if (rtc.lostPower()) {
    Serial.println("RTC lost power, lets set the time!");
	
	// Comment out below lines once you set the date & time.
    // Following line sets the RTC to the date & time this sketch was compiled
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
	
    // Following line sets the RTC with an explicit date & time
    // for example to set January 27 2017 at 12:56 you would call:
    // rtc.adjust(DateTime(2017, 1, 27, 12, 56, 0));
  }
}

void loop () 
{
    DateTime now = rtc.now();
    
    Serial.println("Current Date & Time: ");
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(" (");
    Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
    Serial.print(") ");
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
    
    Serial.println("Unix Time: ");
    Serial.print("elapsed ");
    Serial.print(now.unixtime());
    Serial.print(" seconds/");
    Serial.print(now.unixtime() / 86400L);
    Serial.println(" days since 1/1/1970");
    
    // calculate a date which is 7 days & 30 seconds into the future
    DateTime future (now + TimeSpan(7,0,0,30));
    
    Serial.println("Future Date & Time (Now + 7days & 30s): ");
    Serial.print(future.year(), DEC);
    Serial.print('/');
    Serial.print(future.month(), DEC);
    Serial.print('/');
    Serial.print(future.day(), DEC);
    Serial.print(' ');
    Serial.print(future.hour(), DEC);
    Serial.print(':');
    Serial.print(future.minute(), DEC);
    Serial.print(':');
    Serial.print(future.second(), DEC);
    Serial.println();
    
    Serial.println();
    delay(1000);
}

Leer la EEPROM

Para leer eeprom del modulo te recomendamos ir a este post.

Dónde comprar DS3231

PatagoniaTec

Amazon

Alibaba

A %d blogueros les gusta esto: