- Súčasti sú povinné
- Štvormiestny 7-segmentový displej
- 74HC595 posuvný register IC
- Modul RTC DS3231
- Schéma zapojenia
- Programovanie Arduino UNO pre multiplexovanie sedemsegmentového displeja
Digitálne nástenné hodiny sú dnes čoraz populárnejšie a sú lepšie ako analógové hodiny, pretože poskytujú presný čas v hodinách, minútach a sekundách a sú ľahko čitateľné. Niektoré digitálne hodiny majú tiež veľa možností, ako je zobrazovanie teploty, vlhkosti, nastavenie viacerých alarmov atď. Väčšina digitálnych hodín používa sedemsegmentový displej.
Predtým sme vybudovali veľa obvodov digitálnych hodín buď pomocou 7 segmentových displejov, alebo pomocou 16x2 LCD. Tu nájdete kompletné návrhy DPS digitálnych hodín na báze AVR. Tento tutoriál je zameraný na výrobu digitálnych hodín multiplexovaním štvor- až 7-segmentových displejov pomocou Arduino UNO a zobrazovaním času vo formáte HH: MM.
Súčasti sú povinné
- Štvormiestny 7-segmentový displej
- 74HC595 IC
- Modul RTC DS3231
- Arduino UNO
- Nepál
- Pripojovacie vodiče
Štvormiestny 7-segmentový displej
Štvormiestny 7-segmentový displej má štyri sedemsegmentové displeje spojené dohromady alebo môžeme povedať multiplexované. Používajú sa na zobrazenie číselných hodnôt a tiež niektorých abeced s desatinnými miestami a dvojbodkou. Displej je možné používať v oboch smeroch. Štyri číslice sú užitočné na výrobu digitálnych hodín alebo na počítanie čísel od 0 do 9999. Ďalej je uvedený interný diagram pre štvormiestny 7-segmentový displej.
Každý segment má jednu LED s individuálnym ovládaním LED. Existujú dva typy displejov so siedmimi segmentmi, napríklad Common Anode a Common Cathode. Vyššie uvedený obrázok zobrazuje bežný 7-segmentový displej s anódovým typom.
Spoločná anóda
V spoločnej anóde sú všetky kladné svorky (anódy) všetkých 8 LED diód spojené navzájom a sú pomenované ako COM. A všetky záporné svorky zostanú samy alebo pripojené k pinom mikrokontroléra. Pomocou mikrokontroléra, ak je nastavená logika LOW na osvetlenie konkrétneho segmentu LED a nastavením logiky High na vypnutie LED.
Spoločná katóda
Pri bežnej katóde sú všetky záporné vývody (katódy) všetkých 8 LED diód spojené dohromady, pomenované ako COM. A všetky kladné svorky zostávajú samy alebo sú pripojené k pinom mikrokontroléra. Použitím mikrokontroléra, ak je nastavená logika HIGH na rozsvietenie LED a nastavením LOW na vypnutie LED.
Tu sa dozviete viac informácií o 7 segmentových displejoch a zistíte, ako je možné ich prepojiť s inými mikrokontrolérmi:
- 7-segmentové prepojenie displeja s Arduino
- 7-segmentové rozhranie displeja s Raspberry Pi
- Prepojenie sedemsegmentového displeja s ARM7-LPC2148
- 7 segmentové prepojenie displeja s mikrokontrolérom PIC
- 7-segmentové prepojenie displeja s mikrokontrolérom 8051
74HC595 posuvný register IC
IC 74HC595 tiež známy ako 8-Bit Serial IN - Parallel OUT Shift Register. Tento IC môže prijímať dátové vstupy sériovo a môže ovládať 8 výstupných pinov paralelne. To je užitočné pri redukcii pinov použitých z mikrokontroléra. Všetky projekty súvisiace s registrom posuvu 74HC595 nájdete tu.
Fungovanie 74HC595 IC:
Tento IC používa tri piny ako Clock, Data & Latch s mikrokontrolérom na ovládanie 8 výstupných pinov IC. Hodiny sa používajú na zabezpečenie nepretržitých impulzov z mikrokontroléra a dátový kolík sa používa na zasielanie údajov, ako je napríklad, že výstup je potrebné zapnúť alebo vypnúť v príslušnom čase.
Pinout:
PIN kód |
Názov špendlíka |
Popis |
1,2,3,4,5,6,7 |
Výstupné piny (Q1 až Q7) |
74HC595 má 8 výstupných pinov, z toho 7 týchto pinov. Môžu byť ovládané sériovo |
8 |
Uzemnenie |
Pripojené k zemi mikrokontroléra |
9 |
(Q7) Sériový výstup |
Tento pin sa používa na pripojenie viac ako jedného 74HC595 ako kaskádového zapojenia |
10 |
(MR) Master Reset |
Obnoví všetky výstupy na nízku úroveň. Pre normálnu prevádzku musí byť držaný vysoko |
11 |
(SH_CP) Hodiny |
Toto je hodinový kolík, na ktorý musí byť hodinový signál poskytovaný z MCU / MPU |
12 |
(ST_CP) západka |
Západka sa používa na aktualizáciu údajov na výstupné kolíky. Je aktívny vysoko |
13 |
(OE) Výstup povolený |
Povolenie výstupu sa používa na vypnutie výstupov. Pre normálnu prevádzku musí byť udržiavaný na nízkej úrovni |
14 |
(DS) Sériové údaje |
Toto je pin, na ktorý sa posielajú dáta, na základe ktorých sa ovláda 8 výstupov |
15 |
(Q0) Výstup |
Prvý výstupný pin. |
16 |
Vcc |
Tento pin napája integrovaný obvod, zvyčajne sa používa napätie + 5 V. |
Modul RTC DS3231
DS3231 je modul RTC. RTC je skratka pre hodiny v reálnom čase. Tento modul sa používa na zapamätanie času a dátumu, aj keď obvod nie je napájaný. Má záložnú batériu CR2032 na chod modulu bez externého napájania. Tento modul obsahuje aj teplotný senzor. Modul je možné použiť vo vstavaných projektoch, ako je výroba digitálnych hodín s indikátorom teploty atď. Tu je niekoľko užitočných projektov, ktoré ho využívajú:
- Automatický podávač domácich zvierat pomocou Arduina
- Prepojovací modul RTC (DS3231) s mikrokontrolérom PIC: digitálne hodiny
- Prepojenie modulu RTC (DS3231) s MSP430: digitálne hodiny
- Hodiny ESP32 v reálnom čase pomocou modulu DS3231
- Digitálne nástenné hodiny na DPS pomocou mikrokontroléra AVR Atmega16 a DS3231 RTC
Pinout modelu DS3231:
Názov špendlíka |
Použite |
VCC |
Pripojené k plusu zdroja energie |
GND |
Pripojené k zemi |
SDA |
Sériový dátový kolík (I2C) |
SCL |
Pin sériových hodín (I2C) |
SQW |
Štvorcový výstupný kolík |
32 tis |
32K výstup oscilátora |
Vlastnosti a špecifikácie:
- RTC počíta sekundy, minúty, hodiny a rok
- Digitálny snímač teploty s presnosťou ± 3 ° C
- Zaregistrujte sa pre starnutie
- 400 KHz I2C rozhranie
- Nízka spotreba energie
- Batéria CR2032 s dvoj- až trojročnou životnosťou
- Prevádzkové napätie: 2,3 až 5,5 V
Schéma zapojenia
Okruhové pripojenie medzi DS3231 RTC a Arduino UNO:
DS3231 |
Arduino UNO |
VCC |
5V |
GND |
GND |
SDA |
A4 |
SCL |
A4 |
Pripojenie obvodu medzi 74HC595 IC a Arduino Uno:
74HC595 IC |
Arduino UNO |
11-SH_CP (SRCLK) |
6 |
12-ST_CP (RCLK) |
5 |
14-DS (údaje) |
4 |
13-OE (západka) |
GND |
8-GND |
GND |
10-MR (SRCLR) |
+ 5V |
16-VCC |
+ 5V |
Prepojenia obvodov medzi IC 74HC595 a 4-miestnym sedem segmentom a Arduino UNO:
4-miestnySevenSegment |
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 |
Programovanie Arduino UNO pre multiplexovanie sedemsegmentového displeja
Celý kód a pracovné video sú pripojené na konci tohto tutoriálu. V sekcii programovania bude vysvetlené, ako sa čas (hodiny a minúty) berie z modulu RTC v 24-hodinovom formáte a potom sa prevádza do príslušného formátu na ich zobrazovanie na štvormiestnom 7-segmentovom displeji.
Na prepojenie modulu RTC DS3231 s Arduino UNO sa používa zbernica I2C Arduino UNO. Volala sa knižnica
V tomto koncepte sa hodiny a minúty berú najskôr z RTC a kombinujú sa spolu ako 0930 (21:30) a potom sa jednotlivé číslice oddelia ako tisíc, sto, desiatky, jednotka a jednotlivé číslice sa prevedú do binárneho formátu ako 0 do 63 (0111111). Tento binárny kód sa odošle do posuvného registra a potom z posuvného registra do sedemsegmentového, pričom sa úspešne zobrazí číslica 0 na sedemsegmentovom displeji. Týmto spôsobom sú štyri číslice multiplexované a sú zobrazené hodiny a minúty.
Spočiatku je zahrnutá potrebná knižnica, napríklad knižnica DS3231 a knižnica Wire (knižnica I2C).
#include
Kolíky sú definované pre riadenie siedmich segmentov. Tieto ovládacie prvky budú hrať dôležitú úlohu pri multiplexovaní displeja.
#define latchPin 5 #define clockPin 6 #define dataPin 4 #define dot 2
Premenné sa deklarujú na uloženie prevedeného alebo nespracovaného výsledku prevzatého z RTC.
int h; // Premenná deklarovaná pre hodinu int m; // Premenná deklarovaná pre minútu int tisíce; int stovky; int desiatky; int jednotka; bool h24; bool PM;
Ďalej je objekt pre triedu DS3231 deklarovaný ako RTC, aby sa zjednodušilo použitie v ďalších riadkoch.
DS3231 RTC;
Pretože RTC modul je prepojený s Arduinom pomocou I2C komunikácie. Wire.begin () sa teda používa na spustenie komunikácie I2C na predvolenú adresu RTC, pretože neexistujú žiadne ďalšie moduly I2C.
Wire.begin ();
Režim pinov je definovaný, či sa bude GPIO chovať ako výstup alebo vstup.
pinMode (9, VÝSTUP); pinMode (10, VÝSTUP); pinMode (11, VÝSTUP); pinMode (12, VÝSTUP); pinMode (latchPin, OUTPUT); pinMode (clockPin, OUTPUT); pinMode (dataPin, OUTPUT); pinMode (bodka, VÝSTUP);
Slučka beží nekonečne dlho a trvá jej čas v hodinách a minútach od modulu RTC DS3231. „h24“ označuje premennú formátu 24 hodín.
int h = RTC.getHour (h24, PM); int m = RTC.getMinute ();
Potom sa hodina a minúta skombinujú do jedného čísla (príklad, ak je hodina 10 a min 60, potom číslo 10 * 100 = 1000 + 60 = 1060).
int číslo = h * 100 + m;
Tieto jednotlivé číslice od čísla sa získa (príklad 1060- 1 tisíc, 0 je hundered, 1 je desiaty a 0, je posledná číslica). Na oddelenie číslic sa používa operátor modulu. Napríklad v roku 1060 získate 1, potom 1060/1000 = 1,06% 10 = 1). Takže samostatné číslice sú uložené v samostatných premenných.
int tisíce = počet / 1000% 10; int stovky = počet / 100% 10; int desiatky = počet / 10% 10; int jednotka = počet% 10;
Potom je pre každú jednotlivú číslicu definovaný príkaz na prepnutie prípadu, ktorý ich prevedie do príslušného formátu (binárny formát) a odošle cez posuvný register na zobrazenie v 7-segmentovom formáte. Napríklad (pre 1 číslicu sa zmení na 06 (0000 0110)). Tak, aby sa odosielal prostredníctvom zmeny, a 1 číslica sa zobrazí v 7 segmentoch (0 pre LOW, 1 pre HIGH).
switch (t) { case 0: unit = 63; prestávka; prípad 1: jednotka = 06; prestávka; prípad 2: jednotka = 91; prestávka; prípad 3: jednotka = 79; prestávka; prípad 4: jednotka = 102; prestávka; prípad 5: jednotka = 109; prestávka; prípad 6: jednotka = 125; prípad 7: jednotka = 07; prestávka; prípad 8: jednotka = 127; prestávka; prípad 9: jednotka = 103; prestávka; }
Potom sa jednotlivá číslica v binárnom formáte odošle najskôr pomocou funkcie „posunutia“ s MSB a príslušná číslica sa zmení na VYSOKÁ a západka sa zmení na VYSOKÁ.
digitalWrite (9, LOW); digitalWrite (latchPin, LOW); shiftOut (dataPin, clockPin, MSBFIRST, tisíce); digitalWrite (latchPin, HIGH); digitalWrite (9, HIGH); oneskorenie (5);
Týmto sa dokončí celý kód. Väčšina vysvetlení funkcií je uvedená v sekcii komentárov ku kódu hneď vedľa riadku kódu. Frekvencia hodín rozhodne o pohľade na Čas a kvalitu multiplexovania, tj. Ak sa použijú nízke hodiny, potom bude vidno blikanie, kde ako keby bola rýchlosť hodín vysoká, potom nebude také blikanie a je možné vidieť ustálený čas.
Upozorňujeme, že pre prístup k modulu RTC musí byť udržiavané napätie zbernice I2C. Ak máte akékoľvek návrhy alebo máte pochybnosti, prosím, urobte komentár nižšie.