- Būtini komponentai
- 4 skaitmenų 7 segmentų ekranas
- 74HC595 „Shift Register IC“
- DS3231 RTC modulis
- Grandinės schema
- „Arduino UNO“ programavimas septynių segmentų ekrano multipleksavimui
Skaitmeniniai sieniniai laikrodžiai šiuo metu tampa vis populiaresni ir jie yra geresni nei analoginis laikrodis, nes jis pateikia tikslų laiką valandomis, minutėmis ir sekundėmis ir lengvai nuskaito reikšmes. Kai kuriuose skaitmeniniuose laikrodžiuose taip pat yra daugybė galimybių, pavyzdžiui, rodyti temperatūrą, drėgmę, nustatyti kelis aliarmus ir pan. Daugumoje skaitmeninių laikrodžių naudojamas septynių segmentų ekranas.
Anksčiau mes sukūrėme daugybę skaitmeninių laikrodžių grandinių, naudodami 7 segmentų ekranus arba naudodami 16x2 LCD ekraną. Čia galite išsamią AVR pagrindu veikiančio skaitmeninio laikrodžio PCB konstrukciją. Šioje pamokoje kalbama apie skaitmeninio laikrodžio sukūrimą dauginant keturių 7 segmentų ekranus naudojant „Arduino UNO“ ir rodant laiką HH: MM formatu.
Būtini komponentai
- 4 skaitmenų 7 segmentų ekranas
- 74HC595 IC
- DS3231 RTC modulis
- „Arduino UNO“
- Bandomoji Lenta
- Jungiamieji laidai
4 skaitmenų 7 segmentų ekranas
4 skaitmenų 7 segmentų ekrane yra keturi septyni segmentų ekranai, sujungti arba, galima sakyti, multipleksuoti kartu. Jie naudojami skaitmeninėms vertėms ir kai kurioms abėcėlėms su kableliais ir dvitaškiais pateikti. Ekraną galima naudoti abiem kryptimis. Keturi skaitmenys yra naudingi kuriant skaitmeninius laikrodžius ar panašiai kaip skaičiuoti skaičius nuo 0 iki 9999. Žemiau pateikiama vidinė 4 skaitmenų 7 segmentų ekrano schema.
Kiekviename segmente yra vienas šviesos diodas su atskiru LED valdymu. Yra dviejų tipų septynių segmentų ekranai, tokie kaip bendras anodas ir bendras katodas. Aukščiau pateiktame paveikslėlyje rodomas įprastas 7 tipo anodo ekranas.
Paprastasis anodas
Bendrame anode visi 8 šviesos diodų teigiami gnybtai (anodai) yra sujungti, vadinami COM. Ir visi neigiami gnybtai paliekami vieni arba prijungti prie mikrovaldiklio kaiščių. Naudojant mikrovaldiklį, jei logika LOW yra nustatyta tam, kad apšviestų tam tikrą šviesos diodų segmentą, ir nustatykite logiką „High“, kad išjungtų LED.
Bendras katodas
Bendrame katode visi 8 šviesos diodų neigiami gnybtai (katodas) yra sujungti, vadinami COM. Ir visi teigiami gnybtai paliekami vieni arba prijungti prie mikrovaldiklio kaiščių. Naudodami mikrovaldiklį, jei nustatyta logika HIGH apšviesti šviesos diodą ir nustatykite LOW, kad išjungtų LED.
Sužinokite daugiau apie 7 segmentų ekranus čia ir patikrinkite, kaip jį galima suderinti su kitais mikrovaldikliais:
- 7 segmentų ekrano sąsaja su „Arduino“
- 7 segmentų ekranų sąveika su „Raspberry Pi“
- Siejamas septynių segmentų ekranas su ARM7-LPC2148
- 7 segmentų ekrano sąsaja su PIC mikrovaldikliu
- 7 segmentų ekrano sąsaja su 8051 mikrovaldikliu
74HC595 „Shift Register IC“
IC 74HC595 taip pat žinomas kaip 8-bit Serial IN - Lygiagretus VAIKAMS "Shift Registruotis. Šis IC gali priimti duomenų įvestį nuosekliai ir lygiagrečiai valdyti 8 išvesties kaiščius. Tai naudinga sumažinant kaiščius, naudojamus iš mikrovaldiklio. Visus 74HC595 pamainų registro projektus galite rasti čia.
74HC595 IC veikimas:
Šis IC naudoja tris kontaktus, tokius kaip „Clock“, „Data & Latch“ su mikrovaldikliu, kad valdytų 8 IC išvesties kaiščius. Laikrodis naudojamas nuolatiniams impulsams iš mikrovaldiklio suteikti, o duomenų kaištis naudojamas duomenims siųsti, pavyzdžiui, kurią išvestį reikia įjungti arba išjungti atitinkamu laikrodžio laiku.
Pinout:
PIN kodas |
PIN vardas |
apibūdinimas |
1,2,3,4,5,6,7 |
Išvesties kaiščiai (nuo Q1 iki Q7) |
74HC595 turi 8 išvesties kaiščius, iš kurių 7 yra šie kaiščiai. Jie gali būti valdomi nuosekliai |
8 |
Žemė |
Prijungtas prie mikrovaldiklio žemės |
9 |
(Q7) nuoseklioji išvestis |
Šis kaištis naudojamas prijungti daugiau nei vieną 74HC595 kaip pakopą |
10 |
(MR) Pagrindinis atstatymas |
Atstatomi visi išėjimai kaip žemi. Norint normaliai veikti, reikia laikyti aukštai |
11 |
(SH_CP) Laikrodis |
Tai laikrodžio kaištis, į kurį reikia pateikti laikrodžio signalą iš MCU / MPU |
12 |
(ST_CP) fiksatorius |
Spynos kaištis naudojamas duomenims atnaujinti į išvesties kaiščius. Jis aktyvus aukštai |
13 |
(OE) Išėjimas įjungti |
„Output Enable“ naudojama išėjimams išjungti. Norint normaliai veikti, reikia laikyti žemai |
14 |
(DS) Serijos duomenys |
Tai yra kaištis, į kurį siunčiami duomenys, pagal kuriuos valdomi 8 išėjimai |
15 |
(Q0) Išvestis |
Pirmasis išvesties kaištis. |
16 |
Vcc |
Šis kaištis maitina IC, paprastai naudojamas + 5 V. |
DS3231 RTC modulis
DS3231 yra RTC modulis. RTC reiškia realaus laiko laikrodį. Šis modulis naudojamas atsiminti laiką ir datą, net jei grandinė nėra maitinama. Jis turi atsarginę baterijos CR2032 dalį, kad modulis veiktų be išorinės energijos. Šiame modulyje taip pat yra temperatūros jutiklis. Modulis gali būti naudojamas įterptuose projektuose, pavyzdžiui, gaminant skaitmeninį laikrodį su temperatūros indikatoriumi ir kt. Čia yra keletas naudingų projektų, kuriuose jis naudojamas:
- Automatinis naminių gyvūnėlių tiektuvas naudojant „Arduino“
- Sąsajos RTC modulis (DS3231) su PIC mikrovaldikliu: skaitmeninis laikrodis
- Sąsajos RTC modulis (DS3231) su MSP430: skaitmeninis laikrodis
- ESP32 realaus laiko laikrodis naudojant DS3231 modulį
- Skaitmeninis sieninis laikrodis PCB naudojant AVR mikrovaldiklį „Atmega16“ ir „DS3231 RTC“
DS3231 kištukas:
PIN vardas |
Naudokite |
VCC |
Prijungtas prie maitinimo šaltinio teigiamo |
BND |
Prijungtas prie žemės |
SDA |
Serijos duomenų kaištis (I2C) |
SCL |
Serijinis laikrodžio kaištis (I2C) |
SQW |
Kvadratinės bangos išvesties kaištis |
32 tūkst |
32K osciliatoriaus išėjimas |
Savybės ir specifikacijos:
- RTC skaičiuoja sekundes, minutes, valandas ir metus
- Skaitmeninis temperatūros jutiklis ± 3ºC tikslumu
- Prisiregistruokite senėjimo apdailai
- 400 kHz I2C sąsaja
- Mažas energijos suvartojimas
- „CR2032“ baterijos atsarginė kopija, veikianti dvejus ar trejus metus
- Darbinė įtampa: nuo 2,3 iki 5,5 V
Grandinės schema
Grandinės jungtis tarp DS3231 RTC ir „Arduino UNO“:
DS3231 |
„Arduino UNO“ |
VCC |
5V |
BND |
BND |
SDA |
A4 |
SCL |
A4 |
Grandinės jungtys tarp 74HC595 IC ir „Arduino Uno“:
74HC595 IC |
„Arduino UNO“ |
11-SH_CP (SRCLK) |
6 |
12-ST_CP (RCLK) |
5 |
14-DS (duomenys) |
4 |
13-OE (fiksatorius) |
BND |
8-BND |
BND |
10-MR (SRCLR) |
+ 5 V |
16-VCC |
+ 5 V |
Grandinės jungtys tarp IC 74HC595 ir 4 skaitmenų septynių segmentų ir „Arduino UNO“:
4 skaitmenų „SevenSegment“ |
IC 74HC595 |
„Arduino UNO“ |
A |
Q0 |
- |
B |
Q1 |
- |
C |
Q2 |
- |
D |
Q3 |
- |
E |
Q4 |
- |
F |
Q5 |
- |
G |
Q6 |
- |
D1 |
- |
10 |
D2 |
- |
11 |
D3 |
- |
12 |
D4 |
- |
9 |
„Arduino UNO“ programavimas septynių segmentų ekrano multipleksavimui
Pilnas kodas ir darbinis vaizdo įrašas pridedami šios pamokos pabaigoje. Programavimo skyriuje bus paaiškinta, kaip laikas (valanda ir minutė) yra paimamas iš RTC modulio 24 valandų formatu ir tada jis konvertuojamas į atitinkamą formatą, kad jie būtų rodomi 4 skaitmenų 7 segmentų ekrane.
Norėdami susieti DS3231 RTC modulį su „Arduino UNO“, naudojama „Arduino UNO“ I2C magistralė. Paskambino biblioteka
Šioje koncepcijoje valanda ir minutė pirmiausia paimamos iš RTC ir sujungiamos kartu kaip 0930 (9:30 pm), tada atskiri skaitmenys atskiriami kaip tūkstantis, šimtas, dešimtys, vienetas, o atskiri skaitmenys paverčiami dvejetainiu formatu, pavyzdžiui, 0 į 63 (0111111). Šis dvejetainis kodas siunčiamas į poslinkių registrą ir tada iš pamainų registro į septynių segmentų sąrašą, sėkmingai rodant skaitmenį 0 septynių segmentų ekrane. Tokiu būdu keturi skaitmenys yra daugybiniai ir rodoma valanda ir minutė.
Iš pradžių įtraukta reikalinga biblioteka, pvz., DS3231 biblioteka ir „Wire“ biblioteka („I2C“ biblioteka).
# įtraukti
Smeigtukai yra apibrėžti septynių segmentų valdymui. Šie valdikliai vaidins svarbų vaidmenį multipleksuojant ekraną.
#define latchPin 5 #define clockPin 6 #define dataPins 4 #define dot 2
Skelbiama, kad kintamieji saugo konvertuotą arba neapdorotą rezultatą, paimtą iš RTC.
int h; // Kintamasis deklaruotas valandai int m; // Kintamasis deklaruotas minutės int tūkstančiams; int šimtai; int dešimtys; int vienetas; bool h24; bool PM;
Toliau DS3231 klasės objektas yra deklaruojamas kaip RTC, siekiant supaprastinti naudojimą kitose eilutėse.
DS3231 RTC;
Kadangi RTC modulis yra susietas su „Arduino“ naudojant I2C ryšį. Taigi, wire.begin () naudojamas pradėti I2C ryšį numatytuoju RTC adresu, nes nėra kitų I2C modulių.
Viela.prasideda ();
Kaištis režimas yra apibrėžta, ar GPIO veiks kaip išėjimo signalą arba įvesties.
pinMode (9, OUTPUT); pinMode (10, OUTPUT); pinMode (11, OUTPUT); pinMode (12, OUTPUT); pinMode (latchPin, OUTPUT); pinMode (clockPin, OUTPUT); pinMode (dataPin, OUTPUT); pinMode (taškas, OUTPUT);
Kilpa veikia be galo, o nuo RTC DS3231 modulio reikia laiko valandomis ir minutėmis. „h24“ nurodo 24 valandų formato kintamąjį.
int h = RTC.getHour (h24, PM); int m = RTC.getMinute ();
Tada valanda ir minutė sujungiami kaip vienas skaičius (pavyzdžiui, jei valanda yra 10, o min yra 60, tada skaičius yra 10 * 100 = 1000 + 60 = 1060).
int skaičius = h * 100 + m;
Į atskirus skaitmenis nuo skaičiaus, yra gauta (pavyzdžiui 1060- 1 yra tūkstančiai, 0 yra hundered 1 yra dešimta ir 0 yra paskutinis skaitmuo). Skaičiams atskirti naudojamas modulio operatorius. Pavyzdžiui, 1060 m., Norint gauti 1, tada 1060/1000 = 1,06% 10 = 1). Taigi atskiri skaitmenys saugomi atskiruose kintamuosiuose.
int tūkstančiai = skaičius / 1000% 10; int šimtai = skaičius / 100% 10; int dešimtys = skaičius / 10% 10; int vienetas = skaičius% 10;
Po to apibrėžiamas kiekvieno atvejo jungiklio atvejo pareiškimas, paverčiantis juos atitinkamu formatu (dvejetainiu formatu) ir išsiunčiant per pamainų registrą, kad būtų rodomas 7 segmentuose. Pvz. (1 skaitmuo pakeičiamas į 06 (0000 0110)). Taip, kad jis būtų išsiųstas perjungus „Shift“ ir 1 skaitmuo būtų rodomas 7 segmentuose (0 - LOW, 1 - HIGH).
jungiklis (t) { atvejis 0: vienetas = 63; pertrauka; 1 atvejis: vienetas = 06; pertrauka; 2 atvejis: vienetas = 91; pertrauka; 3 atvejis: vienetas = 79; pertrauka; 4 atvejis: vienetas = 102; pertrauka; 5 atvejis: vienetas = 109; pertrauka; 6 atvejis: vienetas = 125; 7 atvejis: vienetas = 07; pertrauka; 8 atvejis: vienetas = 127; pertrauka; 9 atvejis: vienetas = 103; pertrauka; }
Tada atskiras skaitmuo dvejetainiu formatu išsiunčiamas per „shiftout“ funkciją, pirmiausia naudojant MSB, o atitinkamas skaitmens kaištis padaromas AUKŠTU, o užrakto kaištis padaromas AUKŠTU.
„digitalWrite“ (9, LOW); digitalWrite (latchPin, LOW); shiftOut (dataPin, clockPin, MSBFIRST, tūkstančiai); „digitalWrite“ („latchPin“, HIGH); „digitalWrite“ (9, HIGH); vėlavimas (5);
Tai užbaigia visą kodą. Dauguma funkcijos paaiškinimų pateikiami kodo komentarų skyriuje šalia kodo eilutės. Laikrodžio dažnis nulems multipleksavimo laiko ir kokybės vaizdą, ty, jei naudojamas žemas laikrodis, mirksėjimas gali būti matomas ten, kur laikrodžio greitis yra didelis, tada tokio mirksėjimo nebus ir bus matomas pastovus laikas.
Atkreipkite dėmesį, kad norint pasiekti RTC modulį, reikia palaikyti I2C magistralės įtampą. Norėdami pateikti kokių nors pasiūlymų arba jei turite kokių nors abejonių, prašome pateikti komentarus žemiau.