- Potrebne komponente
- Štirimestni 7-segmentni zaslon
- 74HC595 IC Shift Register
- Modul RTC DS3231
- Shema vezja
- Programiranje Arduino UNO za multipleksiranje sedemsegmentnega prikaza
Digitalne stenske ure so danes vse bolj priljubljene in so boljše od analognih ur, saj zagotavljajo natančen čas v urah, minutah in sekundah ter enostavno preberejo vrednosti. Nekatere digitalne ure imajo tudi veliko naprav, kot so prikaz temperature, vlage, nastavitev več alarmov itd. Večina digitalnih ur uporablja sedemsegmentni zaslon.
Pred tem smo zgradili veliko vezij digitalnih ur bodisi z uporabo 7-segmentnih zaslonov bodisi s 16x2 LCD-jem. Tu lahko najdete celotne zasnove PCB digitalne ure na osnovi AVR. Ta vadnica govori o izdelavi digitalne ure z multipleksiranjem štiri-7-segmentnih zaslonov z uporabo Arduino UNO in prikazovanjem časa v formatu HH: MM.
Potrebne komponente
- Štirimestni 7-segmentni zaslon
- 74HC595 IC
- Modul RTC DS3231
- Arduino UNO
- Breadboard
- Priključne žice
Štirimestni 7-segmentni zaslon
Štirimestni 7-segmentni zaslon ima štiri sedemsegmentne zaslone, ki so združeni ali lahko rečemo multipleksirani. Uporabljajo se za prikaz številskih vrednosti in tudi nekaterih abeced z decimalnimi črkami in dvopičjem. Zaslon lahko uporabljate v obe smeri. Štiri števke so uporabne za izdelavo digitalnih ur ali za štetje številk od 0 do 9999. Spodaj je notranji diagram za 4-mestni 7-segmentni prikaz.
Vsak segment ima eno LED z individualnim LED nadzorom. Obstajata dve vrsti sedemsegmentnih zaslonov, kot sta Common Anode in Common Cathode. Na zgornji sliki je prikazan skupni prikaz segmenta anode tipa 7.
Skupna anoda
V Common Anode so vsi pozitivni terminali (Anode) vseh 8 LED diod povezani skupaj, imenovani COM. In vsi negativni terminali ostanejo sami ali povezani z zatiči mikrokrmilnika. Če je z uporabo mikrokrmilnika nastavljena logika LOW (Osvetlitev) za osvetlitev določenega segmenta LED in nastavitev High (Visoka) za izklop LED.
Skupna katoda
V Common Cathode so vsi negativni terminali (katoda) vseh 8 LED diod povezani skupaj, imenovani COM. In vsi pozitivni terminali ostanejo sami ali povezani z zatiči mikrokrmilnika. Če z uporabo mikrokrmilnika nastavite logiko HIGH za osvetlitev LED in nastavite LOW za izklop LED.
Tukaj preberite več o 7-segmentnih zaslonih in preverite, kako jih je mogoče povezati z drugimi mikrokrmilniki:
- 7-segmentno povezovanje zaslona z Arduinom
- 7-segmentno povezovanje zaslona z Raspberry Pi
- Povezava sedemsegmentnega zaslona z ARM7-LPC2148
- 7-segmentno povezovanje zaslona z mikrokrmilnikom PIC
- 7-segmentno povezovanje zaslona z mikrokrmilnikom 8051
74HC595 IC Shift Register
IC 74HC595 znan tudi kot 8-Bit Serial IN - Vzporedno OUT Shift Register. Ta IC lahko serijsko prejema vhodne podatke in lahko vzporedno krmili 8 izhodnih zatičev. To je koristno pri zmanjševanju zatičev, ki jih uporablja mikrokrmilnik. Vse projekte, povezane s registrom premikov 74HC595, lahko najdete tukaj.
Delujejo 74HC595 IC:
Ta IC uporablja tri zatiče, kot so Clock, Data & Latch z mikrokrmilnikom, za nadzor 8 izhodnih zatičev IC. Ura se uporablja za neprekinjeno oddajanje impulzov iz mikrokrmilnika, podatkovni zatič pa za pošiljanje podatkov, na primer, kateri izhod mora biti vklopljen ali izklopljen ob ustrezni uri.
Pinout:
PIN številka |
Pripnite ime |
Opis |
1,2,3,4,5,6,7 |
Izhodni zatiči (od Q1 do Q7) |
74HC595 ima 8 izhodnih zatičev, od tega 7 teh zatičev. Nadzorovati jih je mogoče serijsko |
8. |
Tla |
Priključen na zemljo mikrokrmilnika |
9. |
(Q7) Serijski izhod |
Ta zatič se uporablja za kaskadno povezovanje več kot 74HC595 |
10. |
(MR) Glavna ponastavitev |
Vse izhode ponastavi kot nizke. Za normalno delovanje ga je treba držati visoko |
11. |
(SH_CP) Ura |
To je zatič ure, na katerega mora biti iz MCU / MPU poslan signal ure |
12. |
(ST_CP) Zapah |
Zatič zapaha se uporablja za posodobitev podatkov na izhodne nožice. Aktivno je visoko |
13. |
(OE) Omogoči izhod |
Omogočanje izhoda se uporablja za izklop izhodov. Za normalno delovanje mora biti nizko |
14. |
(DS) Zaporedni podatki |
To je zatič, na katerega se pošiljajo podatki, na podlagi katerega se nadzoruje 8 izhodov |
15. |
(Q0) Izhod |
Prvi izhodni zatič. |
16. |
Vcc |
Ta zatič napaja IC, običajno se uporablja + 5V. |
Modul RTC DS3231
DS3231 je RTC modul. RTC pomeni Real Time Clock. Ta modul se uporablja za zapomnitev ure in datuma, tudi če vezje ni napajano. Ima rezervno baterijo CR2032 za zagon modula brez zunanjega napajanja. Ta modul vključuje tudi temperaturni senzor. Modul se lahko uporablja pri vdelanih projektih, kot je izdelava digitalne ure s temperaturnim indikatorjem itd.
- Samodejni podajalnik hišnih ljubljenčkov z uporabo Arduina
- Povezovanje RTC modula (DS3231) z mikrokrmilnikom PIC: digitalna ura
- Povezovanje modula RTC (DS3231) z MSP430: digitalna ura
- Ura v realnem času ESP32 z uporabo modula DS3231
- Digitalna stenska ura na PCB z uporabo mikrokrmilnika AVR Atmega16 in DS3231 RTC
Pinout DS3231:
Pripnite ime |
Uporaba |
VCC |
Priključen na pozitiven vir energije |
GND |
Povezan z zemljo |
SDA |
Zaporedni podatkovni zatič (I2C) |
SCL |
Zaporedni zatič ure (I2C) |
SQW |
Izhodni zatič kvadratnega vala |
32K |
Izhod oscilatorja 32K |
Lastnosti in specifikacije:
- RTC šteje sekunde, minute, ure in leto
- Digitalni temperaturni senzor z natančnostjo ± 3ºC
- Registrirajte se za urejanje staranja
- 400Khz I2C vmesnik
- Nizka poraba energije
- Rezervna baterija CR2032 z dve do triletno življenjsko dobo
- Delovna napetost: 2,3 do 5,5 V.
Shema vezja
Krožna povezava med DS3231 RTC in Arduino UNO:
DS3231 |
Arduino UNO |
VCC |
5V |
GND |
GND |
SDA |
A4 |
SCL |
A4 |
Vezja med 74HC595 IC in Arduino Uno:
74HC595 IC |
Arduino UNO |
11-SH_CP (SRCLK) |
6. |
12-ST_CP (RCLK) |
5. |
14-DS (podatki) |
4. |
13-OE (zapah) |
GND |
8-GND |
GND |
10-MR (SRCLR) |
+ 5V |
16-VCC |
+ 5V |
Vezja med IC 74HC595 in 4-mestnim sedmim segmentom ter Arduino UNO:
4-DigitSevenSegment |
IC 74HC595 |
Arduino UNO |
A |
Q0 |
- |
B |
Q1 |
- |
C |
Q2 |
- |
D |
Q3 |
- |
E |
V4 |
- |
F |
V5 |
- |
G |
V6 |
- |
D1 |
- |
10. |
D2 |
- |
11. |
D3 |
- |
12. |
D4 |
- |
9. |
Programiranje Arduino UNO za multipleksiranje sedemsegmentnega prikaza
Celotna koda in delujoči video sta priložena na koncu te vadnice. V oddelku za programiranje bo razloženo, kako se čas (ura in minuta) vzame iz modula RTC v 24-urni obliki in nato pretvori v ustrezno obliko za njihov prikaz na 4-mestnem 7-segmentnem zaslonu.
Za povezavo modula DS3231 RTC z Arduino UNO se uporablja vodilo I2C Arduino UNO. Knjižnica z imenom
V tem konceptu se ura in minuta najprej vzameta iz RTC in se združita skupaj, na primer 0930 (21:30), nato pa se posamezne številke ločijo kot tisoč, sto, deset, enota in posamezne številke, pretvorjene v binarni format, kot je 0 v 63 (0111111). Ta binarna koda se pošlje v prestavni register in nato iz prestavnega registra v sedemsegmentni, pri čemer se na sedemsegmentnem zaslonu uspešno prikaže številka 0. Na ta način se štiri številke pomnožijo in prikažejo se ura in minuta.
Sprva je vključena potrebna knjižnica, kot sta knjižnica DS3231 in knjižnica Wire (knjižnica I2C).
#include
Zatiči so definirani za nadzor sedmih segmentov. Ti kontrolniki bodo imeli pomembno vlogo pri multipleksiranju zaslona.
#define zapahPin 5 #define clockPin 6 #define dataPin 4 #define dot 2
Spremenljivke so deklarirane za shranjevanje pretvorjenega ali neobdelanega rezultata, vzetega iz RTC.
int h; // Spremenljivka, deklarirana za uro int m; // Spremenljivka, deklarirana za minute int tisoč; int stotine; int deset; int enota; bool h24; bool PM;
Nato je objekt za razred DS3231 razglašen za RTC za poenostavitev uporabe v nadaljnjih vrsticah.
DS3231 RTC;
Ker je modul RTC povezan z Arduinom s pomočjo komunikacije I2C. Torej, wire.begin () se uporablja za zagon komunikacije I2C v privzetem naslovu RTC, saj ni drugih modulov I2C.
Wire.begin ();
Določen je način zatiča, ali se bo GPIO obnašal kot izhod ali vhod.
pinMode (9, IZHOD); pinMode (10, IZHOD); pinMode (11, IZHOD); pinMode (12, IZHOD); pinMode (zapahPin, IZHOD); pinMode (clockPin, OUTPUT); pinMode (dataPin, OUTPUT); pinMode (pika, IZHOD);
Zanka teče neskončno in traja čas v urah in minutah od modula RTC DS3231. 'h24' označuje spremenljivko formata 24 ur.
int h = RTC.getHour (h24, PM); int m = RTC.getMinute ();
Nato se ura in minuta združita kot eno število (primer, če je ura 10 in min 60, je število 10 * 100 = 1000 + 60 = 1060).
int število = h * 100 + m;
Za posamezne številke od števila dobimo (primer 1060- 1 je tisoč, 0 je hundered, 1 je deseto in 0 je zadnja števka). Za ločevanje števk se uporablja operator modula. Na primer, leta 1060, da dobite 1, potem 1060/1000 = 1,06% 10 = 1). Ločene številke so torej shranjene v ločenih spremenljivkah.
int tisoč = število / 1000% 10; int stotine = število / 100% 10; int desetke = število / 10% 10; int enota = število% 10;
Nato se za vsako posamezno številko določi stavek primera preklopa za njihovo pretvorbo v ustrezen format (binarni format) in pošiljanje prek premičnega registra za prikaz v 7-segmentu. Na primer (za 1 številko se spremeni v 06 (0000 0110)). Tako se pošlje prek premika in 1 številka se prikaže v 7-segmentu (0 za NIZKO, 1 za VISOKO).
stikalo (t) { primer 0: enota = 63; odmor; primer 1: enota = 06; odmor; primer 2: enota = 91; odmor; primer 3: enota = 79; odmor; primer 4: enota = 102; odmor; primer 5: enota = 109; odmor; primer 6: enota = 125; primer 7: enota = 07; odmor; primer 8: enota = 127; odmor; primer 9: enota = 103; odmor; }
Nato se posamezna številka v binarnem formatu pošlje s funkcijo 'shiftout' s prvo MSB, ustrezni številski zatič pa se postavi HIGH in zatič zapaha HIGH.
digitalWrite (9, LOW); digitalWrite (latchPin, LOW); shiftOut (dataPin, clockPin, MSBFIRST, na tisoče); digitalWrite (latchPin, HIGH); digitalWrite (9, VISOKO); zamuda (5);
S tem je končana celotna koda. Večina razlag funkcije je podana v razdelku za komentar kode tik ob vrstici kode. Frekvenca ure bo določila pogled na čas in kakovost multipleksiranja, tj. Če se uporablja nizka ura, je mogoče videti utripanje, kjer kot da je hitrost ure takšna, utripanja ne bo in se bo videl enakomeren čas.
Za dostop do modula RTC je treba vzdrževati napetost vodila I2C. Če želite dati kakršen koli predlog ali če dvomite, prosimo, komentirajte spodaj.