Um módulo de relógio é um módulo eletrônico, normalmente usado para medir a hora e a data, geralmente inclui um oscilador de cristal para gerar uma referência de tempo precisa e possui alguns circuitos de controle para definir e ajustar a hora.
Em ocasiões com requisitos elevados de relógio, os módulos de relógio DS1302 e ds3231 podem atender às necessidades básicas. A seguir, apresentarei a definição, o diagrama de pinos, os parâmetros, as funções e a programação do módulo de relógio ds3231.
O que é o módulo RTC DS3231?
O módulo DS3231 RTC é um módulo de relógio em tempo real (RTC) popular, comumente usado em projetos eletrônicos. É um dispositivo pequeno e de baixo custo que fornece funções precisas de relógio e calendário. O módulo DS3231 RTC é baseado no chip DS3231, que é um RTC extremamente preciso com um oscilador de cristal integrado com compensação de temperatura. Ele é capaz de fornecer informações de hora e data com uma precisão de até ±2 ppm.
O Módulo RTC DS3231 é amplamente utilizado em aplicações como registro de dados, marcação de tempo e sistemas de alarme. Também é comumente usado em dispositivos eletrônicos que requerem medição precisa do tempo, como câmeras, gravadores de áudio e controladores industriais. O módulo é fácil de usar e pode ser conectado a microcontroladores como Arduino e Raspberry Pi.
No geral, o módulo DS3231 RTC é um módulo de relógio confiável e preciso, amplamente utilizado em vários projetos eletrônicos.
Parâmetros do módulo RTC DS3231
| Parameter | Value |
|---|---|
| Size | 38mm (length), 22mm (width), 14mm (height) |
| Weight | 8g |
| Working voltage | 3.3-5.5V |
| Clock accuracy | ±2ppm from 0°C to +40°C; ±3.5ppm from 40°C to +85°C |
| Calendar alarm clocks | 2 programmable |
| Square wave output | Yes |
| Real-time clock output | Seconds, minutes, hours, weekdays, dates, months and years |
| Leap year compensation | Up to 2100 |
| Temperature sensor | Built-in with ±3°C accuracy |
| Memory chip | AT24C32, 32K storage capacity, IIC bus interface |
| Memory chip features | Maximum transmission speed 400KHz, address can be modified |
| Battery backup | Yes, for continuous timing |
| Operating temperature | Commercial: 0°C to +70°C; Industrial: -40°C to +85°C |
| Power consumption | Low |
| Other features | Aging correction register, RST output, push button reset input |
| UL approved | Yes |
Estrutura do chip de relógio DS3231
O chip de relógio DS3231 consiste em oito módulos, divididos em quatro grupos funcionais: TCXO, controle de energia, botão de reinicialização e RTC.

