- Szükséges alkatrészek
- 4-jegyű, 7 szegmenses kijelző
- 74HC595 Shift Register IC
- DS3231 RTC modul
- Kördiagramm
- Az Arduino UNO programozása a hét szegmenses kijelző multiplexeléséhez
A digitális faliórák napjainkban egyre népszerűbbek, és jobbak, mint az analóg óra, mivel pontos időt ad órákban, percekben és másodpercekben, és könnyen leolvashatja az értékeket. Néhány digitális órának számos lehetősége van, például hőmérséklet, páratartalom kijelzése, több riasztás beállítása stb. A legtöbb digitális óra hét szegmenses kijelzőt használ.
Korábban számos digitális óra áramkört építettünk akár 7 szegmenses kijelzőkkel, akár 16x2 LCD-vel. Itt elkészítheti az AVR alapú digitális óra teljes NYÁK-terveit. Ez az oktatóanyag arról szól, hogy készítsen digitális órát négy-7 szegmenses kijelző multiplexelésével az Arduino UNO segítségével, és az időt HH: MM formátumban jelenítse meg.
Szükséges alkatrészek
- 4-jegyű, 7 szegmenses kijelző
- 74HC595 IC
- DS3231 RTC modul
- Arduino UNO
- Kenyérlemez
- Csatlakozó vezetékek
4-jegyű, 7 szegmenses kijelző
A négyjegyű 7 szegmenses kijelzőn négy hét szegmenses kijelző van összekapcsolva, vagy mondhatjuk úgy, hogy multiplexeljük. Számos értékek, valamint néhány tizedes és kettőspontos ábécé megjelenítésére szolgálnak. A kijelző mindkét irányban használható. Négy számjegy használható digitális órák készítéséhez, vagy hasonlóan a 0 és 9999 közötti számoláshoz. Az alábbiakban bemutatjuk a 4-jegyű 7 szegmenses kijelző belső diagramját.
Minden szegmenshez tartozik egy LED, egyedi LED-vezérléssel. Kétféle hét szegmenses megjelenítés létezik, például a közös anód és a közös katód. A fenti kép a közös anód típusú 7 szegmens megjelenítését mutatja.
Közös anód
A közös anódban a 8 LED összes pozitív kapcsa (anód) össze van kötve, COM néven. És az összes negatív terminál egyedül marad, vagy csatlakozik a mikrokontroller csapjaihoz. Mikrovezérlő használatával, ha a LOW logika be van állítva az adott LED-szakasz megvilágítására, és a High logikai értékre állítja a LED kikapcsolását.
Közös katód
A közös katódban a 8 LED összes negatív terminálja (katódja) össze van kötve, COM néven. És az összes pozitív terminál egyedül marad, vagy csatlakozik a mikrokontroller csapjaihoz. Mikrokontroller használatával, ha a HIGH logikát állítja be a LED megvilágításához, és a LOW beállítást állítja a LED kikapcsolásához.
Tudjon meg többet a 7 szegmenses kijelzőről itt, és ellenőrizze, hogyan lehet összekapcsolni más mikrovezérlőkkel:
- 7 szegmenses kijelző összekapcsolása az Arduinóval
- 7 szegmenses kijelző összekapcsolása a Raspberry Pi-vel
- Összekötő hét szegmenses kijelző az ARM7-LPC2148-mal
- 7 Szegmenses kijelző összekapcsolása a PIC mikrovezérlővel
- 7 szegmenses kijelző összekapcsolása a 8051 mikrokontrollerrel
74HC595 Shift Register IC
Az IC 74HC595 más néven 8 bites soros IN - Párhuzamos OUT váltási regiszter. Ez az IC soros adatbevitelt képes fogadni, és párhuzamosan vezérelhet 8 kimeneti csapot. Ez hasznos a mikrokontroller által használt csapok csökkentésében. Az összes 74HC595 műszakregiszterrel kapcsolatos projekt itt található.
A 74HC595 IC működése:
Ez az IC három érintkezõt használ, mint például az Óra, Adatok és Latch a mikrovezérlõvel az IC 8 kimeneti érintkezõjének vezérlésére. Az órát arra használják, hogy folyamatosan impulzusokat adjon a mikrovezérlőtől, és az adatcsapot használják az adatok küldésére, például azt, hogy melyik kimenetet kell bekapcsolni vagy kikapcsolni a megfelelő óra időpontban.
Kitűzni:
Pinkód |
PIN neve |
Leírás |
1,2,3,4,5,6,7 |
Kimeneti csapok (Q1-Q7) |
A 74HC595 8 kimeneti tűvel rendelkezik, amelyek közül 7 ezek a csapok. Sorozatosan vezérelhetők |
8. |
Talaj |
Csatlakoztatva a mikrovezérlő földjéhez |
9. |
(Q7) Soros kimenet |
Ezt a csapot egynél több 74HC595 összekapcsolására használják kaszkádként |
10. |
(MR) Master Reset |
Az összes kimenetet alacsonyra állítja. A normál működéshez magasan kell tartani |
11. |
(SH_CP) Óra |
Ez az órajel, amelyhez az órajelet az MCU / MPU-tól kell biztosítani |
12. |
(ST_CP) Retesz |
A reteszcsap segítségével az adatok frissíthetők a kimeneti csapokra. Magasan aktív |
13. |
(OE) Kimenet engedélyezése |
Az Output Enable a kimenetek kikapcsolására szolgál. A normál működéshez alacsonyan kell tartani |
14 |
(DS) Soros adatok |
Ez az a pin, amelyre az adatokat elküldik, amely alapján a 8 kimenetet vezérlik |
15 |
(Q0) Kimenet |
Az első kimeneti tű. |
16. |
Vcc |
Ez a tű táplálja az IC-t, általában + 5 V-ot használunk. |
DS3231 RTC modul
A DS3231 egy RTC modul. Az RTC a Real Time Clock rövidítést jelenti. Ezt a modult arra használják, hogy emlékezzen az időre és a dátumra, még akkor is, ha az áramkör nem működik. Rendelkezik egy CR2032 akkumulátor-tartalékkal, amely külső áramellátás nélkül futtatja a modult. Ez a modul tartalmaz egy hőmérséklet-érzékelőt is. A modul beágyazott projektekben használható, például digitális óra készítéséhez hőmérséklet-jelzővel stb. Itt található néhány hasznos projekt:
- Automatikus állateledel Arduino használatával
- Az RTC modul (DS3231) összekapcsolása PIC mikrovezérlővel: digitális óra
- Az RTC modul (DS3231) és az MSP430 összekapcsolása: Digitális óra
- ESP32 valós idejű óra a DS3231 modul használatával
- Digitális fali óra NYÁK-n az AVR mikrokontroller Atmega16 és DS3231 RTC segítségével
DS3231 pinout:
PIN neve |
Használat |
VCC |
Az áramforrás pozitívjához csatlakozik |
GND |
Csatlakoztatva a földhöz |
SDA |
Soros adat tű (I2C) |
SCL |
Soros óra tű (I2C) |
SQW |
Szögletes hullámú kimeneti tű |
32K |
32K oszcillátor kimenet |
Jellemzők és specifikációk:
- Az RTC másodperceket, perceket, órákat és éveket számít
- Digitális hőmérséklet-érzékelő ± 3ºC pontossággal
- Regisztráljon az Aging trimre
- 400Khz I2C interfész
- Alacsony energia fogyasztás
- CR2032 akkumulátor-biztonsági mentés két-három év élettartammal
- Üzemi feszültség: 2,3 - 5,5 V
Kördiagramm
Áramköri kapcsolat a DS3231 RTC és az Arduino UNO között:
DS3231 |
Arduino UNO |
VCC |
5V |
GND |
GND |
SDA |
A4 |
SCL |
A4 |
Áramköri kapcsolatok a 74HC595 IC és az Arduino Uno között:
74HC595 IC |
Arduino UNO |
11-SH_CP (SRCLK) |
6. |
12-ST_CP (RCLK) |
5. |
14-DS (adatok) |
4 |
13-OE (retesz) |
GND |
8-GND |
GND |
10-MR (SRCLR) |
+ 5V |
16-VCC |
+ 5V |
Áramköri kapcsolatok az IC 74HC595 és a 4 számjegyű hét szegmens és az Arduino UNO között:
4-DigitSevenSegment |
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. |
Az Arduino UNO programozása a hét szegmenses kijelző multiplexeléséhez
A teljes kód és a működő videó az oktatóanyag végén található. A programozási részben megmagyarázzák, hogyan kell az időt (órát és percet) venni az RTC modulból 24 órás formátumban, majd átalakítani a megfelelő formátumba, hogy a 4 számjegyű, 7 szegmenses kijelzőn megjelenjenek.
A DS3231 RTC modul és az Arduino UNO közötti interfészhez az Arduino UNO I2C buszját kell használni. Hívott könyvtár
Ebben a koncepcióban az órát és a percet először az RTC-ből veszik, és ezeket úgy kombinálják, mint 0930 (09:30 pm), majd az egyes számokat elválasztják, mint ezer, száz, tíz, egység, és az egyes számokat bináris formátumra konvertálják, például 0 a 63-ba (0111111). Ezt a bináris kódot egy shift regiszterbe küldik, majd a shift regiszterből a hét szegmensbe, sikeresen megjelenítve a 0 számot hét szegmenses kijelzőn. Így a négy számjegy multiplexálva van, és megjelenik az óra és a perc.
Kezdetben a szükséges könyvtár szerepel, például a DS3231 könyvtár és a Wire könyvtár (I2C könyvtár).
#include
A csapok a hét szegmens vezérléshez vannak meghatározva. Ezek a vezérlők fontos szerepet játszanak a kijelző multiplexelésében.
#define reteszPin 5 #define clockPin 6 #define dataPin 4 #define dot 2
A változók deklaráltan az RTC-ből átvett konvertált vagy nyers eredmény tárolására szolgálnak.
int h; // Változó az órára deklarálva int m; // percenként deklarált változó int ezer; int száz; int tízes; int egység; bool h24; bool PM;
Ezután a DS3231 osztály objektumát RTC-ként deklaráljuk, hogy egyszerűsítsük a további sorokban történő felhasználást.
DS3231 RTC;
Mivel az RTC modul I2C kommunikációval kapcsolódik az Arduino-hoz. Tehát a wire.begin () az I2C kommunikáció elindítására szolgál az RTC alapértelmezett címében, mivel nincsenek más I2C modulok.
Wire.begin ();
A pin mód meg van határozva, függetlenül attól, hogy a GPIO kimenetként vagy bemenetként fog-e viselkedni.
pinMode (9, OUTPUT); pinMode (10, OUTPUT); pinMode (11, OUTPUT); pinMode (12, OUTPUT); pinMode (latchPin, OUTPUT); pinMode (clockPin, OUTPUT); pinMode (dataPin, OUTPUT); pinMode (pont, OUTPUT);
A hurok végtelenül fut, és órában és percben veszi el az időt az RTC DS3231 modul. A „h24” a 24 órás formátumú változót jelöli.
int h = RTC.getHour (h24, PM); int m = RTC.getMinute ();
Ezután az órát és a percet egy számként kombináljuk (például, ha az óra 10, a min pedig 60, akkor a szám 10 * 100 = 1000 + 60 = 1060).
int szám = h * 100 + m;
Az egyes számjegyek a számot kapunk (például 1060- 1 jelentése ezer, 0 hundered, 1 tizedik és 0 jelentése utolsó számjegy). A számjegyek elválasztásához modulus operátort használnak. Például 1060-ban 1, akkor 1060/1000 = 1,06% 10 = 1). Tehát külön számjegyeket külön változókban tárolnak.
int ezer = szám / 1000% 10; int száz = szám / 100% 10; int tízesek = szám / 10% 10; int egység =% 10 szám;
Ezt követően minden egyes számjegyhez megadunk egy kapcsolási eset-kijelentést, amely átalakítja azokat a megfelelő formátumba (bináris formátumba), és a shift regiszteren keresztül küldi el, hogy 7 szegmensben jelenjen meg. Például (1 számjegy esetén 06-ra (0000 0110) változik). Tehát, hogy shift-en keresztül küldjük, és 1 számjegy jelenik meg 7 szegmensben (0 LOW esetén, 1 HIGH értéknél).
kapcsoló (t) { eset 0: egység = 63; szünet; 1. eset: egység = 06; szünet; 2. eset: egység = 91; szünet; 3. eset: egység = 79; szünet; 4. eset: egység = 102; szünet; 5. eset: egység = 109; szünet; 6. eset: egység = 125; 7. eset: egység = 07; szünet; 8. eset: egység = 127; szünet; 9. eset: egység = 103; szünet; }
Ezután az egyes számjegyeket bináris formátumban a „shiftout” funkcióval küldjük ki először az MSB-vel, és a megfelelő számjegyű PIN-kódot HIGH-ra, a retesz-PIN-kódot pedig HIGH-ra állítjuk.
digitalWrite (9, LOW); digitalWrite (latchPin, LOW); shiftOut (dataPin, clockPin, MSBFIRST, ezer); digitalWrite (latchPin, HIGH); digitalWrite (9, HIGH); késleltetés (5);
Ezzel elkészül a teljes kód. A függvény magyarázatának nagy részét a kód megjegyzés szakasz adja meg, közvetlenül a kód sor mellett. Ha az óra alacsony frekvenciát használ, akkor az óra frekvenciája dönt a multiplexelés idejének és minőségének nézetéről, akkor a villódzás ott látható, ahol mintha az órajel magas lenne, akkor nem villogna és stabil idő látható.
Vegye figyelembe, hogy az RTC modul eléréséhez az I2C busz feszültségét fenn kell tartani. Ha bármilyen javaslatot szeretne adni, vagy kétségei vannak, kérjük, tegye meg észrevételeit alább.