- Tarvittavat komponentit
- 4-numeroinen 7-segmenttinen näyttö
- 74HC595 Vaihtorekisteri IC
- DS3231 RTC-moduuli
- Piirikaavio
- Arduino UNO -ohjelmointi seitsemän segmentin näytön multipleksointiin
Digitaaliset seinäkellot ovat yhä suositumpia nykyään, ja ne ovat parempia kuin analoginen kello, koska se tarjoaa tarkan ajan tunteina, minuutteina ja sekunteina ja sen arvot on helppo lukea. Joissakin digitaalisissa kelloissa on myös monia toimintoja, kuten lämpötilan, kosteuden näyttö, useiden hälytysten asettaminen jne. Suurin osa digitaalisista kelloista käyttää seitsemän segmentin näyttöä.
Olemme aiemmin rakentaneet monia digitaalikellopiirejä joko käyttämällä 7 segmentin näyttöä tai käyttämällä 16x2 LCD -näyttöä. Täällä voit täydelliset AVR-pohjaisen digitaalisen kellon piirilevymallit. Tämä opetusohjelma koskee digitaalisen kellon valmistamista multipleksoimalla neljä - 7 segmenttiä näyttöä Arduino UNO: lla ja näyttämällä aika HH: MM-muodossa.
Tarvittavat komponentit
- 4-numeroinen 7-segmenttinen näyttö
- 74HC595 IC
- DS3231 RTC-moduuli
- Arduino UNO
- Leipälauta
- Johtojen liittäminen
4-numeroinen 7-segmenttinen näyttö
4-numeroisessa 7 segmentin näytössä on neljä seitsemän segmenttinäyttöä, jotka on liitetty toisiinsa tai voimme sanoa multipleksoituna yhteen. Niitä käytetään lukuarvojen ja myös joidenkin aakkosien esittämiseen desimaaleilla ja kaksoispisteillä. Näyttöä voidaan käyttää molempiin suuntiin. Neljä numeroa ovat hyödyllisiä digitaalisten kellojen tekemiseen tai vastaaviin numeroiden laskemiseen välillä 0 - 9999. Alla on 4-numeroisen 7 segmentin näytön sisäinen kaavio.
Jokaisessa segmentissä on yksi LED, jossa on erillinen LED-ohjaus. On olemassa kahden tyyppisiä seitsemän segmenttinäyttöä, kuten yhteinen anodi ja yhteinen katodi. Yllä oleva kuva näyttää yleisen anodityypin 7 segmenttinäytön.
Yhteinen anodi
Yhteisessä anodissa kaikkien 8 LEDin kaikki positiiviset liittimet (anodit) on kytketty yhteen, nimeltään COM. Ja kaikki negatiiviset liittimet jätetään yksin tai liitetään mikrokontrollerin nastoihin. Käyttämällä mikro-ohjainta, jos logiikka LOW on asetettu valaisemaan tiettyä LED-segmenttiä ja asettamaan logiikan High sammuttamaan LED: n.
Yhteinen katodi
Yhteisessä katodissa kaikkien 8 ledin kaikki negatiiviset liittimet (katodi) on kytketty yhteen, nimeltään COM. Ja kaikki positiiviset päätteet jätetään yksin tai liitettyinä mikrokontrollerin nastoihin. Käyttämällä mikro-ohjainta, jos asetat logiikan HIGH valaisemaan LED-valoa ja valitse LOW sammuttamaan LED-valo.
Lisätietoja 7 segmenttinäytöstä on täällä ja tarkista, kuinka se voidaan liittää muihin mikro-ohjaimiin:
- 7 segmenttinäyttö ja Arduino
- 7-segmenttinen näyttö ja Raspberry Pi
- Seitsemän segmentin näyttö ja ARM7-LPC2148
- 7 segmenttinäyttö ja PIC-mikrokontrolleri
- 7 segmentin näytön liitäntä 8051-mikrokontrolleriin
74HC595 Vaihtorekisteri IC
IC 74HC595 tunnetaan myös 8-Bit Serial IN - Parallel OUT Shift Register. Tämä mikropiiri voi vastaanottaa datatuloa sarjaan ja hallita 8 ulostulonasta rinnakkain. Tämä on hyödyllistä pienentämällä mikrokontrollerista käytettyjä nastoja. Löydät kaikki 74HC595-muutosrekisteriin liittyvät projektit täältä.
74HC595 IC: n toiminta:
Tämä IC käyttää kolmea nastaa, kuten Clock, Data & Latch mikrokontrollerin kanssa, ohjaamaan IC: n 8 ulostulonasta. Kelloa käytetään tuottamaan jatkuvasti pulsseja mikro-ohjaimelta ja datanastaa käytetään lähettämään tiedot, kuten mikä lähtö on kytkettävä päälle tai pois päältä kulloinkin kellonaikana.
Sokka irti:
Pin koodi |
PIN-nimi |
Kuvaus |
1,2,3,4,5,6,7 |
Lähtönastat (Q1 - Q7) |
74HC595: ssä on 8 lähtönastaa, joista 7 on näitä nastoja. Niitä voidaan ohjata sarjaan |
8 |
Maa |
Yhdistetty mikro-ohjaimen maahan |
9 |
(Q7) Sarjalähtö |
Tätä tapia käytetään yhdistämään useampi kuin yksi 74HC595 kaskadina |
10 |
(MR) Master Reset |
Palauttaa kaikki lähdöt mataliksi. On pidettävä korkealla normaalia käyttöä varten |
11 |
(SH_CP) Kello |
Tämä on kellotappi, jolle kellosignaali on toimitettava MCU / MPU: lta |
12 |
(ST_CP) Salpa |
Salpa-nastaa käytetään päivittämään tiedot lähtötappeihin. Se on aktiivinen korkealla |
13 |
(OE) Lähtö käytössä |
Output Enable -toimintoa käytetään lähtöjen sammuttamiseen. On pidettävä alhaalla normaalia käyttöä varten |
14 |
(DS) Sarjatiedot |
Tämä on tappi, jolle data lähetetään, jonka perusteella 8 lähtöä ohjataan |
15 |
(Q0) Lähtö |
Ensimmäinen ulostulotappi. |
16 |
Vcc |
Tämä tappi käyttää IC: tä, tyypillisesti käytetään + 5 V: tä. |
DS3231 RTC-moduuli
DS3231 on RTC-moduuli. RTC tarkoittaa reaaliaikaista kelloa. Tätä moduulia käytetään muistamaan kellonaika ja päivämäärä, vaikka piiriin ei tule virtaa. Siinä on CR2032-akkukopio moduulin ajamiseksi ilman ulkoista virtaa. Tämä moduuli sisältää myös lämpötila-anturin. Moduulia voidaan käyttää sulautetuissa projekteissa, kuten digitaalisen kellon tekeminen lämpötilan osoittimella jne. Tässä on joitain hyödyllisiä projekteja, jotka käyttävät sitä:
- Automaattinen lemmikkieläinten syöttölaite Arduinoa käyttämällä
- RTC-moduulin (DS3231) ja PIC-mikrokontrollerin liitäntä: Digitaalinen kello
- RTC-moduulin (DS3231) liitäntä MSP430: een: digitaalinen kello
- ESP32-reaaliaikainen kello DS3231-moduulin avulla
- Digitaalinen seinäkello piirilevyllä käyttämällä AVR-mikrokontrolleria Atmega16 ja DS3231 RTC
DS3231: n pinout:
PIN-nimi |
Käyttää |
VCC |
Yhdistetty virtalähteen positiiviseen |
GND |
Yhdistetty maahan |
SDA |
Sarjaliikennetappi (I2C) |
SCL |
Sarjakellotappi (I2C) |
SQW |
Neliön aallon ulostulotappi |
32 kt |
32K oskillaattorin lähtö |
Ominaisuudet ja tekniset tiedot:
- RTC laskee sekunteja, minuutteja, tunteja ja vuotta
- Digitaalinen lämpötila-anturi ± 3ºC tarkkuudella
- Rekisteröidy ikääntymiseen
- 400 kHz I2C-liitäntä
- Alhainen virrankulutus
- CR2032-akkukopio, jonka käyttöikä on kaksi tai kolme vuotta
- Käyttöjännite: 2,3 - 5,5 V
Piirikaavio
Piiriliitäntä DS3231 RTC: n ja Arduino UNO: n välillä:
DS3231 |
Arduino UNO |
VCC |
5 V |
GND |
GND |
SDA |
A4 |
SCL |
A4 |
Piiriliitännät 74HC595 IC: n ja Arduino Unon välillä:
74HC595 IC |
Arduino UNO |
11-SH_CP (SRCLK) |
6 |
12-ST_CP (RCLK) |
5 |
14-DS (data) |
4 |
13-OE (salpa) |
GND |
8-BKT |
GND |
10-MR (SRCLR) |
+ 5 V |
16-VCC |
+ 5 V |
Piiriliitännät IC 74HC595: n ja 4-numeroisen seitsemän segmentin ja Arduino UNO: n välillä:
4-numeroinen seitsemän segmentti |
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 -ohjelmointi seitsemän segmentin näytön multipleksointiin
Koko koodi ja toimiva video ovat tämän opetusohjelman lopussa. Ohjelmointiosassa selitetään, kuinka aika (tunti ja minuutti) otetaan RTC-moduulista 24 tunnin muodossa ja sitten muunnetaan vastaavaan muotoon niiden näyttämiseksi nelinumeroisessa 7 segmentin näytössä.
DS3231 RTC -moduulin liittämiseen Arduino UNO: hon käytetään Arduino UNO: n I2C-väylää. Nimeltään kirjasto
Tässä käsitteessä tunti ja minuutti otetaan ensin RTC: ltä ja ne yhdistetään yhteen kuten 0930 (09:30 pm) ja sitten yksittäiset numerot erotetaan kuten tuhat, sata, kymmeniä, yksikkö ja yksittäiset numerot muunnetaan binaarimuodoksi, kuten 0 osaksi 63 (0111111). Tämä binaarikoodi lähetetään siirtorekisteriin ja sitten siirtorekisteristä seitsemään segmenttiin, jolloin numero 0 näytetään onnistuneesti seitsemän segmentin näytössä. Tällä tavalla neljä numeroa multipleksoidaan ja tunti ja minuutti näytetään.
Aluksi mukana on tarvittava kirjasto, kuten DS3231-kirjasto ja lankakirjasto (I2C-kirjasto).
#sisältää
Tapit on määritelty seitsemälle segmentin ohjaukselle. Näillä säätimillä on tärkeä rooli näytön multipleksoinnissa.
#define latchPin 5 #define clockPin 6 #define dataPin 4 #define dot 2
Muuttujat ilmoitetaan tallentavan muunnetun tai raakan tuloksen, joka on otettu RTC: stä.
int h; // Tunnille ilmoitettu muuttuja int m; // Muuttuja ilmoitettu minuutti int tuhansia; int satoja; int kymmeniä; int-yksikkö; bool h24; bool PM;
Seuraavaksi luokan DS3231 objekti ilmoitetaan RTC: ksi käytön yksinkertaistamiseksi muilla riveillä.
DS3231 RTC;
Koska RTC-moduuli on liitetty Arduinoon I2C-tiedonsiirron avulla. Joten johtoa.begin () käytetään I2C-viestinnän aloittamiseen RTC: n oletusosoitteessa, koska muita I2C-moduuleja ei ole.
Wire.begin ();
Tappi tila on määritelty, onko GPIO käyttäytyy lähdön tai tulon.
pinMode (9, OUTPUT); pinMode (10, OUTPUT); pinMode (11, OUTPUT); pinMode (12, OUTPUT); pinMode (latchPin, OUTPUT); pinMode (clockPin, OUTPUT); pinMode (dataPin, OUTPUT); pinMode (piste, OUTPUT);
Silmukka kulkee rajattomasti ja se vie aikaa tunnissa ja minuuteissa RTC DS3231 -moduulista. 'h24' tarkoittaa 24 tunnin muotoista muuttujaa.
int h = RTC.getHour (h24, PM); int m = RTC.getMinute ();
Sitten tunti ja minuutti yhdistetään yhtenä numerona (esimerkki jos tunti on 10 ja min on 60, luku on 10 * 100 = 1000 + 60 = 1060).
int-luku = h * 100 + m;
Yksittäiset numerot numero saadaan (esimerkiksi 1060- 1 on tuhat, 0 on hundered, 1 on kymmenes ja 0 on viimeinen numero). Numeroiden erottamiseksi käytetään moduulioperaattoria. Esimerkiksi vuonna 1060 saada 1, sitten 1060/1000 = 1,06% 10 = 1). Joten erilliset numerot tallennetaan erillisiin muuttujiin.
int tuhansia = luku / 1000% 10; int satoja = luku / 100% 10; int kymmeniä = luku / 10% 10; int-yksikkö = luku% 10;
Sen jälkeen kullekin yksittäiselle numerolle määritetään kytkentätapauslauseke muuntamaan ne vastaavaan muotoon (binaarimuodossa) ja lähettämään siirtorekisterin kautta näyttämään 7-segmenttisenä. Esimerkiksi (Yhden numeron kohdalla se muutetaan muotoon 06 (0000 0110)). Niin, että se lähetetään vaihdon kautta ja yksi numero näkyy 7-segmenttisenä (0 LOW, 1 HIGH).
kytkin (t) { tapaus 0: yksikkö = 63; tauko; tapaus 1: yksikkö = 06; tauko; tapaus 2: yksikkö = 91; tauko; tapaus 3: yksikkö = 79; tauko; tapaus 4: yksikkö = 102; tauko; tapaus 5: yksikkö = 109; tauko; tapaus 6: yksikkö = 125; tapaus 7: yksikkö = 07; tauko; tapaus 8: yksikkö = 127; tauko; tapaus 9: yksikkö = 103; tauko; }
Sitten yksittäinen numero binäärimuodossa lähetetään 'shiftout' -toiminnon kautta MSB: n kanssa ensin ja vastaavasta numerotapista tehdään KORKEA ja salvatapista KORKEA.
digitalWrite (9, LOW); digitalWrite (latchPin, LOW); shiftOut (dataPin, clockPin, MSBFIRST, tuhansia); digitalWrite (latchPin, HIGH); digitalWrite (9, HIGH); viive (5);
Tämä viimeistelee koko koodin. Suurin osa toiminnon selityksestä annetaan koodikommenttiosassa koodirivin vieressä. Kellon taajuus päättää näkymän ajan ja multipleksoinnin laadun eli, jos käytetään matalaa kelloa, välkkyminen voidaan nähdä missä ikään kuin kellonopeus olisi suuri, niin ei välkkymistä ja tasainen aika voidaan nähdä.
Huomaa, että RTC-moduuliin pääsemiseksi I2C-väylän jännite on ylläpidettävä. Jos haluat antaa ehdotuksen tai jos sinulla on epäilyksiä, kommentoi alla.