DS3231 TCXO
O TCXO inclui um sensor de temperatura, um oscilador e uma lógica de controle. O controlador lê a saída do sensor de temperatura no chip, usa uma tabela de consulta para determinar a capacitância necessária, adiciona a correção de envelhecimento do registro AGE e, em seguida, define o registro de seleção de capacitância. Novos valores, incluindo alterações no registro AGE, só são carregados quando a temperatura muda ou quando a conversão de temperatura iniciada pelo usuário é concluída. O valor da temperatura é lido na inicialização do VCC e, em seguida, a cada 64 segundos.
Controle de energia DS3231
A função de controle de energia é fornecida pela referência de tensão compensada por temperatura (VPF) e um circuito comparador que monitora o nível VCC. Quando VCC é maior que VPF, o DS3231 é alimentado por VCC. Quando VCC é menor que VPF, mas maior que VBAT, o DS3231 ainda é alimentado por VCC. Quando o VCC é inferior ao VPF e inferior ao VBAT, o DS3231 é alimentado pelo VBAT. Para proteger a bateria, o oscilador não inicia quando o VBAT é aplicado pela primeira vez ao dispositivo, a menos que o VCC seja carregado ou um endereço I2C válido seja gravado no dispositivo. O tempo típico de inicialização do oscilador é inferior a 1 segundo. Após a inicialização do VCC ou a gravação de um endereço I2C válido, o dispositivo mede a temperatura uma vez e calibra o oscilador usando o valor de correção calculado após cerca de 2 segundos. Uma vez que o oscilador está funcionando, ele permanece em operação enquanto a alimentação (VCC ou VBAT) for válida. O dispositivo mede a temperatura e calibra a frequência do oscilador a cada 64 segundos.
Botão de reinicialização DS3231
O DS3231 possui uma função de botão ligada ao pino de saída RST. Se o DS3231 não estiver em um ciclo de reinicialização, ele monitora continuamente a borda descendente do sinal RST. Se uma transição de borda for detectada, o DS3231 completa o rebote do botão puxando o RST para baixo. Após o tempo limite do temporizador interno, o DS3231 continua a monitorar o sinal RST. Se o sinal permanecer em um nível baixo, o DS3231 continua a monitorar a linha de sinal para detectar uma borda ascendente. Assim que o botão é solto, o DS3231 força o RST para um nível baixo e mantém o tRST. O RST também pode ser usado para indicar alarmes de falha de energia. Quando o VCC é inferior ao VPF, um sinal interno de alarme de falha de energia é gerado e o RST é puxado para baixo. Se o oscilador não funcionar quando o VCC é carregado, o tREC é ignorado e o RST imediatamente fica alto.
DS3231 Relógio e Calendário RTC
As informações do relógio e do calendário podem ser obtidas através da leitura dos bytes de registro apropriados. Os dados do relógio e do calendário podem ser definidos ou inicializados através da gravação dos bytes de registro apropriados. O conteúdo dos registros do relógio e do calendário está no formato decimal codificado em binário (BCD). O DS3231 funciona no modo de 12 ou 24 horas. O sexto bit do registro de horas define a seleção do modo de 12 ou 24 horas. Quando este bit está alto, o modo de 12 horas é selecionado. No modo de 12 horas, o quinto bit é o bit indicador AM/PM, que é lógico alto para PM.
Registros internos e funções do DS3231
Os endereços de registro do DS3231 são 00h~12h, que são usados para armazenar segundos, minutos, horas, semanas, datas e informações de configuração do alarme, respectivamente. Durante o acesso multibyte, se o endereço atingir 12h no final do espaço da RAM, ocorrerá um enrolamento. Nesse momento, localize a posição inicial, que é a unidade 00h.
As informações de hora e calendário do DS3231 são definidas e inicializadas pela leitura dos registros correspondentes. O buffer auxiliar do usuário é usado para evitar possíveis erros quando os registros internos são atualizados. Ao ler os registros de hora e calendário, o buffer do usuário está sob qualquer condição START. Ou sincronize com o registro interno quando o ponteiro do registro retornar a zero.
As informações de hora são lidas desses registros auxiliares, e o relógio continua a funcionar neste momento, de modo que a releitura dos registros pode ser evitada quando a atualização do registro principal ocorre durante a operação de leitura. Tomando o registro de controle (endereço 0EH) como exemplo, ele pode controlar o relógio em tempo real, o despertador e a saída de onda quadrada.
Diagrama dos pinos do DS3231

| Pin Name | Function |
|---|---|
| 32 kHz | 32 kHz frequency output |
| VCC | Used for the DC pin of the main power supply |
| /INT/SQW | Low-level active interrupt or square wave output |
| RST | Reset pin |
| N.C. | Indicates no connection; the external must be grounded |
| GND | Ground |
| VBAT | Backup power input |
| SDA | Serial data input and output |
| SCL | Serial clock input |
Diagrama de blocos do DS3231

Programa DS3231 Módulo RTC com Arduino Uno
Ferramentas necessárias:
- Arduino Uno x1
- Módulo RTC DS3231 x1
- Jumper (linha DuPont)
Instruções para transferência bancária

| Pin on DS3231 RTC Module | Pin on Arduino Uno |
|---|---|
| SCL | A5 |
| SDA | A4 |
| VCC | 5V |
| GND | GND |
Instalando a biblioteca RTClib
A biblioteca utilizada neste exemplo é a RTClib, escrita pela Adafruit. Instale primeiro esta biblioteca.
Projeto – Carregar bibliotecas – Gerenciar bibliotecas – Digite "RTClib" na caixa de pesquisa
Programação do DS3231
Primeiro, você precisa carregar a biblioteca RTClib que acabou de instalar.
#include "RTClib.h"
Depois disso, você pode criar uma instância DS3231 chamada rtc e chamar a função RTC_DS3231.
RTC_DS3231 rtc;
As funções utilizadas para definir a hora são rtc.adjust, por exemplo:
rtc.adjust(DateTime(to_year, to_month, to_day, to_hours, to_minute, to_second));
É usado para rtc.now() obter a hora do DS3231, e os dados retornados são do tipo DateTime, que contém os dados do ano, mês, dia, hora, minuto e segundo, por exemplo:
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 do 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 Aplicação
- Sistemas de aquisição de dados
- Sistemas de controle industrial
- Bateria de reserva
- Monitoramento de temperatura
- Sistemas de controle de acesso
- Dispositivos médicos




