- Komponenter, der kræves
- 4-cifret 7 segment display
- 74HC595 Skiftregister IC
- DS3231 RTC-modul
- Kredsløbsdiagram
- Programmering af Arduino UNO til multipleksing af syv segmentvisninger
Digitale vægure bliver mere populære nu dage, og de er bedre end analogt ur, da det giver nøjagtig tid i timer, minutter og sekunder, og det er let at læse værdierne. Nogle digitale ure har også mange faciliteter såsom visning af temperatur, fugtighed, indstilling af flere alarmer osv. De fleste af de digitale ure bruger syv segmentvisning.
Vi har tidligere bygget mange digitale ure kredsløb enten ved hjælp af 7 segmentskærme eller ved hjælp af 16x2 LCD. Her kan du se de komplette printkortdesign på AVR-baseret digitalt ur. Denne vejledning handler om at lave et digitalt ur ved at multiplexere fire-7 segmentskærme ved hjælp af Arduino UNO og vise tiden i HH: MM-format.
Komponenter, der kræves
- 4-cifret 7 segment display
- 74HC595 IC
- DS3231 RTC-modul
- Arduino UNO
- Brødbræt
- Tilslutning af ledninger
4-cifret 7 segment display
4-cifret 7 segment display har fire syv segment display sammen, eller vi kan sige multiplexed sammen. De bruges til at vise numeriske værdier og også nogle alfabeter med decimaler og kolon. Displayet kan bruges i begge retninger. Fire cifre er nyttige til at lave digitale ure eller som at tælle tal fra 0 til 9999. Nedenfor er det interne diagram til 4-cifret 7-segmentvisning.
Hvert segment har en LED med individuel LED-kontrol. Der er to typer af syv segmentdisplays såsom Common Anode og Common Cathode. Ovenstående billede viser den almindelige anode type 7 segmentvisning.
Almindelig anode
I fælles anode er alle de positive terminaler (anoder) på alle de 8 lysdioder forbundet sammen, navngivet som COM. Og alle de negative terminaler er alene eller tilsluttet til mikrocontrollerstifter. Ved hjælp af mikrokontroller, hvis logik LAV er indstillet til at belyse det bestemte LED-segment og indstil logik Høj for at slukke for LED.
Fælles katode
I fælles katode er alle de negative terminaler (katoder) på alle de 8 lysdioder forbundet sammen, navngivet som COM. Og alle de positive terminaler er alene eller tilsluttet til mikrocontrollerstifter. Ved at bruge mikrocontroller, hvis indstillet logik HIGH for at belyse LED og indstille LOW for at slukke for LED.
Lær mere om 7 segmentskærme her, og kontroller, hvordan det kan interfaces med andre mikrocontrollere:
- 7-segment skærmgrænseflade med Arduino
- 7-segment displaygrænseflade med Raspberry Pi
- Interfacing Seven Segment Display med ARM7-LPC2148
- 7-segment-skærmgrænseflade med PIC-mikrocontroller
- 7-segment-skærmgrænseflade med 8051-mikrocontroller
74HC595 Skiftregister IC
Den IC 74HC595 også kendt som 8-Bit Serial IN - Parallel OUT Shift Register. Denne IC kan modtage dataindgang serielt og kan styre 8 outputstifter parallelt. Dette er nyttigt til at reducere ben, der bruges fra mikrocontroller. Du kan finde alle 74HC595 skiftregisterrelaterede projekter her.
Arbejde med 74HC595 IC:
Denne IC bruger tre ben som Clock, Data & Latch med mikrocontrolleren til at kontrollere IC's 8 output pins. Uret bruges til kontinuerligt at give impulser fra mikrokontroller, og datapinnen bruges til at sende dataene, som hvilket output der skal tændes eller slukkes på det respektive ur.
Pinout:
Pinkode |
Pin-navn |
Beskrivelse |
1,2,3,4,5,6,7 |
Udgangsstifter (Q1 til Q7) |
74HC595 har 8 outputstifter, hvoraf 7 er disse stifter. De kan styres serielt |
8 |
Jord |
Forbundet til jorden til mikrokontroller |
9 |
(Q7) Seriel output |
Denne pin bruges til at forbinde mere end en 74HC595 som cascading |
10 |
(MR) Master Reset |
Nulstiller alle udgange så lave. Skal holdes højt for normal drift |
11 |
(SH_CP) Ur |
Dette er det ur, som urets signal skal leveres fra MCU / MPU |
12 |
(ST_CP) Lås |
Låsestiften bruges til at opdatere dataene til outputstifterne. Det er aktivt højt |
13 |
(OE) Output Enable |
Output Enable bruges til at slukke for output. Skal holdes lavt for normal drift |
14 |
(DS) Serielle data |
Dette er den pin, som data sendes til, baseret på hvilken de 8 udgange styres |
15 |
(Q0) Output |
Den første udgangsstift. |
16 |
Vcc |
Denne pin driver IC, typisk bruges + 5V. |
DS3231 RTC-modul
DS3231 er et RTC-modul. RTC står for Real Time Clock. Dette modul bruges til at huske tid og dato, selv når kredsløbet ikke er tændt. Den har en batterisikkerhedskopi CR2032 til at køre modulet i mangel af ekstern strøm. Dette modul inkluderer også en temperatursensor. Modulet kan bruges i indlejrede projekter såsom at lave digitalt ur med temperaturindikator osv. Her er nogle nyttige projekter, der bruger det:
- Automatisk kæledyrsføder ved hjælp af Arduino
- Interfacing RTC Module (DS3231) med PIC Microcontroller: Digital Clock
- Interfacing RTC-modul (DS3231) med MSP430: Digital ur
- ESP32 Real Time Clock ved hjælp af DS3231-modul
- Digitalt vægur på printkort ved hjælp af AVR Microcontroller Atmega16 og DS3231 RTC
Pinout af DS3231:
Pin-navn |
Brug |
VCC |
Forbundet til positiv strømkilde |
GND |
Forbundet til jorden |
SDA |
Seriel datapind (I2C) |
SCL |
Serielt urstift (I2C) |
SQW |
Square Wave udgangsstift |
32K |
32K oscillator output |
Funktioner og specifikationer:
- RTC tæller sekunder, minutter, timer og år
- Digital temperatursensor med ± 3ºC nøjagtighed
- Tilmeld dig aldringstrim
- 400Khz I2C interface
- Lavt strømforbrug
- CR2032-backup af batteri med to til tre års levetid
- Driftsspænding: 2,3 til 5,5 V.
Kredsløbsdiagram
Kredsløbsforbindelse mellem DS3231 RTC og Arduino UNO:
DS3231 |
Arduino UNO |
VCC |
5V |
GND |
GND |
SDA |
A4 |
SCL |
A4 |
Kredsløbsforbindelser mellem 74HC595 IC og Arduino Uno:
74HC595 IC |
Arduino UNO |
11-SH_CP (SRCLK) |
6 |
12-ST_CP (RCLK) |
5 |
14-DS (data) |
4 |
13-OE (låse) |
GND |
8-GND |
GND |
10-MR (SRCLR) |
+ 5V |
16-VCC |
+ 5V |
Kredsløbsforbindelser mellem IC 74HC595 og 4-cifret syv segment og Arduino UNO:
4-cifret SevenSegment |
IC 74HC595 |
Arduino UNO |
EN |
Q0 |
- |
B |
Q1 |
- |
C |
Q2 |
- |
D |
Q3 |
- |
E |
Q4 |
- |
F |
Q5 |
- |
G |
Q6 |
- |
D1 |
- |
10 |
D2 |
- |
11 |
D3 |
- |
12 |
D4 |
- |
9 |
Programmering af Arduino UNO til multipleksing af syv segmentvisninger
Den komplette kode og arbejdsvideo er vedhæftet i slutningen af denne vejledning. I programmeringsafsnittet forklares, hvordan tiden (time og minut) er taget fra RTC-modulet i 24-timers format, og derefter konverteres det til det respektive format til visning i det 4-cifrede 7-segment display.
For at interface DS3231 RTC-modulet med Arduino UNO bruges I2C-bussen til Arduino UNO. Et bibliotek kaldet
I dette koncept tages time og minut først fra RTC, og de kombineres som 0930 (09:30), og derefter adskilles de individuelle cifre som tusinde, hundrede, tiere, og de enkelte cifre konverteres til binært format som 0 ind i 63 (0111111). Denne binære kode sendes til et skiftregister og derefter fra skiftregisteret til syv-segmentet, hvor ciffer 0 med succes vises i syv segmentvisning. På denne måde multiplexeres de fire cifre, og time og minut vises.
Oprindeligt er det nødvendige bibliotek inkluderet, såsom DS3231-bibliotek og Wire-bibliotek (I2C-bibliotek).
#omfatte
Stifterne er defineret til syv segmentkontrol. Disse kontroller spiller en vigtig rolle i multiplexering af skærmen.
#define latchPin 5 #define clockPin 6 #define dataPin 4 #define dot 2
Variablerne erklæres for at gemme det konverterede eller rå resultat taget fra RTC.
int h; // Variabel erklæret for time int m; // Variabel erklæret for minut int tusinder; int hundreder; int tiere; int enhed; bool h24; bool PM;
Derefter erklæres objektet for klassen DS3231 som RTC for at forenkle brugen i yderligere linjer.
DS3231 RTC;
Da RTC-modul er grænseflade med Arduino ved hjælp af I2C-kommunikation. Således bruges wire.begin () til at starte I2C-kommunikation i RTC's standardadresse, da der ikke er andre I2C-moduler.
Wire.begin ();
Den pin tilstand defineres, hvorvidt GPIO vil optræde som output eller input.
pinMode (9, OUTPUT); pinMode (10, OUTPUT); pinMode (11, OUTPUT); pinMode (12, OUTPUT); pinMode (latchPin, OUTPUT); pinMode (clockPin, OUTPUT); pinMode (dataPin, OUTPUT); pinMode (prik, OUTPUT);
Sløjfen løber uendeligt, og det tager tiden i time og minut fra RTC DS3231-modulet. 'h24' angiver døgnets formatvariabel.
int h = RTC.getHour (h24, PM); int m = RTC.getMinute ();
Derefter kombineres time og minut som et tal (f.eks. Hvis time er 10 og min er 60, så er tallet 10 * 100 = 1000 + 60 = 1060).
int antal = h * 100 + m;
De individuelle cifre fra nummer opnås (eksempel 1060-1 er tusind, 0 hunderes, 1 er tiende og 0 er sidste ciffer). Moduloperatoren bruges til at adskille cifrene. For eksempel i 1060 for at få 1, så 1060/1000 = 1,06% 10 = 1). Så separate cifre gemmes i separate variabler.
int tusinder = antal / 1000% 10; int hundreder = antal / 100% 10; int tens = antal / 10% 10; int enhed = antal% 10;
Derefter defineres en switch case-erklæring for hvert enkelt ciffer til konvertering af dem til respektive format (binært format) og udsendelse via skiftregister til visning i 7-segment. For eksempel (for 1 ciffer ændres det til 06 (0000 0110)). Så det sendes ud via shift og 1 ciffer vises i 7-segment (0 for LOW, 1 for HIGH).
switch (t) { case 0: unit = 63; pause; sag 1: enhed = 06; pause; tilfælde 2: enhed = 91; pause; tilfælde 3: enhed = 79; pause; tilfælde 4: enhed = 102; pause; tilfælde 5: enhed = 109; pause; tilfælde 6: enhed = 125; tilfælde 7: enhed = 07; pause; tilfælde 8: enhed = 127; pause; tilfælde 9: enhed = 103; pause; }
Derefter sendes det individuelle ciffer i binært format ud via 'shiftout' -funktion med MSB først, og den respektive cifret pin gøres HØJ, og låsestiften gøres HØJ.
digitalWrite (9, LAV); digitalWrite (latchPin, LOW); shiftOut (dataPin, clockPin, MSBFIRST, tusinder); digitalWrite (latchPin, HIGH); digitalWrite (9, HIGH); forsinkelse (5);
Dette afslutter den komplette kode. Det meste af funktionsforklaringen findes i kodekommentarafsnittet lige ved siden af kodelinjen. Urets frekvens bestemmer udsigten til tid og kvalitet af multiplexing Dvs. hvis der bruges lavt ur, så kan flimringen ses hvor som om urets hastighed er høj, så vil der ikke være sådan flimring og en jævn tid kan ses.
Bemærk, at for at få adgang til RTC-modulet, skal I2C-busspændingen opretholdes. For at komme med et forslag, eller hvis du er i tvivl, bedes du kommentere nedenfor.