- Komponenter krävs
- 4-siffrig 7-segmentskärm
- 74HC595 Skiftregister IC
- DS3231 RTC-modul
- Kretsschema
- Programmering Arduino UNO för Multiplexing Seven Segment Display
Digitala väggklockor blir mer populära nu dagar och de är bättre än analog klocka eftersom det ger exakt tid i timmar, minuter och sekunder och det är lätt att läsa värdena. Vissa digitala klockor har också många faciliteter som att visa temperatur, luftfuktighet, ställa in flera larm etc. De flesta av de digitala klockorna använder display för sju segment.
Vi har tidigare byggt många digitala klockkretsar, antingen med 7 segmentskärmar eller med 16x2 LCD. Här kan du se hela PCB-designen för AVR-baserad digital klocka. Denna handledning handlar om att skapa en digital klocka genom att multiplexera displayer med fyra 7 segment med Arduino UNO och visa tiden i HH: MM-format.
Komponenter krävs
- 4-siffrig 7-segmentskärm
- 74HC595 IC
- DS3231 RTC-modul
- Arduino UNO
- Bakbord
- Anslutande ledningar
4-siffrig 7-segmentskärm
4-siffrig 7-segmentdisplay har fyra sju-segmentskärmar sammanfogade eller vi kan säga multiplexerade tillsammans. De används för att visa numeriska värden och även några alfabet med decimaler och kolon. Displayen kan användas i båda riktningarna. Fyra siffror är användbara för att göra digitala klockor eller som att räkna nummer från 0 till 9999. Nedan finns det interna diagrammet för 4-siffrig 7-segmentvisning.
Varje segment har en LED med individuell LED-kontroll. Det finns två typer av sju segmentskärmar som Common Anode och Common Cathode. Bilden ovan visar den vanliga anodtyp 7-segmentvisningen.
Vanlig anod
I Common Anode är alla positiva terminaler (anoder) för alla de 8 lysdioderna anslutna tillsammans, benämnda COM. Och alla negativa terminaler lämnas ensamma eller är anslutna till mikrokontrollerns stift. Genom att använda mikrokontroller, om logik LÅG är inställd för att belysa det specifika LED-segmentet och ställa in logiken Hög för att stänga AV LED.
Gemensam katod
I vanlig katod är alla negativa terminaler (katod) för alla de 8 lysdioderna anslutna tillsammans, benämnda COM. Och alla positiva terminaler lämnas ensamma eller är anslutna till mikrokontrollerns stift. Genom att använda mikrokontroller, om du ställer in logik HÖG för att tända LED och ställa LÅG för att stänga av LED.
Lär dig mer om sju segmentsdisplayer här och kontrollera hur den kan gränssnitt med andra mikrokontroller:
- 7-segmentskärmsgränssnitt med Arduino
- 7-segmentskärmsgränssnitt med Raspberry Pi
- Interfacing Seven Segment Display med ARM7-LPC2148
- 7-segmentskärmsgränssnitt med PIC-mikrokontroller
- 7-segmentskärmsgränssnitt med 8051 mikrokontroller
74HC595 Skiftregister IC
Den IC 74HC595 även känd som 8-bitars Serial IN - Parallell OUT skiftregister. Denna IC kan ta emot dataingång i serie och kan styra 8 utgångsstift parallellt. Detta är användbart för att minska stift som används från mikrokontroller. Du hittar alla 74HC595 skiftregisterrelaterade projekt här.
Arbeta med 74HC595 IC:
Denna IC använder tre stift som Clock, Data & Latch med mikrokontrollern för att styra de 8 utgångarna på IC. Klockan används för att tillhandahålla kontinuerliga pulser från mikrokontroller och datapinne används för att skicka data som vilken utgång som måste slås PÅ eller AV vid respektive klocktid.
Pinout:
Pinkod |
Pin-namn |
Beskrivning |
1,2,3,4,5,6,7 |
Utgångsstift (Q1 till Q7) |
74HC595 har 8 utgångsstift, varav 7 är dessa stift. De kan styras seriellt |
8 |
Jord |
Ansluten till mikrokontrollerns mark |
9 |
(F7) Seriell utgång |
Denna stift används för att ansluta mer än en 74HC595 som kaskad |
10 |
(MR) Master Reset |
Återställer alla utgångar så låga. Måste hållas högt för normal drift |
11 |
(SH_CP) Klocka |
Detta är klockstiftet till vilket klocksignalen måste tillhandahållas från MCU / MPU |
12 |
(ST_CP) Spärr |
Låsstiftet används för att uppdatera data till utgångsstiftet. Det är aktivt högt |
13 |
(OE) Utgång aktiverad |
Output Enable används för att stänga av utgångarna. Måste hållas lågt för normal drift |
14 |
(DS) Seriell data |
Detta är stiftet till vilket data skickas, baserat på vilka de 8 utgångarna styrs |
15 |
(Q0) Utgång |
Den första utgångsstiftet. |
16 |
Vcc |
Denna stift driver IC, vanligtvis används + 5V. |
DS3231 RTC-modul
DS3231 är en RTC-modul. RTC står för Real Time Clock. Denna modul används för att komma ihåg tid och datum även när kretsen inte är strömförsörjd. Den har en batterisäkerhet CR2032 för att köra modulen utan extern ström. Denna modul innehåller också en temperatursensor. Modulen kan användas i inbäddade projekt som att göra digital klocka med temperaturindikator etc. Här är några användbara projekt som använder den:
- Automatisk husdjursmatare med Arduino
- Gränssnitts RTC-modul (DS3231) med PIC Microcontroller: Digital Clock
- Gränssnitts RTC-modul (DS3231) med MSP430: Digital klocka
- ESP32 Realtidsklocka med DS3231-modul
- Digital väggklocka på kretskort med AVR Microcontroller Atmega16 och DS3231 RTC
Pinout av DS3231:
Pin-namn |
Använda sig av |
VCC |
Ansluten till strömkällans positiva |
GND |
Ansluten till marken |
SDA |
Seriell datapinne (I2C) |
SCL |
Seriell klockstift (I2C) |
SQW |
Square Wave utgångsstift |
32K |
32K oscillatorutgång |
Funktioner och specifikationer:
- RTC räknar sekunder, minuter, timmar och år
- Digital temperatursensor med ± 3ºC noggrannhet
- Registrera dig för åldrande trim
- 400 kHz I2C-gränssnitt
- Låg energiförbrukning
- CR2032 batteribackup med två till tre års livslängd
- Driftspänning: 2,3 till 5,5 V.
Kretsschema
Kretsförbindelse mellan DS3231 RTC och Arduino UNO:
DS3231 |
Arduino UNO |
VCC |
5V |
GND |
GND |
SDA |
A4 |
SCL |
A4 |
Kretsförbindelser mellan 74HC595 IC och Arduino Uno:
74HC595 IC |
Arduino UNO |
11-SH_CP (SRCLK) |
6 |
12-ST_CP (RCLK) |
5 |
14-DS (data) |
4 |
13-OE (spärr) |
GND |
8-GND |
GND |
10-MR (SRCLR) |
+ 5V |
16-VCC |
+ 5V |
Kretsförbindelser mellan IC 74HC595 och fyrsiffrigt sju segment och Arduino UNO:
4-siffrigt SevenSegment |
IC 74HC595 |
Arduino UNO |
A |
Q0 |
- |
B |
Q1 |
- |
C |
Q2 |
- |
D |
Q3 |
- |
E |
Q4 |
- |
F |
Q5 |
- |
G |
F6 |
- |
D1 |
- |
10 |
D2 |
- |
11 |
D3 |
- |
12 |
D4 |
- |
9 |
Programmering Arduino UNO för Multiplexing Seven Segment Display
Den fullständiga koden och arbetsvideoen bifogas i slutet av denna handledning. I programmeringsavsnittet förklaras hur tiden (timme och minut) tas från RTC-modulen i 24-timmarsformat och sedan konverteras den till respektive format för att visa dem i den fyrsiffriga 7-segmentsdisplayen.
För att koppla ihop DS3231 RTC-modulen med Arduino UNO används I2C-bussen till Arduino UNO. Ett bibliotek kallas
I detta koncept tas timme och minut först från RTC och de kombineras tillsammans som 0930 (09:30) och sedan separeras de enskilda siffrorna som tusen, hundra, tiotalsenheter och de enskilda siffrorna omvandlas till binärt format som 0 till 63 (0111111). Denna binära kod skickas till ett skiftregister och sedan från skiftregistret till sju-segmentet och framgångsrikt visar siffran 0 i sju segmentvisningen. På detta sätt multiplexeras de fyra siffrorna och timme och minut visas.
Inledningsvis ingår det nödvändiga biblioteket såsom DS3231-bibliotek och Wire-bibliotek (I2C-bibliotek).
#omfatta
Stiften är definierade för sju segmentkontrollen. Dessa kontroller kommer att spela en viktig roll vid multiplexering av skärmen.
#define latchPin 5 #define clockPin 6 #define dataPin 4 #define dot 2
Variablerna deklareras för att lagra det konverterade eller råa resultatet från RTC.
int h; // Variabel deklarerad för timme int m; // Variabel deklarerad för minut int tusentals; int hundratals; int tiotals; int enhet; bool h24; bool PM;
Därefter deklareras objektet för klassen DS3231 som RTC för att förenkla användningen i ytterligare rader.
DS3231 RTC;
Eftersom RTC-modulen är gränssnitt med Arduino med hjälp av I2C-kommunikation. Så, wire.begin () används för att starta I2C-kommunikation i standardadress för RTC eftersom det inte finns några andra I2C-moduler.
Wire.begin ();
Den stift-läge definieras, huruvida GPIO kommer att bete sig som utsignal eller inmatning.
pinMode (9, OUTPUT); pinMode (10, OUTPUT); pinMode (11, OUTPUT); pinMode (12, OUTPUT); pinMode (latchPin, OUTPUT); pinMode (clockPin, OUTPUT); pinMode (dataPin, OUTPUT); pinMode (punkt, UTGÅNG);
Slingan går oändligt och det tar tiden i timme och minut från RTC DS3231-modulen. 'h24' anger variabeln för 24-timmarsformat.
int h = RTC.getHour (h24, PM); int m = RTC.getMinute ();
Sedan kombineras timme och minut som ett nummer (exempelvis om timme är 10 och min är 60 är talet 10 * 100 = 1000 + 60 = 1060).
int antal = h * 100 + m;
De enskilda siffrorna från siffran erhålls (exempel 1060-1 är tusen, 0 hunderas, 1 är tionde och 0 är sista siffran). För att separera siffrorna används moduloperatorn. Till exempel, i 1060 för att få 1 då 1060/1000 = 1,06% 10 = 1). Så separata siffror lagras i separata variabler.
int tusentals = antal / 1000% 10; int hundratals = antal / 100% 10; int tio = antal / 10% 10; int-enhet = antal% 10;
Därefter definieras en switch case-uttalande för varje enskild siffra för att konvertera dem till respektive format (binärt format) och skicka ut via skiftregister för att visas i 7-segment. Till exempel (för en siffra ändras den till 06 (0000 0110)). Så att den skickas ut via shift och 1 siffra visas i 7-segment (0 för LOW, 1 för HIGH).
växel (t) { fall 0: enhet = 63; ha sönder; fall 1: enhet = 06; ha sönder; fall 2: enhet = 91; ha sönder; fall 3: enhet = 79; ha sönder; fall 4: enhet = 102; ha sönder; fall 5: enhet = 109; ha sönder; fall 6: enhet = 125; fall 7: enhet = 07; ha sönder; fall 8: enhet = 127; ha sönder; fall 9: enhet = 103; ha sönder; }
Därefter skickas den enskilda siffran i binärt format ut via 'shiftout' -funktionen med MSB först och respektive siffertapp görs HÖG och spärrstift görs HÖG.
digitalWrite (9, LOW); digitalWrite (latchPin, LOW); shiftOut (dataPin, clockPin, MSBFIRST, tusentals); digitalWrite (latchPin, HIGH); digitalWrite (9, HÖG); fördröjning (5);
Detta avslutar hela koden. Det mesta av funktionsförklaringen ges i kodkommentaravsnittet precis bredvid kodraden. Klockfrekvensen kommer att avgöra vyn för tid och kvalitet på multiplexing Dvs. om låg klocka används då kan flimrningen ses där som om klockhastigheten är hög då kommer det inte att bli en sådan flimmer och en stadig tid kan ses.
Observera att för att komma åt RTC-modulen måste I2C-busspänningen bibehållas. För att ge några förslag eller om du är osäker, vänligen kommentera nedan.