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
Verificações técnicas para DS3231 RTC module schematic and I2C integration
Antes de usar DS3231 RTC module schematic and I2C integration em PCB, firmware, reparo ou validação, confirme os detalhes que normalmente determinam se o projeto funciona de forma confiável.
Checklist de projeto e diagnóstico
| Área | O que verificar | Por que importa |
|---|---|---|
| I2C bus | Verify SDA, SCL, pull-up values, address conflicts, and bus voltage before connecting the module | RTC communication problems usually come from pull-ups or mixed-voltage I2C wiring |
| Backup power | Check coin-cell polarity, charging circuit presence, battery type, and leakage current | Some DS3231 modules include charger parts that are unsafe for non-rechargeable cells |
| Timing validation | Test oscillator status, temperature compensation, alarm pins, and drift against a known time reference | A clock that reads over I2C can still be inaccurate if backup or oscillator conditions are wrong |
Essas verificações conectam a intenção de busca sobre DS3231 module schematic a decisões reais de placa, seleção de componentes e análise de falhas.
Notas praticas: Embedded Integration Notes for DS3231 RTC Module
Use estas notas antes de aplicar as informacoes em um projeto real.
Pontos de verificacao
- Verify interface protocol, logic level, pull-up or termination needs, startup timing, and power-state behavior before connecting the module to a host MCU.
- Budget peak current as well as average current; radios, displays, motors, and sensors often draw short pulses that reset weak regulators.
- Keep decoupling close to module power pins, follow antenna or sensor placement restrictions, and expose test points for field debugging.



