- Componente necesare
- Afișaj cu 4 cifre pe 7 segmente
- 74HC595 Shift Register IC
- Modulul DS3231 RTC
- Diagrama circuitului
- Programarea Arduino UNO pentru afișarea cu șapte segmente de multiplexare
Ceasurile de perete digitale devin din ce în ce mai populare în zilele noastre și sunt mai bune decât ceasul analogic, deoarece oferă timp precis în ore, minute și secunde și este ușor de citit valorile. Unele ceasuri digitale au, de asemenea, multe facilități, cum ar fi afișarea temperaturii, umidității, setarea alarmelor multiple etc. Majoritatea ceasurilor digitale utilizează afișaj pe șapte segmente.
Am construit anterior mai multe circuite de ceasuri digitale, fie folosind afișaje pe 7 segmente, fie folosind LCD 16x2. Aici puteți proiecta PCB complet de ceas digital bazat pe AVR. Acest tutorial se referă la realizarea unui ceas digital prin multiplexarea afișajelor cu patru - 7 segmente folosind Arduino UNO și afișarea orei în format HH: MM.
Componente necesare
- Afișaj cu 4 cifre pe 7 segmente
- 74HC595 IC
- Modulul DS3231 RTC
- Arduino UNO
- Breadboard
- Conectarea firelor
Afișaj cu 4 cifre pe 7 segmente
Afișajul cu 4 cifre cu 7 segmente are patru afișaje cu șapte segmente unite între ele sau putem spune multiplexate împreună. Acestea sunt folosite pentru a afișa valori numerice și, de asemenea, unele alfabete cu zecimale și două puncte. Afișajul poate fi utilizat în ambele direcții. Patru cifre sunt utile pentru realizarea ceasurilor digitale sau pentru a număra numerele de la 0 la 9999. Mai jos este diagrama internă pentru afișajul cu 4 cifre cu 7 segmente.
Fiecare segment are un LED cu control LED individual. Există două tipuri de afișaje de șapte segmente, cum ar fi Anodul comun și Catodul comun. Imaginea de mai sus arată afișajul comun al segmentului de tip anod 7.
Anod comun
În Anodul comun, toate terminalele pozitive (Anode) ale tuturor celor 8 LED-uri sunt conectate împreună, denumite COM. Și toate terminalele negative sunt lăsate singure sau conectate la pinii microcontrolerului. Utilizând microcontrolerul, dacă logica LOW este setată pentru a ilumina segmentul LED particular și setați logica High pentru a dezactiva LED-ul.
Catod comun
În catod comun, toate terminalele negative (catodul) tuturor celor 8 LED-uri sunt conectate împreună, denumite COM. Și toate terminalele pozitive sunt lăsate singure sau conectate la pinii microcontrolerului. Utilizând microcontrolerul, dacă setați logica HIGH pentru a aprinde LED-ul și setați LOW pentru a stinge LED-ul.
Aflați mai multe despre afișajele pe 7 segmente aici și verificați cum poate fi interfațat cu alte microcontrolere:
- Interfață de afișare pe 7 segmente cu Arduino
- Interfață de afișare pe 7 segmente cu Raspberry Pi
- Interfațarea afișajului cu șapte segmente cu ARM7-LPC2148
- Interfațarea afișajului pe 7 segmente cu microcontrolerul PIC
- Interfațarea afișajului pe 7 segmente cu microcontrolerul 8051
74HC595 Shift Register IC
IC 74HC595, de asemenea, cunoscut sub numele de 8-biți în serie - paralel OUT Shift Register. Acest IC poate primi date de intrare în serie și poate controla 8 pini de ieșire în paralel. Acest lucru este util în reducerea pinilor utilizați de la microcontroler. Puteți găsi toate proiectele legate de registrul de schimbare 74HC595 aici.
Funcționarea 74HC595 IC:
Acest IC folosește trei pini precum Clock, Data & Latch cu microcontrolerul pentru a controla cei 8 pini de ieșire ai IC-ului. Ceasul este utilizat pentru a furniza în mod continuu impulsuri de la microcontroler și pinul de date este utilizat pentru a trimite datele precum ieșirea care trebuie activată sau oprită la ora respectivă a ceasului.
Pinout:
Numarul pin |
Nume PIN |
Descriere |
1,2,3,4,5,6,7 |
Pinii de ieșire (Q1 la Q7) |
74HC595 are 8 pini de ieșire, dintre care 7 sunt acești pini. Pot fi controlate serial |
8 |
Sol |
Conectat la solul microcontrolerului |
9 |
(Q7) Ieșire serială |
Acest pin este utilizat pentru a conecta mai multe 74HC595 ca cascadă |
10 |
(MR) Master Reset |
Resetează toate ieșirile la un nivel scăzut. Trebuie ținut sus pentru funcționarea normală |
11 |
(SH_CP) Ceas |
Acesta este pinul de ceas la care trebuie să fie furnizat semnalul de ceas de la MCU / MPU |
12 |
(ST_CP) Zăvor |
Pinul de blocare este utilizat pentru a actualiza datele la pinii de ieșire. Este activ ridicat |
13 |
(OE) Activare ieșire |
Activarea ieșirii este utilizată pentru a opri ieșirile. Trebuie menținut jos pentru funcționarea normală |
14 |
(DS) Date seriale |
Acesta este pinul către care sunt trimise datele, pe baza cărora sunt controlate cele 8 ieșiri |
15 |
(Q0) Ieșire |
Primul pin de ieșire. |
16 |
Vcc |
Acest pin alimentează IC-ul, de obicei se folosește + 5V. |
Modulul DS3231 RTC
DS3231 este un modul RTC. RTC înseamnă Real Time Clock. Acest modul este utilizat pentru a vă aminti ora și data chiar și atunci când circuitul nu este alimentat. Are o baterie de rezervă CR2032 pentru a rula modulul în lipsa alimentării externe. Acest modul include și un senzor de temperatură. Modulul poate fi utilizat în proiecte încorporate, cum ar fi realizarea ceasului digital cu indicator de temperatură etc. Iată câteva proiecte utile care îl utilizează:
- Alimentator automat pentru animale de companie folosind Arduino
- Interfațarea modulului RTC (DS3231) cu microcontrolerul PIC: ceas digital
- Interfațarea modulului RTC (DS3231) cu MSP430: Ceas digital
- ESP32 Ceas în timp real folosind modulul DS3231
- Ceas digital de perete pe PCB folosind microcontrolerul AVR Atmega16 și DS3231 RTC
Pinout al DS3231:
Nume PIN |
Utilizare |
VCC |
Conectat la sursa de energie pozitivă |
GND |
Conectat la masă |
SDA |
Pin de date seriale (I2C) |
SCL |
Pin ceas serial (I2C) |
SQW |
Pinul de ieșire Wave pătrat |
32K |
Iesire oscilator 32K |
Caracteristici și specificații:
- RTC contează secunde, minute, ore și an
- Senzor digital de temperatură cu precizie de ± 3ºC
- Înregistrați-vă pentru îmbătrânirea
- Interfață I2C de 400Khz
- Consum redus de putere
- Baterie de rezervă CR2032 cu o durată de viață de doi până la trei ani
- Tensiune de operare: 2,3-5,5V
Diagrama circuitului
Conexiune de circuit între DS3231 RTC și Arduino UNO:
DS3231 |
Arduino UNO |
VCC |
5V |
GND |
GND |
SDA |
A4 |
SCL |
A4 |
Conexiuni de circuit între 74HC595 IC și Arduino Uno:
74HC595 IC |
Arduino UNO |
11-SH_CP (SRCLK) |
6 |
12-ST_CP (RCLK) |
5 |
14-DS (date) |
4 |
13-OE (zăvor) |
GND |
8-GND |
GND |
10-MR (SRCLR) |
+ 5V |
16-VCC |
+ 5V |
Conexiuni de circuit între IC 74HC595 și 4 cifre cu șapte segmente și Arduino UNO:
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 |
Programarea Arduino UNO pentru afișarea cu șapte segmente de multiplexare
Codul complet și videoclipul de lucru sunt atașate la sfârșitul acestui tutorial. În secțiunea de programare, va fi explicat modul în care timpul (ora și minutul) este preluat din modulul RTC în format 24h și apoi este convertit în formatul respectiv pentru a le afișa în afișajul cu 4 cifre cu 7 segmente.
Pentru a interfața modulul DS3231 RTC cu Arduino UNO se utilizează magistrala I2C a Arduino UNO. O bibliotecă numită
În acest concept, ora și minutul sunt preluate mai întâi de la RTC și sunt combinate împreună ca 0930 (21:30) și apoi cifrele individuale sunt separate ca mii, sute, zeci, unitate și cifrele individuale convertite în format binar ca 0 în 63 (0111111). Acest cod binar este trimis către un registru de deplasare și apoi din registrul de deplasare către cel de șapte segmente, afișând cu succes cifra 0 în afișajul de șapte segmente. În acest fel, cele patru cifre sunt multiplexate și se afișează ora și minutele.
Inițial, biblioteca inclusă este inclusă, cum ar fi biblioteca DS3231 și biblioteca Wire (biblioteca I2C).
#include
Pinii sunt definiți pentru controlul cu șapte segmente. Aceste controale vor juca un rol important în multiplexarea afișajului.
#define latchPin 5 #define clockPin 6 #define dataPin 4 #define dot 2
Variabilele sunt declarate pentru a stoca rezultatul convertit sau brut preluat de la RTC.
int h; // Variabila declarată pentru oră int m; // Variabila declarată pentru minute în mii; int sute; int zeci; unitatea int; bool h24; bool PM;
În continuare obiectul pentru clasa DS3231 este declarat ca RTC pentru a simplifica utilizarea în alte linii.
DS3231 RTC;
Deoarece modulul RTC este interfațat cu Arduino prin utilizarea comunicației I2C. Deci, wire.begin () este utilizat pentru a porni comunicarea I2C la adresa implicită a RTC, deoarece nu există alte module I2C.
Wire.begin ();
Modul pin este definit, indiferent dacă GPIO se va comporta ca ieșire sau intrare.
pinMode (9, OUTPUT); pinMode (10, OUTPUT); pinMode (11, OUTPUT); pinMode (12, OUTPUT); pinMode (latchPin, OUTPUT); pinMode (clockPin, OUTPUT); pinMode (dataPin, OUTPUT); pinMode (punct, IEȘIRE);
Bucla rulează infinit și durează timpul în ore și minute de la modulul RTC DS3231. „h24” indică variabila de format 24h.
int h = RTC.getHour (h24, PM); int m = RTC.getMinute ();
Apoi, ora și minutul sunt combinate ca un număr (de exemplu, dacă ora este 10 și min este 60, atunci numărul este 10 * 100 = 1000 + 60 = 1060).
numărul int = h * 100 + m;
Cifrele individuale din număr sunt obținute (exemplul 1060-1 este mii, 0 este ascuns, 1 este zecea și 0 este ultima cifră). Pentru a separa cifrele, se utilizează operatorul de modul. De exemplu, în 1060 pentru a obține 1, atunci 1060/1000 = 1,06% 10 = 1). Deci, cifrele separate sunt stocate în variabile separate.
int mii = număr / 1000% 10; sute int = număr / 100% 10; int zeci = număr / 10% 10; unitatea int = numărul% 10;
După aceea, se definește o declarație de schimbare a majusculelor pentru fiecare cifră individuală pentru a le converti în formatul respectiv (format binar) și a trimite prin registru de schimbare pentru a fi afișate în 7 segmente. De exemplu (Pentru 1 cifră este schimbat în 06 (0000 0110)). Astfel încât să fie trimis prin schimb și să fie afișată o cifră în 7 segmente (0 pentru LOW, 1 pentru HIGH).
comutator (t) { caz 0: unitate = 63; pauză; cazul 1: unitate = 06; pauză; caz 2: unitate = 91; pauză; caz 3: unitate = 79; pauză; caz 4: unitate = 102; pauză; caz 5: unitate = 109; pauză; cazul 6: unitate = 125; caz 7: unitate = 07; pauză; caz 8: unitate = 127; pauză; caz 9: unitate = 103; pauză; }
Apoi, cifra individuală în format binar este trimisă prin intermediul funcției „shiftout” cu MSB mai întâi și pinul de cifră respectiv se face HIGH și pinul de blocare se face HIGH.
digitalWrite (9, LOW); digitalWrite (latchPin, LOW); shiftOut (dataPin, clockPin, MSBFIRST, mii); digitalWrite (latchPin, HIGH); digitalWrite (9, HIGH); întârziere (5);
Aceasta termină codul complet. Majoritatea explicațiilor funcției sunt date în secțiunea de comentarii a codului, chiar lângă linia de cod. Frecvența ceasului va decide modul de vedere al timpului și calitatea multiplexării, adică dacă se utilizează ceasul scăzut, atunci pâlpâitul poate fi văzut unde, ca și cum viteza ceasului este mare, atunci nu va exista o astfel de pâlpâire și se poate vedea un timp constant.
Rețineți că pentru a accesa modulul RTC, trebuie menținută tensiunea magistralei I2C. Pentru a oferi orice sugestie sau dacă aveți vreo îndoială, vă rugăm să comentați mai jos.