- Erforderliche Komponenten
- 4-stellige 7-Segment-Anzeige
- 74HC595 Schieberegister-IC
- DS3231 RTC-Modul
- Schaltplan
- Programmieren von Arduino UNO für das Multiplexen der Sieben-Segment-Anzeige
Digitale Wanduhren werden heutzutage immer beliebter und sind besser als analoge Uhren, da sie eine genaue Zeit in Stunden, Minuten und Sekunden liefern und die Werte leicht ablesbar sind. Einige Digitaluhren verfügen auch über viele Funktionen wie die Anzeige von Temperatur, Luftfeuchtigkeit, das Einstellen mehrerer Alarme usw. Die meisten Digitaluhren verwenden eine Sieben-Segment-Anzeige.
Wir haben zuvor viele digitale Taktschaltungen entweder mit 7-Segment-Anzeigen oder mit 16x2-LCD gebaut. Hier können Sie die kompletten Leiterplattendesigns der AVR-basierten Digitaluhr sehen. In diesem Tutorial geht es darum, eine Digitaluhr zu erstellen, indem vier bis sieben Segmentanzeigen mit Arduino UNO gemultiplext und die Zeit im HH: MM-Format angezeigt werden.
Erforderliche Komponenten
- 4-stellige 7-Segment-Anzeige
- 74HC595 IC
- DS3231 RTC-Modul
- Arduino UNO
- Steckbrett
- Kabel anschließen
4-stellige 7-Segment-Anzeige
4-stellige 7-Segment-Anzeige hat vier 7-Segment-Anzeige zusammengefügt oder wir können sagen, zusammen gemultiplext. Sie werden verwendet, um numerische Werte sowie einige Alphabete mit Dezimalstellen und Doppelpunkten anzuzeigen. Das Display kann in beide Richtungen verwendet werden. Vier Ziffern sind nützlich, um Digitaluhren zu erstellen oder Zahlen von 0 bis 9999 zu zählen. Nachfolgend finden Sie das interne Diagramm für die 4-stellige 7-Segment-Anzeige.
Jedes Segment verfügt über eine LED mit individueller LED-Steuerung. Es gibt zwei Arten von Anzeigen mit sieben Segmenten, z. B. Common Anode und Common Cathode. Das obige Bild zeigt die Segmentanzeige des gemeinsamen Anodentyps 7.
Gemeinsame Anode
In der gemeinsamen Anode sind alle positiven Anschlüsse (Anoden) aller 8 LEDs miteinander verbunden und werden als COM bezeichnet. Alle negativen Anschlüsse bleiben allein oder sind mit den Mikrocontroller-Pins verbunden. Wenn bei Verwendung eines Mikrocontrollers logisch LOW eingestellt ist, um das bestimmte LED-Segment zu beleuchten, und logisch hoch eingestellt ist, um die LED auszuschalten.
Gemeinsame Kathode
In der gemeinsamen Kathode sind alle negativen Anschlüsse (Kathode) aller 8 LEDs miteinander verbunden, die als COM bezeichnet werden. Alle positiven Anschlüsse bleiben allein oder sind mit den Mikrocontroller-Pins verbunden. Verwenden Sie bei Verwendung eines Mikrocontrollers die Logik HIGH, um die LED zu beleuchten, und LOW, um die LED auszuschalten.
Erfahren Sie hier mehr über 7-Segment-Anzeigen und prüfen Sie, wie diese mit anderen Mikrocontrollern verbunden werden können:
- 7 Segmentanzeige-Schnittstelle mit Arduino
- 7-Segment-Display-Schnittstelle mit Raspberry Pi
- Schnittstelle der Sieben-Segment-Anzeige mit ARM7-LPC2148
- 7 Segmentanzeige-Schnittstelle mit PIC-Mikrocontroller
- 7-Segment-Display-Schnittstelle mit dem 8051-Mikrocontroller
74HC595 Schieberegister-IC
Der IC 74HC595 wird auch als 8-Bit-Schieberegister Serial IN - Parallel OUT bezeichnet. Dieser IC kann serielle Daten empfangen und 8 Ausgangspins parallel steuern. Dies ist nützlich, um die vom Mikrocontroller verwendeten Pins zu reduzieren. Hier finden Sie alle Projekte im Zusammenhang mit dem Schieberegister 74HC595.
Arbeitsweise des 74HC595 IC:
Dieser IC verwendet drei Pins wie Clock, Data & Latch mit dem Mikrocontroller, um die 8 Ausgangspins des IC zu steuern. Der Takt wird verwendet, um kontinuierlich Impulse vom Mikrocontroller zu liefern, und der Daten-Pin wird verwendet, um die Daten zu senden, wie z. B. welcher Ausgang zur jeweiligen Taktzeit ein- oder ausgeschaltet werden muss.
Pinbelegung:
PIN Nummer |
Pin Name |
Beschreibung |
1,2,3,4,5,6,7 |
Ausgangspins (Q1 bis Q7) |
Der 74HC595 verfügt über 8 Ausgangspins, von denen 7 diese Pins sind. Sie können seriell gesteuert werden |
8 |
Boden |
Verbunden mit der Masse des Mikrocontrollers |
9 |
(Q7) Serielle Ausgabe |
Dieser Pin wird verwendet, um mehr als einen 74HC595 als Kaskadierung zu verbinden |
10 |
(MR) Master Reset |
Setzt alle Ausgänge auf niedrig zurück. Muss für den normalen Betrieb hoch gehalten werden |
11 |
(SH_CP) Uhr |
Dies ist der Taktstift, an den das Taktsignal von der MCU / MPU geliefert werden muss |
12 |
(ST_CP) Latch |
Der Latch-Pin wird verwendet, um die Daten an den Ausgangspins zu aktualisieren. Es ist aktiv hoch |
13 |
(OE) Ausgabe aktivieren |
Mit der Ausgabefreigabe werden die Ausgänge ausgeschaltet. Muss für den normalen Betrieb niedrig gehalten werden |
14 |
(DS) Serielle Daten |
Dies ist der Pin, an den Daten gesendet werden, basierend auf dem die 8 Ausgänge gesteuert werden |
15 |
(Q0) Ausgabe |
Der erste Ausgangspin. |
16 |
Vcc |
Dieser Pin versorgt den IC mit Strom, normalerweise werden +5 V verwendet. |
DS3231 RTC-Modul
DS3231 ist ein RTC-Modul. RTC steht für Real Time Clock. Dieses Modul wird verwendet, um Uhrzeit und Datum zu speichern, auch wenn der Stromkreis nicht mit Strom versorgt wird. Es verfügt über ein Batterie-Backup CR2032, um das Modul ohne externe Stromversorgung zu betreiben. Dieses Modul enthält auch einen Temperatursensor. Das Modul kann in eingebetteten Projekten verwendet werden, z. B. zur Herstellung einer Digitaluhr mit Temperaturanzeige usw. Hier einige nützliche Projekte, die es verwenden:
- Automatischer Tierfutterautomat mit Arduino
- Schnittstelle zwischen RTC-Modul (DS3231) und PIC-Mikrocontroller: Digital Clock
- Schnittstelle zwischen RTC-Modul (DS3231) und MSP430: Digital Clock
- ESP32 Echtzeituhr mit DS3231-Modul
- Digitale Wanduhr auf Leiterplatte mit AVR Microcontroller Atmega16 und DS3231 RTC
Pinbelegung von DS3231:
Pin Name |
Verwenden |
VCC |
Verbunden mit dem Plus der Stromquelle |
GND |
Mit Masse verbunden |
SDA |
Serieller Daten-Pin (I2C) |
SCL |
Serieller Clock-Pin (I2C) |
SQW |
Rechteckwellen-Ausgangspin |
32K |
32K Oszillatorausgang |
Merkmale und Spezifikationen:
- RTC zählt Sekunden, Minuten, Stunden und Jahr
- Digitaler Temperatursensor mit einer Genauigkeit von ± 3 ° C.
- Registrieren Sie sich für das Altern
- 400-kHz-I2C-Schnittstelle
- Energieeffizient
- CR2032 Batterie-Backup mit zwei bis drei Jahren Lebensdauer
- Betriebsspannung: 2,3 bis 5,5 V.
Schaltplan
Schaltungsverbindung zwischen DS3231 RTC und Arduino UNO:
DS3231 |
Arduino UNO |
VCC |
5V |
GND |
GND |
SDA |
A4 |
SCL |
A4 |
Schaltungsverbindungen zwischen 74HC595 IC und Arduino Uno:
74HC595 IC |
Arduino UNO |
11-SH_CP (SRCLK) |
6 |
12-ST_CP (RCLK) |
5 |
14-DS (Daten) |
4 |
13-OE (Verriegelung) |
GND |
8-GND |
GND |
10-MR (SRCLR) |
+ 5V |
16-VCC |
+ 5V |
Schaltungsverbindungen zwischen IC 74HC595 und 4-stelligem Siebensegment und Arduino UNO:
4-stelliges Siebensegment |
IC 74HC595 |
Arduino UNO |
EIN |
Q0 |
- - |
B. |
Q1 |
- - |
C. |
Q2 |
- - |
D. |
Q3 |
- - |
E. |
Q4 |
- - |
F. |
Q5 |
- - |
G |
Q6 |
- - |
D1 |
- - |
10 |
D2 |
- - |
11 |
D3 |
- - |
12 |
D4 |
- - |
9 |
Programmieren von Arduino UNO für das Multiplexen der Sieben-Segment-Anzeige
Der vollständige Code und das Arbeitsvideo sind am Ende dieses Tutorials beigefügt. Im Programmierabschnitt wird erläutert, wie die Zeit (Stunde und Minute) aus dem RTC-Modul im 24-Stunden-Format entnommen und anschließend in das entsprechende Format konvertiert wird, um sie in der 4-stelligen 7-Segment-Anzeige anzuzeigen.
Um das DS3231-RTC-Modul mit Arduino UNO zu verbinden, wird der I2C-Bus von Arduino UNO verwendet. Eine Bibliothek namens
In diesem Konzept werden Stunde und Minute zuerst von RTC übernommen und wie 09:30 Uhr (21:30 Uhr) miteinander kombiniert. Anschließend werden die einzelnen Ziffern wie Tausend, Hundert, Zehn, Einheit getrennt und die einzelnen Ziffern wie 0 in ein Binärformat konvertiert in 63 (0111111). Dieser Binärcode wird an ein Schieberegister und dann vom Schieberegister an das Siebensegment gesendet, wobei die Ziffer 0 in der Siebensegmentanzeige erfolgreich angezeigt wird. Auf diese Weise werden die vier Ziffern gemultiplext und Stunde und Minute angezeigt.
Zu Beginn ist die erforderliche Bibliothek enthalten, z. B. die DS3231-Bibliothek und die Wire-Bibliothek (I2C-Bibliothek).
#einschließen
Die Pins sind für die Sieben-Segment-Steuerung definiert. Diese Steuerelemente spielen eine wichtige Rolle beim Multiplexen der Anzeige.
#define latchPin 5 #define clockPin 6 #define dataPin 4 #define dot 2
Die Variablen werden deklariert, um das konvertierte oder rohe Ergebnis aus der RTC zu speichern.
int h; // Variable deklariert für Stunde int m; // Variable deklariert für Minute int Tausend; int Hunderte; int zehn; int unit; bool h24; Bool PM;
Als nächstes wird das Objekt für die Klasse DS3231 als RTC deklariert, um die Verwendung in weiteren Zeilen zu vereinfachen.
DS3231 RTC;
Da das RTC-Modul über I2C-Kommunikation mit Arduino verbunden ist. Daher wird wire.begin () verwendet, um die I2C-Kommunikation in der Standardadresse von RTC zu starten, da keine anderen I2C-Module vorhanden sind.
Wire.begin ();
Im Pin-Modus wird festgelegt, ob sich der GPIO als Ausgang oder Eingang verhält.
PinMode (9, OUTPUT); PinMode (10, OUTPUT); PinMode (11, OUTPUT); PinMode (12, OUTPUT); pinMode (latchPin, OUTPUT); pinMode (clockPin, OUTPUT); pinMode (dataPin, OUTPUT); pinMode (Punkt, AUSGANG);
Die Schleife läuft unendlich und benötigt vom RTC DS3231-Modul die Zeit in Stunden und Minuten. 'h24' gibt die 24-Stunden-Formatvariable an.
int h = RTC.getHour (h24, PM); int m = RTC.getMinute ();
Dann werden Stunde und Minute als eine Zahl kombiniert (Beispiel: Wenn Stunde 10 und min 60 ist, ist die Zahl 10 * 100 = 1000 + 60 = 1060).
int number = h * 100 + m;
Die einzelnen Ziffern aus der Zahl werden erhalten (Beispiel 1060-1 ist Tausend, 0 ist Hundert, 1 ist Zehntel und 0 ist letzte Ziffer). Um die Ziffern zu trennen, wird der Moduloperator verwendet. Zum Beispiel in 1060, um 1 zu erhalten, dann 1060/1000 = 1,06% 10 = 1). Daher werden separate Ziffern in separaten Variablen gespeichert.
int Tausend = Anzahl / 1000% 10; int Hunderte = Anzahl / 100% 10; int ten = Anzahl / 10% 10; int unit = number% 10;
Danach wird für jede einzelne Ziffer eine Schaltfallanweisung definiert, um sie in das jeweilige Format (Binärformat) umzuwandeln und über das Schieberegister zur Anzeige im 7-Segment zu senden. Zum Beispiel (Für 1 Ziffer wird es in 06 (0000 0110) geändert). Damit wird es per Shift verschickt und 1 Ziffer im 7-Segment angezeigt (0 für LOW, 1 für HIGH).
Schalter (t) { Fall 0: Einheit = 63; Unterbrechung; Fall 1: Einheit = 06; Unterbrechung; Fall 2: Einheit = 91; Unterbrechung; Fall 3: Einheit = 79; Unterbrechung; Fall 4: Einheit = 102; Unterbrechung; Fall 5: Einheit = 109; Unterbrechung; Fall 6: Einheit = 125; Fall 7: Einheit = 07; Unterbrechung; Fall 8: Einheit = 127; Unterbrechung; Fall 9: Einheit = 103; Unterbrechung; }}
Dann wird die einzelne Ziffer im Binärformat zuerst über die 'Shiftout'-Funktion mit MSB gesendet und der jeweilige Ziffernstift wird auf HIGH und der Latch-Pin auf HIGH gesetzt.
digitalWrite (9, LOW); digitalWrite (latchPin, LOW); shiftOut (dataPin, clockPin, MSBFIRST, Tausende); digitalWrite (latchPin, HIGH); digitalWrite (9, HIGH); Verzögerung (5);
Damit ist der vollständige Code fertig. Die meisten Funktionserklärungen finden Sie im Abschnitt mit den Codekommentaren direkt neben der Codezeile. Die Frequenz der Uhr entscheidet über die Ansicht der Zeit und die Qualität des Multiplexens. Wenn also eine niedrige Uhr verwendet wird, kann das Flackern gesehen werden, wo, als ob die Taktrate hoch ist, es kein solches Flackern gibt und eine konstante Zeit gesehen werden kann.
Beachten Sie, dass für den Zugriff auf das RTC-Modul die I2C-Busspannung beibehalten werden muss. Um Vorschläge zu machen oder wenn Sie Zweifel haben, kommentieren Sie bitte unten.