Módulo RTC DS3231

Índice

DS3231 RTC Module

DS3231 es un RTC I²C con oscilador de cristal compensado por temperatura (TCXO), alimentación de respaldo, dos alarmas y salida de onda cuadrada programable. Su dirección I²C fija es 0x68. El CI ofrece ±2 ppm entre 0 y +40 °C y ±3,5 ppm entre −40 y +85 °C; una placa módulo puede añadir EEPROM, LED, regulador o cargador que no pertenecen al DS3231.

¿Qué es el módulo RTC DS3231?

El módulo RTC DS3231 es un popular módulo de reloj en tiempo real (RTC) que se utiliza habitualmente en proyectos electrónicos. Se trata de un dispositivo pequeño y económico que proporciona funciones precisas de reloj y calendario. El módulo RTC DS3231 se basa en el chip DS3231, que es un RTC extremadamente preciso con un oscilador de cristal compensado por temperatura integrado. Es capaz de proporcionar información de hora y fecha con una precisión de hasta ±2 ppm.

El módulo DS3231 RTC se utiliza ampliamente en aplicaciones como el registro de datos, el sellado de tiempo y los sistemas de alarma. También se utiliza habitualmente en dispositivos electrónicos que requieren una medición precisa del tiempo, como cámaras, grabadoras de audio y controladores industriales. El módulo es fácil de usar y se puede conectar con microcontroladores como Arduino y Raspberry Pi.

En general, el módulo RTC DS3231 es un módulo de reloj fiable y preciso que se utiliza ampliamente en diversos proyectos electrónicos.

Parámetros del módulo RTC DS3231

Dato del CI DS3231Valor de la hoja de datos
Alimentación principal2,3–5,5 V
Entrada de respaldo2,3–5,5 V
Dirección RTC0x68 fija
Velocidad I²Chasta 400 kHz
Precisión±2 ppm (0 a +40 °C); ±3,5 ppm (−40 a +85 °C)
Salida de temperatura±3 °C
Funcionesdos alarmas; onda cuadrada programable; año bisiesto hasta 2100
Elementos propios del módulodimensiones, AT24C32, LED, regulador y cargador varían

Estructura del chip de reloj DS3231

El chip de reloj DS3231 consta de ocho módulos, divididos en cuatro grupos funcionales: TCXO, control de alimentación, botón de reinicio y RTC.

DS3231 RTC Chip Schematic Diagram
DS3231 RTC Chip Schematic Diagram

DS3231 TCXO

El TCXO incluye un sensor de temperatura, un oscilador y una lógica de control. El controlador lee la salida del sensor de temperatura en el chip, utiliza una tabla de consulta para determinar la capacitancia requerida, añade la corrección por envejecimiento del registro AGE y, a continuación, establece el registro de selección de capacitancia. Los nuevos valores, incluidos los cambios en el registro AGE, solo se cargan cuando cambia la temperatura o cuando se completa la conversión de temperatura iniciada por el usuario. El valor de la temperatura se lee al encender el VCC y, a continuación, cada 64 segundos.

Control de alimentación DS3231

Una referencia y un comparador supervisan VCC. Cuando VCC cae por debajo del umbral de fallo, se inhibe el acceso, el reloj conmuta a VBAT y RST pasa a nivel bajo. Al aplicar VBAT por primera vez el oscilador no arranca hasta aplicar VCC o escribir una dirección I²C válida; compruebe el indicador Oscillator Stop Flag tras eventos de alimentación.

Botón de reinicio DS3231

El DS3231 tiene una función de interruptor de botón conectada al pin de salida RST. Si el DS3231 no está en un ciclo de reinicio, supervisa continuamente el flanco descendente de la señal RST. Si se detecta una transición de flanco, el DS3231 completa el rebote del interruptor bajando RST. Una vez que el temporizador interno llega a su fin, el DS3231 continúa supervisando la señal RST. Si la señal permanece en un nivel bajo, el DS3231 continúa supervisando la línea de señal para detectar un flanco ascendente. Una vez que se suelta el botón, el DS3231 fuerza el RST a un nivel bajo y mantiene el tRST. El RST también se puede utilizar para indicar alarmas de fallo de alimentación. Cuando el VCC es inferior al VPF, se genera una señal de alarma de fallo de alimentación interna y el RST se pone en bajo. Si el oscilador no funciona cuando se carga el VCC, se omite el tREC y el RST pasa inmediatamente a alto.

