DS3231 RTC Module

Un module d'horloge est un module électronique généralement utilisé pour mesurer l'heure et la date. Il comprend généralement un oscillateur à quartz pour générer une référence temporelle précise, ainsi que des circuits de commande permettant de régler et d'ajuster l'heure.

Dans les cas où les exigences en matière d'horloge sont élevées, les modules d'horloge DS1302 et ds3231 peuvent répondre aux besoins de base. Je vais vous présenter ci-dessous la définition, le schéma des broches, les paramètres, les fonctions et la programmation du module d'horloge ds3231.

Qu'est-ce que le module RTC DS3231 ?

Le module RTC DS3231 est un module d'horloge temps réel (RTC) très répandu, couramment utilisé dans les projets électroniques. Il s'agit d'un petit dispositif peu coûteux qui offre des fonctions précises de chronométrage et de calendrier. Le module RTC DS3231 est basé sur la puce DS3231, une horloge temps réel extrêmement précise avec un oscillateur à quartz compensé en température intégré. Il est capable de fournir des informations sur l'heure et la date avec une précision allant jusqu'à ±2 ppm.

Le module RTC DS3231 est largement utilisé dans des applications telles que l'enregistrement de données, l'horodatage et les systèmes d'alarme. Il est également couramment utilisé dans les appareils électroniques qui nécessitent une mesure précise du temps, tels que les appareils photo, les enregistreurs audio et les contrôleurs industriels. Le module est facile à utiliser et peut être interfacé avec des microcontrôleurs tels que Arduino et Raspberry Pi.

Dans l'ensemble, le module RTC DS3231 est un module d'horloge fiable et précis qui est largement utilisé dans divers projets électroniques.

Paramètres du module RTC DS3231

ParameterValue
Size38mm (length), 22mm (width), 14mm (height)
Weight8g
Working voltage3.3-5.5V
Clock accuracy±2ppm from 0°C to +40°C; ±3.5ppm from 40°C to +85°C
Calendar alarm clocks2 programmable
Square wave outputYes
Real-time clock outputSeconds, minutes, hours, weekdays, dates, months and years
Leap year compensationUp to 2100
Temperature sensorBuilt-in with ±3°C accuracy
Memory chipAT24C32, 32K storage capacity, IIC bus interface
Memory chip featuresMaximum transmission speed 400KHz, address can be modified
Battery backupYes, for continuous timing
Operating temperatureCommercial: 0°C to +70°C; Industrial: -40°C to +85°C
Power consumptionLow
Other featuresAging correction register, RST output, push button reset input
UL approvedYes

Structure de la puce d'horloge DS3231

La puce d'horloge DS3231 se compose de huit modules, répartis en quatre groupes fonctionnels : TCXO, contrôle de l'alimentation, bouton de réinitialisation et RTC.

DS3231 RTC Chip Schematic Diagram
DS3231 RTC Chip Schematic Diagram

TCXO DS3231

Le TCXO comprend un capteur de température, un oscillateur et une logique de commande. Le contrôleur lit la sortie du capteur de température sur la puce, utilise une table de consultation pour déterminer la capacité requise, ajoute la correction de vieillissement à partir du registre AGE, puis définit le registre de sélection de capacité. Les nouvelles valeurs, y compris les modifications apportées au registre AGE, ne sont chargées que lorsque la température change ou lorsque la conversion de température initiée par l'utilisateur est terminée. La valeur de température est lue à la mise sous tension VCC, puis toutes les 64 secondes.

Commande d'alimentation DS3231

La fonction de contrôle de l'alimentation est assurée par la référence de tension compensée en température (VPF) et un circuit comparateur qui surveille le niveau VCC. Lorsque VCC est supérieur à VPF, le DS3231 est alimenté par VCC. Lorsque VCC est inférieur à VPF mais supérieur à VBAT, le DS3231 continue d'être alimenté par VCC. Lorsque VCC est inférieur à VPF et inférieur à VBAT, le DS3231 est alimenté par VBAT. Afin de protéger la batterie, l'oscillateur ne démarre pas lorsque VBAT est appliqué pour la première fois à l'appareil, sauf si VCC est chargé ou si une adresse I2C valide est écrite dans l'appareil. Le temps de démarrage typique de l'oscillateur est inférieur à 1 seconde. Après la mise sous tension de VCC ou l'écriture d'une adresse I2C valide, le dispositif mesure la température une fois et calibre l'oscillateur à l'aide de la valeur de correction calculée après environ 2 secondes. Une fois que l'oscillateur est en marche, il reste en fonctionnement tant que l'alimentation (VCC ou VBAT) est valide. Le dispositif mesure la température et calibre la fréquence de l'oscillateur toutes les 64 secondes.

Bouton de réinitialisation DS3231

