- Composants requis
- Affichage à 7 segments à 4 chiffres
- IC de registre de décalage 74HC595
- Module DS3231 RTC
- Schéma
- Programmation Arduino UNO pour le multiplexage de l'affichage à sept segments
Les horloges murales numériques sont de plus en plus populaires de nos jours et elles sont meilleures que les horloges analogiques car elles fournissent une heure précise en heures, minutes et secondes et il est facile de lire les valeurs. Certaines horloges numériques ont également de nombreuses fonctionnalités telles que l'affichage de la température, de l'humidité, le réglage de plusieurs alarmes, etc. La plupart des horloges numériques utilisent un affichage à sept segments.
Nous avons déjà construit de nombreux circuits d'horloges numériques en utilisant des affichages à 7 segments ou en utilisant un écran LCD 16x2. Ici vous pouvez les conceptions complètes de PCB de l'horloge numérique basée sur AVR. Ce didacticiel consiste à créer une horloge numérique en multiplexant des affichages à quatre segments à l'aide d'Arduino UNO et en affichant l'heure au format HH: MM.
Composants requis
- Affichage à 7 segments à 4 chiffres
- 74HC595 IC
- Module DS3231 RTC
- Arduino UNO
- Planche à pain
- Fils de connexion
Affichage à 7 segments à 4 chiffres
L'affichage à 7 segments à 4 chiffres comporte quatre écrans à sept segments réunis ou nous pouvons dire multiplexés ensemble. Ils sont utilisés pour afficher des valeurs numériques et aussi certains alphabets avec des décimales et deux points. L'affichage peut être utilisé dans les deux sens. Quatre chiffres sont utiles pour créer des horloges numériques ou comme compter des nombres de 0 à 9999. Ci-dessous se trouve le schéma interne de l'affichage à 4 chiffres à 7 segments.
Chaque segment a une LED avec un contrôle LED individuel. Il existe deux types d'affichages à sept segments tels que l'anode commune et la cathode commune. L'image ci-dessus montre l'affichage à 7 segments de type d'anode commun.
Anode commune
Dans Common Anode, toutes les bornes positives (anodes) de toutes les 8 LED sont connectées ensemble, nommées COM. Et toutes les bornes négatives sont laissées seules ou connectées aux broches du microcontrôleur. En utilisant un microcontrôleur, si la logique LOW est définie pour éclairer le segment de LED particulier et la logique High pour éteindre la LED.
Cathode commune
Dans la cathode commune, toutes les bornes négatives (cathode) de toutes les 8 LED sont connectées ensemble, nommées COM. Et toutes les bornes positives sont laissées seules ou connectées aux broches du microcontrôleur. En utilisant le microcontrôleur, si vous réglez la logique HIGH pour éclairer la LED et réglez LOW pour éteindre la LED.
En savoir plus sur les affichages à 7 segments ici et voir comment il peut être interfacé avec d'autres microcontrôleurs:
- Interface d'affichage à 7 segments avec Arduino
- Interfaçage d'affichage à 7 segments avec Raspberry Pi
- Interfaçage de l'affichage à sept segments avec ARM7-LPC2148
- Interfaçage de l'affichage à 7 segments avec le microcontrôleur PIC
- Interface d'affichage à 7 segments avec le microcontrôleur 8051
IC de registre de décalage 74HC595
L' IC 74HC595 également connu sous le nom de 8-Bit Serial IN - Parallel OUT Shift Register. Ce circuit intégré peut recevoir des entrées de données en série et peut contrôler 8 broches de sortie en parallèle. Ceci est utile pour réduire les broches utilisées par le microcontrôleur. Vous pouvez trouver tous les projets liés au registre à décalage 74HC595 ici.
Fonctionnement du 74HC595 IC:
Ce circuit intégré utilise trois broches telles que l'horloge, les données et le verrouillage avec le microcontrôleur pour contrôler les 8 broches de sortie du circuit intégré. L'horloge est utilisée pour fournir en continu des impulsions à partir du microcontrôleur et la broche de données est utilisée pour envoyer les données comme quelle sortie doit être activée ou désactivée à l'heure d'horloge respective.
Brochage:
Code PIN |
Nom de la broche |
La description |
1,2,3,4,5,6,7 |
Broches de sortie (Q1 à Q7) |
Le 74HC595 a 8 broches de sortie dont 7 sont ces broches. Ils peuvent être contrôlés en série |
8 |
Sol |
Connecté à la terre du microcontrôleur |
9 |
(Q7) Sortie série |
Cette broche est utilisée pour connecter plus d'un 74HC595 en cascade |
dix |
(MR) Réinitialisation générale |
Réinitialise toutes les sorties au niveau bas. Doit être maintenu haut pour un fonctionnement normal |
11 |
(SH_CP) Horloge |
Il s'agit de la broche d'horloge à laquelle le signal d'horloge doit être fourni par MCU / MPU |
12 |
(ST_CP) Loquet |
La broche Latch est utilisée pour mettre à jour les données vers les broches de sortie. C'est actif haut |
13 |
(OE) Activation de la sortie |
L'activation de sortie est utilisée pour désactiver les sorties. Doit être maintenu bas pour un fonctionnement normal |
14 |
(DS) Données série |
Il s'agit de la broche à laquelle les données sont envoyées, sur la base de laquelle les 8 sorties sont contrôlées |
15 |
(Q0) Sortie |
La première broche de sortie. |
16 |
Vcc |
Cette broche alimente le circuit intégré, généralement + 5V est utilisé. |
Module DS3231 RTC
DS3231 est un module RTC. RTC signifie Real Time Clock. Ce module est utilisé pour mémoriser l'heure et la date même lorsque le circuit n'est pas alimenté. Il dispose d'une batterie de secours CR2032 pour faire fonctionner le module en l'absence d'alimentation externe. Ce module comprend également un capteur de température. Le module peut être utilisé dans des projets intégrés tels que la création d'une horloge numérique avec indicateur de température, etc. Voici quelques projets utiles qui l'utilisent:
- Alimentateur automatique pour animaux de compagnie utilisant Arduino
- Interfaçage du module RTC (DS3231) avec le microcontrôleur PIC: horloge numérique
- Interfaçage du module RTC (DS3231) avec MSP430: horloge numérique
- Horloge temps réel ESP32 utilisant le module DS3231
- Horloge murale numérique sur PCB utilisant le microcontrôleur AVR Atmega16 et DS3231 RTC
Brochage du DS3231:
Nom de la broche |
Utilisation |
VCC |
Connecté au positif de la source d'alimentation |
GND |
Connecté à la terre |
SDA |
Broche de données série (I2C) |
SCL |
Broche d'horloge série (I2C) |
SQW |
Broche de sortie Square Wave |
32 000 |
Sortie oscillateur 32K |
Caractéristiques et spécifications:
- RTC compte les secondes, les minutes, les heures et l'année
- Capteur de température numérique avec une précision de ± 3 ° C
- S'inscrire à la version vieillissante
- Interface I2C 400Khz
- Basse consommation énergétique
- Batterie de secours CR2032 avec une durée de vie de deux à trois ans
- Tension de fonctionnement: 2,3 à 5,5 V
Schéma
Connexion de circuit entre DS3231 RTC et Arduino UNO:
DS3231 |
Arduino UNO |
VCC |
5V |
GND |
GND |
SDA |
A4 |
SCL |
A4 |
Connexions du circuit entre 74HC595 IC et Arduino Uno:
74HC595 IC |
Arduino UNO |
11-SH_CP (SRCLK) |
6 |
12-ST_CP (RCLK) |
5 |
14-DS (données) |
4 |
13-OE (loquet) |
GND |
8-GND |
GND |
10-MR (SRCLR) |
+ 5V |
16-VCC |
+ 5V |
Connexions de circuit entre IC 74HC595 et sept segments à 4 chiffres et Arduino UNO:
4 chiffresSevenSegment |
IC 74HC595 |
Arduino UNO |
UNE |
Q0 |
- |
B |
Q1 |
- |
C |
Q2 |
- |
ré |
Q3 |
- |
E |
T4 |
- |
F |
Q5 |
- |
g |
Q6 |
- |
D1 |
- |
dix |
D2 |
- |
11 |
D3 |
- |
12 |
D4 |
- |
9 |
Programmation Arduino UNO pour le multiplexage de l'affichage à sept segments
Le code complet et la vidéo de travail sont joints à la fin de ce tutoriel. Dans la section de programmation, la manière dont l'heure (heure et minute) est extraite du module RTC au format 24 heures, puis convertie au format respectif pour les afficher dans l'affichage à 4 chiffres à 7 segments, sera expliquée.
Pour interfacer le module DS3231 RTC avec Arduino UNO, le bus I2C d'Arduino UNO est utilisé. Une bibliothèque appelée
Dans ce concept, l'heure et les minutes sont d'abord tirées de RTC et elles sont combinées ensemble comme 0930 (21h30), puis les chiffres individuels sont séparés comme mille, cent, dizaines, unité et les chiffres individuels convertis en format binaire comme 0 dans 63 (0111111). Ce code binaire est envoyé à un registre à décalage, puis du registre à décalage au sept segments, affichant avec succès le chiffre 0 dans l'affichage à sept segments. De cette façon, les quatre chiffres sont multiplexés et l'heure et les minutes sont affichées.
Au départ, la bibliothèque nécessaire est incluse, comme la bibliothèque DS3231 et la bibliothèque Wire (bibliothèque I2C).
#comprendre
Les broches sont définies pour la commande à sept segments. Ces commandes joueront un rôle important dans le multiplexage de l'affichage.
#define latchPin 5 #define clockPin 6 #define dataPin 4 #define dot 2
Les variables sont déclarées pour stocker le résultat converti ou brut extrait du RTC.
int h; // Variable déclarée pour heure int m; // Variable déclarée pour minute int milliers; int centaines; int dizaines; unité int; bool h24; bool PM;
Ensuite, l'objet de la classe DS3231 est déclaré comme RTC pour simplifier l'utilisation dans d'autres lignes.
DS3231 RTC;
Comme le module RTC est interfacé avec Arduino en utilisant la communication I2C. Ainsi, wire.begin () est utilisé pour démarrer la communication I2C dans l'adresse par défaut de RTC car il n'y a pas d'autres modules I2C.
Wire.begin ();
Le mode de broche est défini, que le GPIO se comporte comme une sortie ou une entrée.
pinMode (9, SORTIE); pinMode (10, SORTIE); pinMode (11, SORTIE); pinMode (12, SORTIE); pinMode (latchPin, OUTPUT); pinMode (clockPin, OUTPUT); pinMode (dataPin, OUTPUT); pinMode (point, OUTPUT);
La boucle fonctionne à l'infini et prend l'heure en heure et minute du module RTC DS3231. «h24» indique la variable de format 24 heures.
int h = RTC.getHour (h24, PM); int m = RTC.getMinute ();
Ensuite, l'heure et les minutes sont combinées en un seul nombre (par exemple, si l'heure est 10 et min est 60, le nombre est 10 * 100 = 1000 + 60 = 1060).
nombre int = h * 100 + m;
Les chiffres individuels du nombre sont obtenus (exemple 1060-1 est mille, 0 est centré, 1 est le dixième et 0 est le dernier chiffre). Pour séparer les chiffres, l'opérateur de module est utilisé. Par exemple, en 1060 pour obtenir 1, alors 1060/1000 = 1,06% 10 = 1). Ainsi, des chiffres séparés sont stockés dans des variables séparées.
int milliers = nombre / 1000% 10; int centaines = nombre / 100% 10; int dizaines = nombre / 10% 10; unité int = nombre% 10;
Après cela, une instruction de cas de commutation pour chaque chiffre individuel est définie pour les convertir en format respectif (format binaire) et les envoyer via un registre à décalage pour les afficher en 7 segments. Par exemple (pour 1 chiffre, il est changé en 06 (0000 0110)). Pour qu'il soit envoyé via shift et 1 chiffre est affiché en 7 segments (0 pour LOW, 1 pour HIGH).
commutateur (t) { cas 0: unité = 63; Pause; cas 1: unité = 06; Pause; cas 2: unité = 91; Pause; cas 3: unité = 79; Pause; cas 4: unité = 102; Pause; cas 5: unité = 109; Pause; cas 6: unité = 125; cas 7: unité = 07; Pause; cas 8: unité = 127; Pause; cas 9: unité = 103; Pause; }
Ensuite, le chiffre individuel au format binaire est envoyé via la fonction 'shiftout' avec MSB en premier et la broche de chiffre respective est rendue HAUTE et la broche de verrouillage est rendue ÉLEVÉE.
digitalWrite (9, FAIBLE); digitalWrite (latchPin, LOW); shiftOut (dataPin, clockPin, MSBFIRST, milliers); digitalWrite (latchPin, HIGH); digitalWrite (9, HIGH); retard (5);
Ceci termine le code complet. La plupart des explications de la fonction sont données dans la section des commentaires de code juste à côté de la ligne de code. La fréquence de l'horloge décidera de la vue de l'heure et de la qualité du multiplexage, c'est-à-dire si une horloge basse est utilisée, le scintillement peut être vu où, comme si la vitesse d'horloge est élevée, il n'y aura pas un tel scintillement et un temps constant peut être vu.
Notez que pour accéder au module RTC, la tension du bus I2C doit être maintenue. Afin de donner des suggestions ou si vous avez des doutes, veuillez commenter ci-dessous.