Modulo RTC DS3231

Indice

DS3231 RTC Module

DS3231 è un RTC I²C con oscillatore al quarzo compensato in temperatura (TCXO), alimentazione di backup, due allarmi e uscita a onda quadra programmabile. L’indirizzo I²C fisso è 0x68. Il CI è specificato a ±2 ppm da 0 a +40 °C e ±3,5 ppm da −40 a +85 °C; EEPROM, LED, regolatore o caricatore della scheda non fanno parte del DS3231.

Cos'è il modulo RTC DS3231?

Il modulo DS3231 RTC è un modulo Real-Time Clock (RTC) popolare comunemente utilizzato in progetti elettronici. È un dispositivo piccolo ed economico che fornisce funzioni accurate di misurazione del tempo e calendario. Il modulo DS3231 RTC si basa sul chip DS3231, che è un RTC estremamente preciso con un oscillatore a cristallo compensato in temperatura integrato. È in grado di fornire informazioni su data e ora con una precisione fino a ±2 ppm.

Il modulo DS3231 RTC è ampiamente utilizzato in applicazioni come la registrazione dei dati, la marcatura temporale e i sistemi di allarme. È anche comunemente utilizzato in dispositivi elettronici che richiedono una misurazione precisa del tempo, come fotocamere, registratori audio e controllori industriali. Il modulo è facile da usare e può essere interfacciato con microcontrollori come Arduino e Raspberry Pi.

Nel complesso, il modulo DS3231 RTC è un modulo orologio affidabile e preciso ampiamente utilizzato in vari progetti elettronici.

Parametri del modulo RTC DS3231

Voce del CI DS3231Valore del datasheet
Alimentazione principale2,3–5,5 V
Ingresso di backup2,3–5,5 V
Indirizzo RTC0x68 fisso
Velocità I²Cfino a 400 kHz
Precisione±2 ppm (0…+40 °C); ±3,5 ppm (−40…+85 °C)
Uscita temperatura±3 °C
Funzionidue allarmi; onda quadra; anno bisestile fino al 2100
Aggiunte specifiche del modulodimensioni, AT24C32, LED, regolatore e caricatore variano

Struttura del chip clock DS3231

Il chip clock DS3231 è costituito da otto moduli, suddivisi in quattro gruppi funzionali: TCXO, controllo dell’alimentazione, pulsante di reset e RTC.

DS3231 RTC Chip Schematic Diagram
DS3231 RTC Chip Schematic Diagram

TCXO DS3231

Il TCXO include un sensore di temperatura, un oscillatore e una logica di controllo. Il controller legge l’output del sensore di temperatura sul chip, utilizza una tabella di ricerca per determinare la capacità richiesta, aggiunge la correzione dell’invecchiamento dal registro AGE e quindi imposta il registro di selezione della capacità. I nuovi valori, comprese le modifiche al registro AGE, vengono caricati solo quando la temperatura cambia o quando la conversione di temperatura avviata dall’utente è completata. Il valore della temperatura viene letto all’accensione VCC e quindi ogni 64 secondi.

Controllo dell'alimentazione DS3231

Un riferimento e un comparatore monitorano VCC. Sotto la soglia di power-fail l’accesso viene inibito, il conteggio passa a VBAT e RST va basso. Alla prima applicazione della sola VBAT l’oscillatore attende VCC o la scrittura di un indirizzo I²C valido; controllare l’Oscillator Stop Flag dopo eventi di alimentazione.

Pulsante di reset DS3231

Il DS3231 ha una funzione di interruttore a pulsante collegata al pin di uscita RST. Se il DS3231 non è in un ciclo di reset, monitora continuamente il fronte di discesa del segnale RST. Se viene rilevata una transizione di fronte, il DS3231 completa il debounce dell’interruttore portando RST a un livello basso. Dopo che il timer interno è scaduto, il DS3231 continua a monitorare il segnale RST. Se il segnale rimane a un livello basso, il DS3231 continua a monitorare la linea del segnale per rilevare un fronte di salita. Una volta rilasciato il pulsante, il DS3231 forza RST a un livello basso e mantiene tRST. RST può anche essere utilizzato per indicare allarmi di mancanza di alimentazione. Quando VCC è inferiore a VPF, viene generato un segnale di allarme di mancanza di alimentazione interno e RST viene portato a un livello basso. Se l’oscillatore non funziona quando VCC è caricato, tREC viene saltato e RST diventa immediatamente alto.

Orologio e calendario RTC DS3231

