- Componenti richiesti
- Display a 7 segmenti a 4 cifre
- 74HC595 Shift Register IC
- Modulo RTC DS3231
- Schema elettrico
- Programmazione di Arduino UNO per il multiplexing di display a sette segmenti
Gli orologi da parete digitali stanno diventando sempre più popolari oggigiorno e sono migliori dell'orologio analogico in quanto forniscono l'ora precisa in ore, minuti e secondi ed è facile leggere i valori. Alcuni orologi digitali hanno anche molti servizi come la visualizzazione di temperatura, umidità, impostazione di più allarmi ecc. La maggior parte degli orologi digitali utilizza un display a sette segmenti.
In precedenza abbiamo costruito molti circuiti di clock digitali utilizzando display a 7 segmenti o LCD 16x2. Qui puoi vedere i progetti PCB completi dell'orologio digitale basato su AVR. Questo tutorial riguarda la creazione di un orologio digitale tramite il multiplexing di display a quattro- 7 segmenti utilizzando Arduino UNO e la visualizzazione dell'ora in formato HH: MM.
Componenti richiesti
- Display a 7 segmenti a 4 cifre
- 74HC595 IC
- Modulo RTC DS3231
- Arduino UNO
- Breadboard
- Cavi di collegamento
Display a 7 segmenti a 4 cifre
Il display a 7 segmenti a 4 cifre ha quattro display a sette segmenti uniti insieme o possiamo dire multiplexati insieme. Sono usati per visualizzare valori numerici e anche alcuni alfabeti con decimali e due punti. Il display può essere utilizzato in entrambe le direzioni. Quattro cifre sono utili per creare orologi digitali o come contare i numeri da 0 a 9999. Di seguito è riportato il diagramma interno per il display a 7 segmenti a 4 cifre.
Ogni segmento ha un LED con controllo LED individuale. Sono disponibili due tipi di display a sette segmenti, ad esempio Common Anode e Common Cathode. L'immagine sopra mostra il display a 7 segmenti di tipo anodo comune.
Anodo comune
In Common Anode, tutti i terminali positivi (Anodi) di tutti gli 8 LED sono collegati insieme, denominati COM. E tutti i terminali negativi vengono lasciati soli o collegati ai pin del microcontrollore. Utilizzando il microcontrollore, se la logica LOW è impostata per illuminare il particolare segmento del LED e impostare la logica High per spegnere il LED.
Catodo comune
In Common Cathode, tutti i terminali negativi (catodo) di tutti gli 8 LED sono collegati insieme, chiamati COM. E tutti i terminali positivi vengono lasciati soli o collegati ai pin del microcontrollore. Utilizzando il microcontrollore, impostare la logica ALTA per illuminare il LED e impostare BASSO per spegnere il LED.
Scopri di più sui display a 7 segmenti qui e controlla come può essere interfacciato con altri microcontrollori:
- Display a 7 segmenti che si interfaccia con Arduino
- Display a 7 segmenti che si interfaccia con Raspberry Pi
- Interfacciamento del display a sette segmenti con ARM7-LPC2148
- Display a 7 segmenti che si interfaccia con il microcontrollore PIC
- Display a 7 segmenti che si interfaccia con il microcontrollore 8051
74HC595 Shift Register IC
L' IC 74HC595 noto anche come 8-bit Serial IN - Parallel OUT Shift Register. Questo IC può ricevere dati in ingresso in seriale e può controllare 8 pin di uscita in parallelo. Ciò è utile per ridurre i pin utilizzati dal microcontrollore. Puoi trovare tutti i progetti relativi al registro turni 74HC595 qui.
Funzionamento di 74HC595 IC:
Questo IC utilizza tre pin come Clock, Data e Latch con il microcontrollore per controllare gli 8 pin di uscita dell'IC. L'orologio viene utilizzato per fornire impulsi continui dal microcontrollore e il pin dati viene utilizzato per inviare i dati, ad esempio quale uscita deve essere attivata o disattivata al rispettivo orario di clock.
Pinout:
Codice PIN |
Nome pin |
Descrizione |
1,2,3,4,5,6,7 |
Pin di uscita (da Q1 a Q7) |
Il 74HC595 ha 8 pin di uscita di cui 7 sono questi pin. Possono essere controllati in serie |
8 |
Terra |
Collegato alla terra del microcontrollore |
9 |
(Q7) Uscita seriale |
Questo pin viene utilizzato per collegare più di un 74HC595 in cascata |
10 |
(MR) Ripristino totale |
Ripristina tutte le uscite al livello più basso. Deve essere tenuto alto per il normale funzionamento |
11 |
(SH_CP) Orologio |
Questo è il pin di clock a cui deve essere fornito il segnale di clock da MCU / MPU |
12 |
(ST_CP) Latch |
Il pin Latch viene utilizzato per aggiornare i dati sui pin di uscita. È attivo alto |
13 |
(OE) Abilita uscita |
L'abilitazione dell'uscita viene utilizzata per disattivare le uscite. Deve essere tenuto basso per il normale funzionamento |
14 |
(DS) Dati seriali |
Questo è il pin a cui vengono inviati i dati, in base al quale vengono controllate le 8 uscite |
15 |
(Q0) Uscita |
Il primo pin di uscita. |
16 |
Vcc |
Questo pin alimenta l'IC, in genere viene utilizzato + 5V. |
Modulo RTC DS3231
DS3231 è un modulo RTC. RTC è l'acronimo di Real Time Clock. Questo modulo viene utilizzato per ricordare l'ora e la data anche quando il circuito non è alimentato. Ha una batteria di backup CR2032 per far funzionare il modulo in assenza di alimentazione esterna. Questo modulo include anche un sensore di temperatura. Il modulo può essere utilizzato in progetti incorporati come la creazione di un orologio digitale con indicatore di temperatura, ecc. Ecco alcuni progetti utili che lo utilizzano:
- Alimentatore automatico di animali domestici utilizzando Arduino
- Interfacciamento del modulo RTC (DS3231) con il microcontrollore PIC: orologio digitale
- Interfacciamento del modulo RTC (DS3231) con MSP430: orologio digitale
- Orologio in tempo reale ESP32 utilizzando il modulo DS3231
- Orologio da parete digitale su PCB utilizzando il microcontrollore AVR Atmega16 e DS3231 RTC
Pinout di DS3231:
Nome pin |
Uso |
VCC |
Collegato al positivo della fonte di alimentazione |
GND |
Collegato a terra |
SDA |
Pin dati seriali (I2C) |
SCL |
Pin orologio seriale (I2C) |
SQW |
Pin di uscita onda quadra |
32K |
Uscita oscillatore 32K |
Caratteristiche e specifiche:
- RTC conta secondi, minuti, ore e anno
- Sensore di temperatura digitale con precisione ± 3ºC
- Registrati per il taglio di invecchiamento
- Interfaccia I2C da 400 Khz
- Basso consumo energetico
- Batteria di backup CR2032 con durata da due a tre anni
- Tensione di funzionamento: da 2,3 a 5,5 V.
Schema elettrico
Collegamento del circuito tra DS3231 RTC e Arduino UNO:
DS3231 |
Arduino UNO |
VCC |
5V |
GND |
GND |
SDA |
A4 |
SCL |
A4 |
Collegamenti del circuito tra 74HC595 IC e Arduino Uno:
74HC595 IC |
Arduino UNO |
11-SH_CP (SRCLK) |
6 |
12-ST_CP (RCLK) |
5 |
14-DS (dati) |
4 |
13-OE (fermo) |
GND |
8-GND |
GND |
10-MR (SRCLR) |
+ 5V |
16-VCC |
+ 5V |
Collegamenti del circuito tra IC 74HC595 e 4 cifre a sette segmenti e Arduino UNO:
4-DigitSevenSegment |
IC 74HC595 |
Arduino UNO |
UN |
Q0 |
- |
B |
Q1 |
- |
C |
Q2 |
- |
D |
Q3 |
- |
E |
Q4 |
- |
F |
Q5 |
- |
G |
Q6 |
- |
D1 |
- |
10 |
D2 |
- |
11 |
D3 |
- |
12 |
D4 |
- |
9 |
Programmazione di Arduino UNO per il multiplexing di display a sette segmenti
Il codice completo e il video di lavoro sono allegati alla fine di questo tutorial. Nella sezione programmazione verrà spiegato come l'ora (ora e minuti) viene prelevata dal modulo RTC in formato 24 ore e poi convertita nel rispettivo formato per visualizzarli nel display a 7 segmenti a 4 cifre.
Per interfacciare il modulo RTC DS3231 con Arduino UNO viene utilizzato il bus I2C di Arduino UNO. Una libreria chiamata
In questo concetto, ora e minuto vengono presi prima da RTC e vengono combinati insieme come 0930 (21:30) e poi le singole cifre vengono separate come migliaia, cento, decine, unità e le singole cifre convertite in formato binario come 0 in 63 (0111111). Questo codice binario viene inviato a un registro a scorrimento e quindi dal registro a scorrimento al registro a sette segmenti, visualizzando correttamente la cifra 0 nel display a sette segmenti. In questo modo, le quattro cifre vengono multiplexate e vengono visualizzati l'ora e i minuti.
Inizialmente, la libreria necessaria è inclusa come la libreria DS3231 e la libreria Wire (libreria I2C).
#includere
I pin sono definiti per il controllo a sette segmenti. Questi controlli giocheranno un ruolo importante nel multiplexing del display.
#define latchPin 5 #define clockPin 6 #define dataPin 4 #define punto 2
Le variabili vengono dichiarate per memorizzare il risultato convertito o grezzo preso dall'RTC.
int h; // Variabile dichiarata per ora int m; // Variabile dichiarata per minuti int migliaia; int centinaia; int decine; int unit; bool h24; bool PM;
Successivamente l'oggetto per la classe DS3231 viene dichiarato come RTC per semplificarne l'utilizzo in ulteriori righe.
DS3231 RTC;
Poiché il modulo RTC è interfacciato con Arduino utilizzando la comunicazione I2C. Quindi, wire.begin () viene utilizzato per avviare la comunicazione I2C nell'indirizzo predefinito di RTC poiché non ci sono altri moduli I2C.
Wire.begin ();
La modalità pin viene definita, se il GPIO si comporterà come output o input.
pinMode (9, OUTPUT); pinMode (10, OUTPUT); pinMode (11, OUTPUT); pinMode (12, OUTPUT); pinMode (latchPin, OUTPUT); pinMode (clockPin, OUTPUT); pinMode (dataPin, OUTPUT); pinMode (punto, OUTPUT);
Il loop viene eseguito all'infinito e richiede il tempo in ore e minuti dal modulo RTC DS3231. "h24" indica la variabile di formato 24 ore.
int h = RTC.getHour (h24, PM); int m = RTC.getMinute ();
Quindi l'ora e i minuti vengono combinati come un numero (esempio se l'ora è 10 e il minuto è 60, il numero è 10 * 100 = 1000 + 60 = 1060).
numero int = h * 100 + m;
Si ottengono le singole cifre dal numero (esempio 1060-1 è mille, 0 è centinaio, 1 è il decimo e 0 è l'ultima cifra). Per separare le cifre, viene utilizzato l'operatore modulo. Ad esempio, in 1060 per ottenere 1, quindi 1060/1000 = 1,06% 10 = 1). Quindi cifre separate vengono memorizzate in variabili separate.
int migliaia = numero / 1000% 10; int centinaia = numero / 100% 10; int decine = numero / 10% 10; unità int = numero% 10;
Successivamente viene definita un'istruzione switch case per ogni singola cifra per convertirli nel rispettivo formato (formato binario) e inviarli tramite registro a scorrimento per visualizzare in 7 segmenti. Ad esempio (per 1 cifra viene modificata in 06 (0000 0110)). In modo che venga inviato tramite shift e 1 cifra viene visualizzata in 7 segmenti (0 per BASSO, 1 per ALTO).
interruttore (t) { caso 0: unità = 63; rompere; caso 1: unità = 06; rompere; caso 2: unità = 91; rompere; caso 3: unità = 79; rompere; caso 4: unità = 102; rompere; caso 5: unità = 109; rompere; caso 6: unità = 125; caso 7: unità = 07; rompere; caso 8: unità = 127; rompere; caso 9: unità = 103; rompere; }
Quindi la singola cifra in formato binario viene inviata tramite la funzione 'shiftout' con MSB prima e il rispettivo pin della cifra viene reso ALTO e il pin di chiusura viene reso ALTO.
digitalWrite (9, LOW); digitalWrite (latchPin, LOW); shiftOut (dataPin, clockPin, MSBFIRST, migliaia); digitalWrite (latchPin, HIGH); digitalWrite (9, HIGH); ritardo (5);
Questo termina il codice completo. La maggior parte delle spiegazioni delle funzioni sono fornite nella sezione dei commenti sul codice accanto alla riga del codice. La frequenza dell'orologio deciderà la visualizzazione del tempo e la qualità del multiplexing Ad esempio se viene utilizzato un clock basso, lo sfarfallio può essere visto dove, come se la velocità dell'orologio fosse alta, non ci sarà tale sfarfallio e si potrà vedere un tempo costante.
Notare che per accedere al modulo RTC, la tensione del bus I2C deve essere mantenuta. Per dare qualche suggerimento o se hai qualche dubbio commenta qui sotto.