Le DS3231 dispose d'une fonction de commutation par bouton reliée à la broche de sortie RST. Si le DS3231 n'est pas en cycle de réinitialisation, il surveille en permanence le front descendant du signal RST. Si une transition de front est détectée, le DS3231 termine la rebond de commutation en tirant RST vers le bas. Une fois le délai de la minuterie interne écoulé, le DS3231 continue de surveiller le signal RST. Si le signal reste à un niveau bas, le DS3231 continue de surveiller la ligne de signal pour détecter un front montant. Une fois le bouton relâché, le DS3231 force RST à un niveau bas et maintient tRST. RST peut également être utilisé pour indiquer des alarmes de panne de courant. Lorsque VCC est inférieur à VPF, un signal d'alarme de panne de courant interne est généré et RST est mis à l'état bas. Si l'oscillateur ne fonctionne pas lorsque VCC est chargé, tREC est ignoré et RST passe immédiatement à l'état haut.

Horloge et calendrier RTC DS3231

Les informations relatives à l'horloge et au calendrier peuvent être obtenues en lisant les octets de registre appropriés. Les données relatives à l'horloge et au calendrier peuvent être définies ou initialisées en écrivant les octets de registre appropriés. Le contenu des registres d'horloge et de calendrier est au format décimal codé en binaire (BCD). Le DS3231 fonctionne en mode 12 heures ou 24 heures. Le sixième bit du registre des heures définit la sélection du mode 12 ou 24 heures. Lorsque ce bit est élevé, le mode 12 heures est sélectionné. En mode 12 heures, le cinquième bit est le bit indicateur AM/PM, qui est logique élevé pour PM.

Registres internes et fonctions du DS3231

Les adresses de registre DS3231 sont comprises entre 00h et 12h. Elles sont utilisées pour stocker respectivement les secondes, les minutes, les heures, les semaines, les dates et les informations de réglage de l'alarme. Lors d'un accès multioctet, si l'adresse atteint 12h à la fin de l'espace RAM, un enroulement se produit. À ce moment-là, localisez la position de départ qui est l'unité 00h.

Les informations relatives à l'heure et au calendrier du DS3231 sont définies et initialisées en lisant les registres correspondants. Le tampon auxiliaire utilisateur sert à prévenir les erreurs possibles lors de la mise à jour des registres internes. Lors de la lecture des registres d'heure et de calendrier, le tampon utilisateur est dans n'importe quelle condition START. Ou synchronisez-le avec le registre interne lorsque le pointeur de registre revient à zéro.

Les informations relatives à l'heure sont lues à partir de ces registres auxiliaires, et l'horloge continue de fonctionner à ce moment-là, de sorte que la relecture des registres peut être évitée lorsque la mise à jour du registre principal se produit pendant l'opération de lecture. Prenons l'exemple du registre de contrôle (adresse 0EH) : il peut contrôler l'horloge en temps réel, le réveil et la sortie d'onde carrée.

Schéma des broches DS3231

DS3231 Pin Diagram
DS3231 Pin Diagram
Pin NameFunction
32 kHz32 kHz frequency output
VCCUsed for the DC pin of the main power supply
/INT/SQWLow-level active interrupt or square wave output
RSTReset pin
N.C.Indicates no connection; the external must be grounded
GNDGround
VBATBackup power input
SDASerial data input and output
SCLSerial clock input

Schéma fonctionnel du DS3231

DS3231 Block Diagram
DS3231 Block Diagram

Programmez le module RTC DS3231 avec Arduino Uno

Outils nécessaires :

  • Arduino Uno x1
  • Module RTC DS3231 x1
  • Cavalier (ligne DuPont)

Instructions de câblage

Connect DS3231 RTC Module with Arduino Uno
Pin on DS3231 RTC ModulePin on Arduino Uno
SCLA5
SDAA4
VCC5V
GNDGND

Installation de la bibliothèque RTClib

La bibliothèque utilisée dans cet exemple est RTClib écrite par Adafruit. Veuillez d'abord installer cette bibliothèque.

Projet – Charger les bibliothèques – Gérer les bibliothèques – Entrez « RTClib » dans la zone de recherche.

Programmation du DS3231

Tout d'abord, vous devez charger la bibliothèque RTClib que vous venez d'installer.

				
					#include "RTClib.h"
				
			

Ensuite, vous pouvez créer une instance DS3231 nommée rtc, et vous pouvez appeler la fonction RTC_DS3231.

				
					RTC_DS3231 rtc;
				
			

Les fonctions utilisées pour régler l'heure sont rtc.adjust, par exemple :

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

Il est utilisé pour rtc.now() obtenir l'heure du DS3231, et les données renvoyées sont de type DateTime, qui contiennent les données de l'année, du mois, du jour, de l'heure, de la minute et de la seconde, par exemple :

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

Code complet du programme

				
					// 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 Application

  • Systèmes d'acquisition de données
  • Systèmes de contrôle industriels
  • Batterie de secours
  • Surveillance de la température
  • Systèmes de contrôle d'accès
  • Dispositifs médicaux

Part à:

Retour en haut

Instant Quote