Le informazioni sull’orologio e sul calendario possono essere ottenute leggendo i byte di registro appropriati. I dati di orologio e calendario possono essere impostati o inizializzati scrivendo i byte di registro appropriati. Il contenuto dei registri di orologio e calendario è in formato decimale codificato in binario (BCD). Il DS3231 funziona in modalità a 12 o 24 ore. Il sesto bit del registro delle ore definisce la selezione della modalità a 12 o 24 ore. Quando questo bit è alto, viene selezionata la modalità a 12 ore. Nella modalità a 12 ore, il quinto bit è l’indicatore AM/PM, che è logico alto per PM.

Registri e funzioni interni del DS3231

Gli indirizzi dei registri DS3231 sono 00h–12h, che vengono utilizzati per memorizzare rispettivamente secondi, minuti, ore, settimane, date e informazioni di impostazione dell’allarme. Durante l’accesso multi-byte, se l’indirizzo raggiunge 12h alla fine dello spazio RAM, si verificherà un avvolgimento. A questo punto, individua la posizione iniziale che è l’unità 00h.

Le informazioni sull’ora e sul calendario del DS3231 vengono impostate e inizializzate leggendo i registri corrispondenti. Il buffer ausiliario dell’utente viene utilizzato per prevenire possibili errori quando i registri interni vengono aggiornati. Quando si leggono i registri di ora e calendario, il buffer dell’utente è in qualsiasi condizione START. Oppure sincronizza con il registro interno quando il puntatore del registro torna a zero.

Le informazioni sull’ora vengono lette da questi registri ausiliari e l’orologio continua a funzionare in questo momento, in modo che la rilettura dei registri possa essere evitata quando l’aggiornamento del registro principale si verifica durante l’operazione di lettura. Prendendo come esempio il registro di controllo (indirizzo 0EH), può controllare l’orologio in tempo reale, l’allarme e l’uscita a onda quadra.

Schema dei pin del DS3231

DS3231 Pin Diagram
DS3231 Pin Diagram
Nome del pinFunzione
32 kHzUscita in frequenza a 32 kHz
VCCUtilizzato per il pin CC dell'alimentazione principale
/INT/SQWInterruzione attiva a livello basso o uscita ad onda quadra
RSTPin di reset
N.C.Indica nessuna connessione; l'esterno deve essere collegato a massa
GNDMassa (GND)
VBATIngresso alimentazione di backup
SDAIngresso e uscita dati seriali
SCLIngresso clock seriale

Schema a blocchi del DS3231

DS3231 Block Diagram
DS3231 Block Diagram

Programma il modulo RTC DS3231 con Arduino Uno

Strumenti richiesti:

  • Arduino Uno x1
  • Modulo RTC DS3231 x1
  • Jumper (linea DuPont)

Istruzioni di cablaggio

Connect DS3231 RTC Module with Arduino Uno
Pin sul modulo RTC DS3231Pin su Arduino Uno
SCLA5
SDAA4
VCC5V
GNDGND

Installazione della libreria RTClib

La libreria utilizzata in questo esempio è RTClib scritta da Adafruit, si prega di installare prima questa libreria.

Progetto – Carica librerie – Gestisci librerie – Inserisci “RTClib” nella casella di ricerca

Programmazione del DS3231

Innanzitutto, è necessario caricare la libreria RTClib appena installata.

				
					#include "RTClib.h"
				
			

Dopo di che, è possibile creare un’istanza DS3231 denominata rtc e chiamare la funzione di RTC_DS3231

				
					RTC_DS3231 rtc;
				
			

Le funzioni utilizzate per impostare l’ora sono rtc.adjust, ad esempio:

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

Viene utilizzato per rtc.now() ottenere l’ora del DS3231 e i dati restituiti sono di tipo DateTime, che contiene i dati di anno, mese, giorno, ora, minuto e secondo, ad esempio:

				
					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();
				
			

Codice del programma completo

				
					// 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);
}
				
			

Applicazione DS3231

  • Sistemi di acquisizione dati
  • Sistemi di controllo industriale
  • Backup della batteria
  • Monitoraggio della temperatura
  • Sistemi di controllo accessi
  • Dispositivi medici

Nota Pratiche: Note di integrazione incorporata per modulo RTC DS3231

Controlli del modulo:Verificare Schema, Pull-Up I²C, Tensione Logica, Chimica della Batteria e Presenza del Caricatore. AT24C32, DIMENSIONI, LED E COMPONENTI DI CARIANO E NON APPARTENGNO AL CI DS3231. USARE 0x68 PER L’RTC E CERcare separatamente l’eventtuale eeprom. Fonti:Dispositivi analogici DS3231,Scheda tecnica Rev. 10EGuida Adafruit.

Informazioni sull'autore

Picture of Aidan Taylor
Aidan Taylor

Sono Aidan Taylor e ho oltre 10 anni di esperienza nel campo del reverse engineering PCB, progettazione di PCB e sblocco IC.

Condividi

Post consigliati

Hai bisogno di aiuto?

Torna in alto

Instant Quote

Preventivo immediato