DS3231 é um RTC I²C com oscilador de cristal compensado por temperatura (TCXO), alimentação de backup, dois alarmes e saída de onda quadrada programável. O endereço I²C fixo é 0x68. O CI oferece ±2 ppm de 0 a +40 °C e ±3,5 ppm de −40 a +85 °C; EEPROM, LED, regulador ou carregador de uma placa módulo não fazem parte do 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
| Item do CI DS3231 | Valor do datasheet |
|---|---|
| Alimentação principal | 2,3–5,5 V |
| Entrada de backup | 2,3–5,5 V |
| Endereço RTC | 0x68 fixo |
| Velocidade I²C | até 400 kHz |
| Precisão | ±2 ppm (0 a +40 °C); ±3,5 ppm (−40 a +85 °C) |
| Saída de temperatura | ±3 °C |
| Funções | dois alarmes; onda quadrada; ano bissexto até 2100 |
| Adições específicas do módulo | dimensões, AT24C32, LED, regulador e carregador variam |
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
Uma referência e um comparador monitoram VCC. Abaixo do limiar de falha, o acesso é inibido, a cronometragem passa para VBAT e RST vai a nível baixo. Na primeira aplicação apenas de VBAT, o oscilador espera VCC ou a escrita de um endereço I²C válido; verifique o Oscillator Stop Flag após eventos de alimentação.
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

| Nome do pino | Função |
|---|---|
| 32 kHz | Saída de frequência de 32 kHz |
| VCC | Usado para o pino CC da fonte de alimentação principal |
| /INT/SQW | Interrupção ativa em nível baixo ou saída de onda quadrada |
| RST | Pino de reinicialização (Reset) |
| N.C. | Indica sem conexão; a parte externa deve ser aterrada |
| GND | Terra (GND) |
| VBAT | Entrada de alimentação de backup |
| SDA | Entrada e saída de dados em série |
| SCL | Entrada de clock em série |
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

| Pino no módulo RTC DS3231 | Pino no 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
Notas Praticas: notas de integração incorporadas para o módulo DS3231 RTC
Verificações do Módulo:Confirme o Esquema, Pull-ups I²C, Tensão Lógica, Química da Bateria e Presenta de Carregador. AT24C32, Dimensões, LED e Carregador Varam por placa e Não Pertencem ao Ci DS3231. Use 0x68 para o rtc e procure separadodamente uma eeprom adicional. Fontes:Dispositivos analógicos DS3231,Folha de dados Rev. 10eGuia da Adafruit.



