- Komponenter kreves
- 4-sifret 7-segmentdisplay
- 74HC595 Skiftregister IC
- DS3231 RTC-modul
- Kretsdiagram
- Programmering Arduino UNO for multiplexing Seven Segment Display
Digitale veggklokker blir mer populære nå for tiden, og de er bedre enn analog klokke, da det gir nøyaktig tid i timer, minutter og sekunder, og det er lett å lese verdiene. Noen digitale klokker har også mange fasiliteter som å vise temperatur, fuktighet, stille inn flere alarmer etc. De fleste av de digitale klokkene bruker syv segmentskjerm.
Vi har tidligere bygd mange digitale klokkekretser enten ved bruk av 7 segmentdisplayer eller ved bruk av 16x2 LCD. Her kan du se de komplette PCB-designene til AVR-basert digital klokke. Denne opplæringen handler om å lage en digital klokke ved å multiplexere fire-7 segmentdisplayer ved hjelp av Arduino UNO og vise tiden i HH: MM-format.
Komponenter kreves
- 4-sifret 7-segmentdisplay
- 74HC595 IC
- DS3231 RTC-modul
- Arduino UNO
- Brettbrett
- Koble ledninger
4-sifret 7-segmentdisplay
4-sifret 7-segmentdisplay har fire sju-segmentdisplay sammenføyd, eller vi kan si multiplekset sammen. De brukes til å vise numeriske verdier og også noen alfabeter med desimaler og kolon. Skjermen kan brukes i begge retninger. Fire sifre er nyttige for å lage digitale klokker eller som å telle tall fra 0 til 9999. Nedenfor er det interne diagrammet for 4-sifret 7-segmentvisning.
Hvert segment har en LED med individuell LED-kontroll. Det er to typer syv segmentdisplayer som Common Anode og Common Cathode. Ovenstående bilde viser den vanlige anodetype 7-segmentvisningen.
Vanlig anode
I vanlig anode er alle positive terminaler (anoder) til alle de 8 lysdiodene koblet sammen, kalt COM. Og alle de negative terminalene er igjen alene eller koblet til mikrokontrollerpinnene. Ved å bruke mikrokontroller, hvis logikk LAV er satt til å lyse opp det bestemte LED-segmentet og sette logikken Høy for å slå AV LED.
Felles katode
I vanlig katode er alle de negative terminalene (katoden) til alle de 8 lysdiodene koblet sammen, kalt COM. Og alle de positive terminalene er igjen alene eller koblet til mikrokontrollerpinnene. Ved å bruke mikrokontroller, hvis du stiller inn logikk HØY for å lyse LED og stille LAV for å slå AV LED.
Lær mer om 7 segmentskjermbilder her og sjekk hvordan det kan grensesnittet med andre mikrokontrollere:
- 7-segment skjermgrensesnitt med Arduino
- 7-segment skjermgrensesnitt med Raspberry Pi
- Interfacing Seven Segment Display med ARM7-LPC2148
- 7 segmentskjermgrensesnitt med PIC-mikrokontroller
- 7-segment skjermgrensesnitt med 8051 mikrokontroller
74HC595 Skiftregister IC
The IC 74HC595 også kjent som 8-bit i serie IN - parallelt ute Shift Register. Denne IC kan motta datainngang serielt og kan styre 8 utgangspinner parallelt. Dette er nyttig for å redusere pinner som brukes fra mikrokontroller. Du finner alle 74HC595 skiftregisterrelaterte prosjekter her.
Arbeid av 74HC595 IC:
Denne IC bruker tre pinner som Clock, Data & Latch med mikrokontrolleren for å kontrollere de 8 utgangspinnene på IC. Klokken brukes til å gi kontinuerlige pulser fra mikrokontrolleren, og datapinnen brukes til å sende dataene som hvilken utgang som må slås PÅ eller AV ved den respektive klokkeslettet.
Pinout:
PIN-kode |
Pin-navn |
Beskrivelse |
1,2,3,4,5,6,7 |
Utgangspinner (Q1 til Q7) |
74HC595 har 8 utgangspinner, hvorav 7 er disse pinnene. De kan kontrolleres serielt |
8 |
Bakke |
Koblet til bakken til mikrokontroller |
9 |
(Q7) Seriell utgang |
Denne pinnen brukes til å koble til mer enn en 74HC595 som cascading |
10 |
(MR) Master Reset |
Tilbakestiller alle utganger til lave. Må holdes høyt for normal drift |
11 |
(SH_CP) Klokke |
Dette er klokkepinnen som kloksignalet må tilføres fra MCU / MPU |
12 |
(ST_CP) Sperre |
Låsepinnen brukes til å oppdatere dataene til utgangspinnene. Den er aktiv høy |
1. 3 |
(OE) Utgang aktivert |
Output Enable brukes til å slå av utgangene. Må holdes lavt for normal drift |
14 |
(DS) Serielle data |
Dette er nålen data sendes til, basert på hvilke de 8 utgangene styres |
15 |
(Q0) Utgang |
Den første utgangsnålen. |
16 |
Vcc |
Denne pinnen driver IC, vanligvis brukes + 5V. |
DS3231 RTC-modul
DS3231 er en RTC-modul. RTC står for Real Time Clock. Denne modulen brukes til å huske tid og dato, selv når kretsen ikke får strøm. Den har en batterisikkerhetskopi CR2032 for å kjøre modulen uten ekstern strøm. Denne modulen inkluderer også en temperatursensor. Modulen kan brukes i innebygde prosjekter som å lage digital klokke med temperaturindikator osv. Her er noen nyttige prosjekter som bruker den:
- Automatisk kjæledyrsmater ved hjelp av Arduino
- Grensesnitt RTC-modul (DS3231) med PIC Microcontroller: Digital Clock
- Grensesnitt RTC-modul (DS3231) med MSP430: Digital klokke
- ESP32 sanntidsklokke ved hjelp av DS3231-modulen
- Digital veggklokke på PCB ved bruk av AVR Microcontroller Atmega16 og DS3231 RTC
Pinout av DS3231:
Pin-navn |
Bruk |
VCC |
Koblet til positiv strømkilde |
GND |
Koblet til bakken |
SDA |
Seriell datapinne (I2C) |
SCL |
Seriell klokkepinne (I2C) |
SQW |
Square Wave utgangsstift |
32K |
32K oscillatorutgang |
Funksjoner og spesifikasjoner:
- RTC teller sekunder, minutter, timer og år
- Digital temperatursensor med ± 3ºC nøyaktighet
- Registrer deg for aldringstrim
- 400 kHz I2C-grensesnitt
- Lavt energiforbruk
- CR2032 batterisikkerhetskopi med to til tre års levetid
- Driftsspenning: 2,3 til 5,5 V.
Kretsdiagram
Kretsforbindelse mellom DS3231 RTC og Arduino UNO:
DS3231 |
Arduino UNO |
VCC |
5V |
GND |
GND |
SDA |
A4 |
SCL |
A4 |
Kretsforbindelser mellom 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 (sperre) |
GND |
8-GND |
GND |
10-MR (SRCLR) |
+ 5V |
16-VCC |
+ 5V |
Kretsforbindelser mellom IC 74HC595 og firesifret syv segment og Arduino UNO:
4-sifret 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 Arduino UNO for multiplexing Seven Segment Display
Den komplette koden og arbeidsvideoen er vedlagt på slutten av denne opplæringen. I programmeringsseksjonen, hvordan tiden (time og minutt) er hentet fra RTC-modulen i 24-timers format, og deretter blir den konvertert til respektive format for å vise dem i det 4-sifrede 7-segmentdisplayet.
For å grensesnitt DS3231 RTC-modulen med Arduino UNO brukes I2C-bussen til Arduino UNO. Et bibliotek kalt
I dette konseptet tas time og minutt først fra RTC, og de kombineres sammen som 0930 (09:30), og deretter skilles de enkelte sifrene som tusen, hundre, tiere, og de individuelle sifrene konverteres til binært format som 0 inn i 63 (0111111). Denne binære koden blir sendt til et skiftregister og deretter fra skiftregisteret til syv-segmentet, og viser vellykket siffer 0 i syv segmentvisning. På denne måten multipliseres de fire sifrene, og time og minutt vises.
Opprinnelig er det nødvendige biblioteket inkludert som DS3231-biblioteket og Wire-biblioteket (I2C-biblioteket).
#inkludere
Pinnene er definert for sju segmentkontrollen. Disse kontrollene vil spille en viktig rolle i multipleksing av skjermen.
#define latchPin 5 #define clockPin 6 #define dataPin 4 #define dot 2
Variablene er erklært for å lagre det konverterte eller rå resultatet hentet fra RTC.
int h; // Variabel erklært for time int m; // Variabel erklært for minutt int tusenvis; int hundrevis; int tiere; int enhet; bool h24; bool PM;
Deretter blir objektet for klassen DS3231 erklært som RTC for å forenkle bruken i flere linjer.
DS3231 RTC;
Som RTC-modul er grensesnittet med Arduino ved hjelp av I2C-kommunikasjon. Så, wire.begin () brukes til å starte I2C-kommunikasjon i standardadressen til RTC, da det ikke er noen andre I2C-moduler.
Wire.begin ();
Det tapp-modus er definert, om GPIO vil oppføre seg som utgang eller inngang.
pinMode (9, OUTPUT); pinMode (10, OUTPUT); pinMode (11, OUTPUT); pinMode (12, OUTPUT); pinMode (latchPin, OUTPUT); pinMode (clockPin, OUTPUT); pinMode (dataPin, OUTPUT); pinMode (punktum, UTGANG);
Sløyfen går uendelig, og det tar tiden i time og minutt fra RTC DS3231-modulen. 'h24' indikerer døgnformatvariabelen.
int h = RTC.getHour (h24, PM); int m = RTC.getMinute ();
Deretter kombineres time og minutt som ett tall (for eksempel hvis time er 10 og min er 60 så er tallet 10 * 100 = 1000 + 60 = 1060).
int-tall = h * 100 + m;
De individuelle sifrene fra tallet oppnås (eksempel 1060-1 er tusen, 0 hunderes, 1 er tiende og 0 er siste siffer). For å skille sifrene brukes modulusoperatør. For eksempel i 1060 for å få 1 så 1060/1000 = 1,06% 10 = 1). Så separate sifre lagres i separate variabler.
int tusenvis = antall / 1000% 10; int hundre = antall / 100% 10; int tiere = antall / 10% 10; int-enhet = antall% 10;
Etter det er det definert en switch case-uttalelse for hvert enkelt siffer for å konvertere dem til respektive format (binært format) og sende ut via skiftregister for visning i 7-segment. For eksempel (for 1 siffer endres det til 06 (0000 0110)). Slik at den sendes ut via skift og 1 siffer vises i 7-segment (0 for LAV, 1 for HØY).
bryter (t) { tilfelle 0: enhet = 63; gå i stykker; tilfelle 1: enhet = 06; gå i stykker; tilfelle 2: enhet = 91; gå i stykker; tilfelle 3: enhet = 79; gå i stykker; tilfelle 4: enhet = 102; gå i stykker; tilfelle 5: enhet = 109; gå i stykker; tilfelle 6: enhet = 125; tilfelle 7: enhet = 07; gå i stykker; tilfelle 8: enhet = 127; gå i stykker; tilfelle 9: enhet = 103; gå i stykker; }
Deretter sendes det individuelle sifferet i binært format via funksjonen 'shiftout' med MSB først, og den respektive sifferpinnen blir HØY og låsepinnen blir HØY.
digitalWrite (9, LAV); digitalWrite (latchPin, LOW); shiftOut (dataPin, clockPin, MSBFIRST, tusenvis); digitalWrite (latchPin, HIGH); digitalWrite (9, HØY); forsinkelse (5);
Dette fullfører den fullstendige koden. Det meste av funksjonsforklaringen er gitt i kodekommentar-delen like ved siden av kodelinjen. Klokkens frekvens vil avgjøre visningen av tid og kvalitet på multiplexing, dvs. hvis lav klokke brukes, så kan flimringen sees hvor som om klokkehastigheten er høy, så vil det ikke være slik flimring og en jevn tid kan sees.
Merk at for å få tilgang til RTC-modulen, må I2C-busspenningen opprettholdes. For å komme med forslag, eller hvis du er i tvil, kan du kommentere nedenfor.