Módulo DS3231 RTC

Índice

DS3231 RTC Module

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 DS3231Valor do datasheet
Alimentação principal2,3–5,5 V
Entrada de backup2,3–5,5 V
Endereço RTC0x68 fixo
Velocidade I²Caté 400 kHz
Precisão±2 ppm (0 a +40 °C); ±3,5 ppm (−40 a +85 °C)
Saída de temperatura±3 °C
Funçõesdois alarmes; onda quadrada; ano bissexto até 2100
Adições específicas do módulodimensõ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 RTC Chip Schematic Diagram
DS3231 RTC Chip Schematic Diagram

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

DS3231 Pin Diagram
DS3231 Pin Diagram
Nome do pinoFunção
32 kHzSaída de frequência de 32 kHz
VCCUsado para o pino CC da fonte de alimentação principal
/INT/SQWInterrupção ativa em nível baixo ou saída de onda quadrada
RSTPino de reinicialização (Reset)
N.C.Indica sem conexão; a parte externa deve ser aterrada
GNDTerra (GND)
VBATEntrada de alimentação de backup
SDAEntrada e saída de dados em série
SCLEntrada de clock em série

Diagrama de blocos do DS3231

DS3231 Block Diagram
DS3231 Block Diagram

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

Connect DS3231 RTC Module with Arduino Uno
Pino no módulo RTC DS3231Pino no Arduino Uno
SCLA5
SDAA4
VCC5V
GNDGND

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.

Sobre o autor

Picture of Aidan Taylor
Aidan Taylor

Sou Aidan Taylor e tenho mais de 10 anos de experiência na área de engenharia reversa de PCB, design de PCB e desbloqueio de IC.

Compartilhar

Postagem recomendada

Precisa de ajuda?

Rolar para cima

Instant Quote

Cotação instantânea