Reloj y calendario RTC DS3231

La información del reloj y el calendario se puede obtener leyendo los bytes de registro correspondientes. Los datos del reloj y el calendario se pueden configurar o inicializar escribiendo los bytes de registro correspondientes. El contenido de los registros del reloj y el calendario está en formato decimal codificado en binario (BCD). El DS3231 funciona en modo de 12 o 24 horas. El sexto bit del registro de horas define la selección del modo de 12 o 24 horas. Cuando este bit es alto, se selecciona el modo de 12 horas. En el modo de 12 horas, el quinto bit es el bit indicador AM/PM, que es lógico alto para PM.

Registros internos y funciones del DS3231

Las direcciones de registro del DS3231 son 00h~12h, que se utilizan para almacenar segundos, minutos, horas, semanas, fechas e información de configuración de alarmas, respectivamente. Durante el acceso multibyte, si la dirección alcanza 12h al final del espacio RAM, se producirá un rebobinado. En ese momento, localice la posición inicial, que es la unidad 00h.

La información de hora y calendario del DS3231 se configura e inicializa leyendo los registros correspondientes. El búfer auxiliar del usuario se utiliza para evitar posibles errores cuando se actualizan los registros internos. Al leer los registros de hora y calendario, el búfer del usuario se encuentra en cualquier condición START. O sincronícelo con el registro interno cuando el puntero del registro vuelva a cero.

La información de la hora se lee desde estos registros auxiliares y el reloj sigue funcionando en ese momento, de modo que se puede evitar la relectura de los registros cuando se produce la actualización del registro principal durante la operación de lectura. Tomando como ejemplo el registro de control (dirección 0EH), este puede controlar el reloj en tiempo real, el despertador y la salida de onda cuadrada.

Diagrama de pines del DS3231

DS3231 Pin Diagram
DS3231 Pin Diagram
Nombre del pinFunción
32 kHzSalida de frecuencia de 32 kHz
VCCUtilizado para el pin de corriente continua de la fuente de alimentación principal
/INT/SQWInterrupción activa en nivel bajo o salida de onda cuadrada
RSTPin de reinicio (Reset)
N.C.Indica sin conexión; la parte externa debe conectarse a tierra
GNDTierra (Masa)
VBATEntrada de alimentación de respaldo
SDAEntrada y salida de datos en serie
SCLEntrada de reloj en serie

Diagrama de bloques del DS3231

DS3231 Block Diagram
DS3231 Block Diagram

Programa el módulo RTC DS3231 con Arduino Uno

Herramientas necesarias:

  • Arduino Uno x1
  • Módulo RTC DS3231 x1
  • Puente (línea DuPont)

Instrucciones para el cableado

Connect DS3231 RTC Module with Arduino Uno
Pin en el módulo RTC DS3231Pin en Arduino Uno
SCLA5
SDAA4
VCC5V
GNDGND

Instalación de la biblioteca RTClib

La biblioteca utilizada en este ejemplo es RTClib, escrita por Adafruit. Instale primero esta biblioteca.

Proyecto – Cargar bibliotecas – Administrar bibliotecas – Introduzca «RTClib» en el cuadro de búsqueda.

Programación del DS3231

En primer lugar, debe cargar la biblioteca RTClib que acaba de instalar.

				
					#include "RTClib.h"
				
			

Después de eso, puede crear una instancia DS3231 llamada rtc y llamar a la función de RTC_DS3231.

				
					RTC_DS3231 rtc;
				
			

Las funciones utilizadas para configurar la hora son rtc.adjust, por ejemplo:

				
					rtc.adjust(DateTime(to_year, to_month, to_day, to_hours, to_minute, to_second));
				
			

Se utiliza para obtener la hora del DS3231 mediante rtc.now(), y los datos devueltos son de tipo DateTime, que contiene los datos del año, mes, día, hora, minuto y segundo, por ejemplo:

				
					DateTime now = rtc.now();

  // Display the current time of DS3231 through the serial port output
  Serial.print(now.year(), DEC); // display the year in decimal
  Serial. print('/');
  Serial.print(now.month(), DEC);// Display the month in decimal
  Serial. print('/');
  Serial.print(now.day(), DEC);// Display the day in decimal
  Serial. print(" (");
  Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
  Serial. print(") ");
  Serial.print(now.hour(), DEC);// display in decimal
  Serial. print(':');
  Serial.print(now.minute(), DEC);// Display minutes in decimal
  Serial. print(':');
  Serial.print(now.second(), DEC);// Display seconds in decimal
  Serial. println();
				
			

