Table des matières:
- Étape 1: Connecter votre module à un Arduino
- Étape 2: Lecture et écriture de l'heure à partir de votre module RTC
- Étape 3:
Vidéo: Utilisation des modules d'horloge temps réel DS1307 et DS3231 avec Arduino : 3 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:07
Nous continuons à recevoir des demandes sur la façon d'utiliser les modules d'horloge en temps réel DS1307 et DS3231 avec Arduino de diverses sources - c'est donc la première d'un didacticiel en deux parties sur la façon de les utiliser. Pour ce tutoriel Arduino, nous avons deux modules d'horloge en temps réel à utiliser, l'un basé sur le Maxim DS1307 (le module carré) et le DS3231 (le module rectangulaire).
Il existe deux différences principales entre les circuits intégrés des modules d'horloge en temps réel, à savoir la précision de l'heure. Le DS1307 utilisé dans le premier module fonctionne très bien, cependant la température externe peut affecter la fréquence du circuit oscillateur qui pilote le compteur interne du DS1307.
Cela peut sembler un problème, mais il en résulte généralement que l'horloge est décalée d'environ cinq minutes par mois. Le DS3231 est beaucoup plus précis, car il possède un oscillateur interne qui n'est pas affecté par des facteurs externes - et est donc précis jusqu'à quelques minutes par an au maximum. Si vous avez un module DS1307, ne vous sentez pas mal, c'est toujours une carte de grande valeur et vous servira bien. Avec les deux modules, une batterie de secours est nécessaire.
C'est une bonne idée d'acheter une nouvelle pile CR2032 et de l'adapter au module. En plus de garder une trace de l'heure et de la date, ces modules disposent également d'une petite EEPROM, d'une fonction d'alarme (DS3231 uniquement) et de la possibilité de générer une onde carrée de différentes fréquences - tout cela fera l'objet d'un deuxième tutoriel.
Étape 1: Connecter votre module à un Arduino
Les deux modules utilisent le bus I2C, ce qui rend la connexion très facile.
Vous devrez d'abord identifier les broches de votre Arduino ou des cartes compatibles utilisées pour le bus I2C - elles seront appelées SDA (ou données) et SCL (ou horloge). Sur les cartes Arduino Uno ou compatibles, ces broches sont A4 et A5 pour les données et l'horloge; Sur l'Arduino Mega, les broches sont D20 et D21 pour les données et l'horloge; Et si vous utilisez un Pro Mini compatible, les broches sont A4 et A5 pour les données et l'horloge, qui sont parallèles aux broches principales.
module DS1307
Si vous avez le module DS1307, vous devrez souder les fils à la carte ou souder certaines broches d'en-tête en ligne afin de pouvoir utiliser des câbles de connexion. Connectez ensuite les broches SCL et SDA à votre Arduino, et la broche Vcc à la broche 5V et GND à GND.
module DS3231
La connexion de ce module est facile car les broches d'en-tête sont installées sur la carte en usine. Vous pouvez simplement exécuter à nouveau des câbles de raccordement de SCL et SDA à l'Arduino et à nouveau des broches Vcc et GND du module aux 5V ou 3,3. V et GND de votre carte. Cependant, ceux-ci sont dupliqués de l'autre côté pour souder vos propres fils. Ces deux modules ont les résistances pull-up requises, vous n'avez donc pas besoin d'ajouter les vôtres. Comme tous les appareils connectés au bus I2C, essayez de réduire au minimum la longueur des fils SDA et SCL.
Étape 2: Lecture et écriture de l'heure à partir de votre module RTC
Une fois que vous avez câblé votre module RTC. entrez et téléchargez le croquis suivant. Bien que les notes et les fonctions du croquis se réfèrent uniquement au DS3231, le code fonctionne également avec le DS1307.
#include "Wire.h"#define DS3231_I2C_ADDRESS 0x68 // Convertir les nombres décimaux normaux en octet décimal codé binaire decToBcd(byte val) { return((val/10*16) + (val%10)); } // Convertir les nombres décimaux codés binaires en nombres décimaux normaux byte bcdToDec(byte val) { return((val/16*10) + (val%16)); } void setup() { Wire.begin(); Serial.begin(9600); // définissez l'heure initiale ici: // DS3231 seconds, minutes, hours, day, date, month, year // setDS3231time(30, 42, 21, 4, 26, 11, 14); } void setDS3231time(octet seconde, octet minute, octet heure, octet dayOfWeek, octet dayOfMonth, octet mois, octet année) { // définit les données d'heure et de date sur DS3231 Wire.beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0); // définit l'entrée suivante pour qu'elle commence au registre des secondes Wire.write(decToBcd(second)); // définit les secondes Wire.write(decToBcd(minute)); // définit les minutes Wire.write(decToBcd(hour)); // définir les heures Wire.write(decToBcd(dayOfWeek)); // définir le jour de la semaine (1=dimanche, 7=samedi) Wire.write(decToBcd(dayOfMonth)); // fixe la date (1 à 31) Wire.write(decToBcd(month)); // définir le mois Wire.write(decToBcd(year)); // définir l'année (0 à 99) Wire.endTransmission(); } void readDS3231time(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year) { Wire.beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0); // définit le pointeur de registre DS3231 sur 00h Wire.endTransmission(); Wire.requestFrom(DS3231_I2C_ADDRESS, 7); // demande sept octets de données de DS3231 à partir du registre 00h *second = bcdToDec(Wire.read() & 0x7f); *minute = bcdToDec(Wire.read()); *heure = bcdToDec(Wire.read() & 0x3f); *dayOfWeek = bcdToDec(Wire.read()); *dayOfMonth = bcdToDec(Wire.read()); *mois = bcdToDec(Wire.read()); *année = bcdToDec(Wire.read()); } void displayTime() { octet seconde, minute, heure, dayOfWeek, dayOfMonth, mois, année; // récupérer les données du DS3231 readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); // l'envoie au moniteur série Serial.print(hour, DEC); // convertit la variable d'octet en nombre décimal lorsqu'elle est affichée Serial.print(":"); if (minute<10) { Serial.print("0"); } Serial.print(minute, DEC); Serial.print(":"); if (second<10) { Serial.print("0"); } Serial.print(second, DEC); Serial.print(" "); Serial.print(dayOfMonth, DEC); Serial.print("/"); Serial.print(mois, DEC); Serial.print("/"); Serial.print(année, DEC); Serial.print(" Jour de la semaine: "); switch(dayOfWeek){ case 1: Serial.println("Dimanche"); Pause; cas 2: Serial.println("lundi"); Pause; cas 3: Serial.println("mardi"); Pause; cas 4: Serial.println("Mercredi"); Pause; case 5: Serial.println("Jeudi"); Pause; cas 6: Serial.println("Vendredi"); Pause; cas 7: Serial.println("samedi"); Pause; } } boucle vide() { displayTime(); // affiche les données de l'horloge en temps réel sur le moniteur série, delay(1000); // chaque seconde }
Il peut y avoir beaucoup de code, mais il se décompose bien en parties gérables.
Il inclut d'abord la bibliothèque Wire, qui est utilisée pour la communication par bus I2C, suivie de la définition de l'adresse de bus pour le RTC en tant que 0x68. Celles-ci sont suivies de deux fonctions qui convertissent les nombres décimaux en BCD (décimal codé binaire) et vice versa. Ceux-ci sont nécessaires car les circuits intégrés RTC fonctionnent en BCD et non en décimal.
La fonction setDS3231time() est utilisée pour régler l'horloge. Son utilisation est très simple, insérez simplement les valeurs de l'année jusqu'à la seconde, et le RTC démarrera à partir de ce moment. Par exemple, si vous souhaitez régler la date et l'heure suivantes - mercredi 26 novembre 2014 et 21 h 42 et 30 secondes - vous utiliserez:
setDS3231time(30, 42, 21, 4, 26, 11, 14);
Étape 3:
Notez que l'heure est réglée sur 24 heures et que le quatrième paramètre est le « jour de la semaine ». Cela se situe entre 1 et 7 qui est du dimanche au samedi respectivement. Ces paramètres sont des valeurs d'octet si vous remplacez vos propres variables.
Une fois que vous avez exécuté la fonction une fois, il est sage de la préfixer avec // et de télécharger à nouveau votre code, afin qu'il ne réinitialise pas l'heure une fois l'alimentation redémarrée ou la réinitialisation du microcontrôleur. Lire l'heure de votre RTC est tout aussi simple, en fait le processus peut être suivi proprement à l'intérieur de la fonction displayTime(). Vous devrez définir des variables de sept octets pour stocker les données du RTC, et celles-ci seront ensuite insérées dans la fonction readDS3231time(). Par exemple si vos variables sont:
octet seconde, minute, heure, dayOfWeek, dayOfMonth, mois, année;
… vous les rafraîchiriez avec les données actuelles du RTC en utilisant:
readDS3232time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
Ensuite, vous pouvez utiliser les variables comme bon vous semble, de l'envoi de l'heure et de la date au moniteur série comme le fait l'exemple d'esquisse - à la conversion des données sous une forme appropriée pour toutes sortes de périphériques de sortie.
Juste pour vérifier que tout fonctionne, entrez l'heure et la date appropriées dans le croquis de démonstration, téléchargez-le, commentez la fonction setDS3231time() et téléchargez-le à nouveau. Ensuite, ouvrez le moniteur série et vous devriez obtenir un affichage en cours de l'heure et de la date actuelles.
À partir de ce point, vous disposez maintenant des outils logiciels pour définir les données et les récupérer à partir de votre module d'horloge en temps réel, et nous espérons que vous comprenez comment utiliser ces modules peu coûteux.
Vous pouvez en savoir plus sur les circuits intégrés d'horloge en temps réel particuliers sur le site Web du fabricant - DS1307 et DS3231.
Cet article vous est présenté par pmdway.com - tout pour les fabricants et les passionnés d'électronique, avec une livraison gratuite dans le monde entier.
Conseillé:
Comment utiliser un module d'horloge en temps réel (DS3231) : 5 étapes
Comment utiliser un module d'horloge en temps réel (DS3231): Le DS3231 est une horloge en temps réel (RTC) I2C à faible coût et extrêmement précise avec un oscillateur à cristal compensé en température (TCXO) et un cristal intégrés. L'appareil intègre une entrée de batterie et maintient un chronométrage précis lorsque l'alimentation principale à
DS1307 Horloge temps réel RTC avec Arduino : 4 étapes
DS1307 Horloge temps réel RTC avec Arduino : Dans ce didacticiel, nous allons découvrir l'horloge temps réel (RTC) et comment Arduino & L'horloge en temps réel IC DS1307 est conçue comme un dispositif de chronométrage. L'horloge en temps réel (RTC) est utilisée pour surveiller l'heure et maintenir un calendrier. Afin d'utiliser un RTC, w
Horloge basée sur Arduino utilisant le module d'horloge en temps réel (RTC) DS1307 et 0.96 : 5 étapes
Horloge basée sur Arduino utilisant le module d'horloge en temps réel (RTC) DS1307 et 0.96 : Salut les gars, dans ce tutoriel, nous verrons comment créer une horloge de travail à l'aide d'un module d'horloge en temps réel DS1307 & Afficheurs OLED. Nous allons donc lire l'heure du module d'horloge DS1307. Et imprimez-le sur l'écran OLED
Faire une horloge avec M5stick C en utilisant Arduino IDE - Horloge temps réel RTC avec M5stack M5stick-C : 4 étapes
Faire une horloge avec M5stick C en utilisant Arduino IDE | Horloge en temps réel RTC avec M5stack M5stick-C : Salut les gars dans ce instructables, nous allons apprendre à faire une horloge avec la carte de développement m5stick-C de m5stack à l'aide d'Arduino IDE. semaine du mois sur l'écran
Comment faire une horloge en temps réel à l'aide d'Arduino et d'un écran TFT - Arduino Mega RTC avec écran TFT de 3,5 pouces : 4 étapes
Comment faire une horloge en temps réel à l'aide d'Arduino et d'un écran TFT | Arduino Mega RTC avec un écran TFT de 3,5 pouces : visitez ma chaîne Youtube. Module RTC 2560 et DS3231….Avant de commencer…vérifiez la vidéo de ma chaîne YouTube..Remarque : - Si vous utilisez Arduin