Processeur informatique

Tutoriel horloge DS1302 Arduino

Tutoriel : utiliser l'horloge Arduino

💡 Nous nous retrouvons pour apprendre à faire clignoter une LED grâce à votre carte Arduino.

Si vous ne l'avez pas encore fait, nous vous suggérons de lire le tutoriel pour apprendre à utiliser le programme Arduino IDE.🧐

Si vous n'avez pas encore d'Arduino, vous pouvez acheter le kit garanti au meilleur prix.

Ce kit électronique Arduino à monter pour débutant vous fera apprendre l'électronique par des jeux grâce à nos tutoriels adaptés au kit.

horloge.jpg
Composants de votre kit électronique Arduino nécessaires pour e tutoriel :

- une carte Arduino

- Une horloge DS1302

- Une Breadboard

- Des fils de connexions

- Pile CR2032

Fonctionnement de l'Horloge DS1302

La puce DS1302 de chronométrage à charge lente contient une horloge/calendrier en temps réel et 31 octets de mémoire vive statique.  Elle communique avec un microprocesseur via une simple interface série.  L'horloge/calendrier fournit des informations en temps réel sur les secondes, les minutes, les heures, le jour, la date, le mois et l'année. 

 

Trois fils seulement sont nécessaires pour communiquer entre l'horloge et la mémoire vive : CE, I/O (ligne de données) et SCLK (horloge série). Les données peuvent être transférées vers et depuis l'horloge/RAM 1 octet à la fois ou en rafale jusqu'à 31 octets. Le DS1302 est conçu pour fonctionner avec une très faible consommation d'énergie et pour conserver les données et les informations d'horloge sur moins de 1μW.  Le DS1302 a deux broches d'alimentation, une pour le primaire et une autre pour la sauvegarde. Dans cet exemple, l'alimentation du Priamry sera fournie par l'Arduino, et la sauvegarde par une pile CR2032.

Les 31 octets de RAM sont formatés comme indiqué dans le tableau ci-dessous.  Notez que les positions numériques ont leurs propres bits à remplir.  Plus précisément, la valeur 0-9 de la position "un" a 4 bits, et la valeur 0-9 de la position "dix" a 3 bits pour l'octet rempli avec la valeur des secondes.  Ces valeurs sont combinées pour créer l'octet entier.
 

tableau horloge.JPG
La mise en place du cablage

Le DS1302 peut être facilement connecté à l'Arduino. Trois broches sont nécessaires pour l'interface (CE, I/O, SCLK), et Vcc2 doit être connecté à +5V (ou +3,3V). Le Vcc1 est pour une batterie ou une batterie rechargeable ou une supercapsule.
Un cristal de 32,768 kHz doit être connecté à X1 et X2.

arduino code horloge.png

La DS1302 fonctionnera avec une tension de 2,0V à 5,5V.

La DS1302 fonctionnera avec une tension de 2,0V à 5,5V.

Les trois broches de l'interface doivent éviter d'utiliser les résistances de pull-up internes de l'Arduino. La DS1302 a des résistances internes de rappel vers le bas, et les lignes CE et SCLK doivent être basses lorsqu'elles sont inactives.

Certains schémas sur Internet ont des résistances de pull-up sur les trois lignes d'interface. Ce n'est pas correct. D'autres schémas utilisent deux 22pF avec le cristal. Ce n'est pas correct non plus. Voir la fiche technique pour les spécifications complètes et un circuit.

L'interface de la DS1302

Le DS1302 utilise trois lignes de communication (CE, I/O, SCLK). Ce n'est pas I2C, ce n'est pas OneWire, et ce n'est pas SPI. Le nom le plus utilisé est "interface à 3 fils".

La communication est simple, avec une chose étrange :
Si un octet est lu, l'adresse est écrite en premier. La dernière impulsion d'horloge de l'adresse (utilisant le front montant) est également la première impulsion d'horloge des données à lire (utilisant le front descendant). Le code doit donc détecter cette condition pour éviter une impulsion d'horloge supplémentaire.

Lire les données de l'horloge

Pendant la lecture, l'horloge peut se retourner. Cela entraînerait de mauvaises données d'horloge. Pour éviter cela, le DS1302 dispose d'un tampon pour stocker les données d'horloge. Ce tampon peut être lu en une seule session de communication, appelée mode "burst".

Tout programme valide doit donc utiliser ce mode "rafale" pour lire les données d'horloge.

Les données de l'année de la DS1302 ne comportent que deux chiffres (0-99). L'année "0" est 2000, et non 1970 ou 1980. Elle a une compensation d'année bissextile de 2000 à 2099 (pour une valeur de 0-99).

Le DS1302 n'utilise pas l'heure d'été

La mémoire de l'horloge

La puce possède 31 octets de mémoire vive. Les données contenues dans cette mémoire vive seront perdues si l'Arduino est éteinte et que la batterie se vide.
Pour stocker les données, la section EEPROM de la puce AVR (le microprocesseur utilisé dans l'Arduino) est le meilleur choix.

Le code spécifique de la DS1302

Les fonctions standard de date et d'heure telles que : strftime(), timelocal(), getdate(), mktime() ne fonctionnent pas sur la Arduino. Arduino utilise le compilateur AVR GCC qui n'a pas de telles fonctions.
A ce jour, il n'existe pas de bibliothèque officielle pour les fonctions de date et d'heure pour l'Arduino.

Les fonctions de date et d'heure les plus utilisées pour l'Arduino : https://playground.arduino.cc/Code/time


Le code ci-dessous contient les fonctions d'interface de base pour le DS1302. Utilisez-le avec Arduino 1.0.3 ou supérieur.

 

En utilisant une structure avec des champs de bits, la lecture et l'écriture des données d'horloge est très simple.

Le code ci-dessous utilise le format européen 24 heures.

La taille de l'esquisse est d'environ 7k et tiendra dans un ATmega8

Pour aller plus loin voir notre tutoriel qui connecte l'horloge à l'écran LCD compris dans le kit !

horloge.jpg