Código completo del programa

				
					// by lingshunlab.com

// Load the library of DS3231
#include "RTClib.h"

// create rtc instance
RTC_DS3231 rtc;

String input_string; // Declare the variable input_string to store the data input by the serial port

// Declare a two-dimensional array variable daysOfTheWeek, which is used to match the corresponding week name through the index (index) of the array
char daysOfTheWeek[7][12] = {"Sunday",
                              "Monday",
                              "Tuesday",
                              "Wednesday",
                              "Thursday",
                              "Friday",
                              "Saturday"};

// get serial port data function
void GetSerialStuff(String& input_string) {
   String temp_string = ""; // Declare the variable temp_string to temporarily store the data input by the serial port
   while(Serial.available()) { // When the serial port has data, loop execution
     temp_string += (char)Serial.read(); // Combine the read serial data into the inStr variable one by one
     delay(2);
   }
   input_string = temp_string; // Assign the reference pointer variable to tempStr
}

void setup() {
   Serial.begin(9600);

   // Initialize rtc,
   if (! rtc.begin()) { // If initialization fails, then
     Serial.println("Couldn't find RTC");
     Serial. flush();
     abort(); // program stops
   }
}

void loop() {

   GetSerialStuff(input_string); // Get the data of the serial port
   if(input_string != "") { // If the serial port is not empty, then
     int to_year = input_string.substring(0, 4).toInt(); // Intercept year data from string and convert to int data type
     int to_month = input_string.substring(5, 7).toInt(); // Intercept the month data from the string and convert it to int data type
     int to_day = input_string.substring(8, 10).toInt(); // Intercept the day data from the string and convert it to int data type
     int to_hours = input_string.substring(11, 13).toInt(); // Intercept the hour data from the string and convert it to int data type
     int to_minute = input_string.substring(14, 16).toInt(); // Intercept minute data from the string and convert it to int data type
     int to_second = input_string.substring(17, 19).toInt(); // Intercept the second data from the string and convert it to int data type

     // Reset the time of the DS3231 module
     rtc.adjust(DateTime(to_year, to_month, to_day, to_hours, to_minute, to_second));
     delay(100);
   }

   // Get the time of DS3231
   DateTime now = rtc.now();

   // Display the current time of DS3231 through the serial port output
   Serial.print(now.year(), DEC); // display the year in decimal
   Serial. print('/');
   Serial.print(now.month(), DEC);// Display the month in decimal
   Serial. print('/');
   Serial.print(now.day(), DEC);// Display the day in decimal
   Serial. print(" (");
   Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
   Serial. print(") ");
   Serial.print(now.hour(), DEC);// display in decimal
   Serial. print(':');
   Serial.print(now.minute(), DEC);// Display minutes in decimal
   Serial. print(':');
   Serial.print(now.second(), DEC);// Display seconds in decimal
   Serial. println();

   // Display the temperature sensor data of DS3231 through the serial port output
   Serial. print("Temperature: ");
   Serial.print(rtc.getTemperature());
   Serial. println("C");

   delay(1000);
}
				
			

DS3231 Aplicación

  • Sistemas de adquisición de datos
  • Sistemas de control industrial
  • Batería de respaldo
  • Monitorización de temperatura
  • Sistemas de control de acceso
  • Dispositivos médicos

Notas Practicas: Notas de integración integradas para el módulo DS3231 RTC

Comprobaciones de módulos:Confirme el esquema exacto, el I²C pull-up, el voltaje lógico, la química de la batería y si hay un cargador. La EEPROM AT24C32, las dimensiones, el LED y el cargador varían y no forman parte del CI DS3231. Use 0x68 para RTC y busque por separado cualquier EEPROM agregada. Fuentes:Dispositivos analógicos DS3231, ,Ficha técnica Rev. 10yGuía de Adafruit.

Acerca del Autor

Picture of Aidan Taylor
Aidan Taylor

Soy Aidan Taylor y tengo más de 10 años de experiencia en el campo de la ingeniería inversa de PCB, el diseño de PCB y el desbloqueo de IC.

Comparte

Post Recomendado

¿Necesitas ayuda?

Scroll al inicio

Cotización