- Components necessaris
- Pantalla de 4 dígits amb 7 segments
- IC de registre de torns 74HC595
- Mòdul RTC DS3231
- Esquema de connexions
- Programació Arduino UNO per a la visualització de set segments de multiplexació
Actualment, els rellotges de paret digitals són cada vegada més populars i són millors que els rellotges analògics, ja que proporcionen temps precís en hores, minuts i segons i és fàcil llegir els valors. Alguns rellotges digitals també tenen moltes instal·lacions, com ara la visualització de temperatura, humitat, configuració d'alarmes múltiples, etc. La majoria dels rellotges digitals utilitzen una pantalla de set segments.
Anteriorment, vam crear molts circuits de rellotges digitals mitjançant pantalles de 7 segments o amb LCD de 16x2. Aquí podeu obtenir els dissenys complets de PCB del rellotge digital basat en AVR. Aquest tutorial tracta de fer un rellotge digital multiplexant pantalles de quatre a 7 segments mitjançant Arduino UNO i mostrant l’hora en format HH: MM.
Components necessaris
- Pantalla de 4 dígits amb 7 segments
- 74HC595 IC
- Mòdul RTC DS3231
- Arduino UNO
- Taula de pa
- Connexió de cables
Pantalla de 4 dígits amb 7 segments

La pantalla de 7 segments de 4 dígits té quatre pantalles de set segments units o podem dir multiplexats. S'utilitzen per mostrar valors numèrics i també alguns alfabets amb decimals i dos punts. La pantalla es pot utilitzar en ambdues direccions. Quatre dígits són útils per fer rellotges digitals o per comptar números del 0 al 9999. A continuació es mostra el diagrama intern per a la visualització de 4 dígits de 7 segments.

Cada segment té un LED amb control LED individual. Hi ha dos tipus de pantalles de set segments, com ara Ànode Comú i Càtode Comú. La imatge anterior mostra la visualització comuna del segment de tipus ànode 7.
Ànode comú
A Common Anode, tots els terminals positius (ànodes) de tots els 8 LED estan connectats junts, anomenats COM. I tots els terminals negatius es deixen sols o connectats als pins del microcontrolador. Mitjançant l'ús de microcontrolador, si la lògica BAIXA està configurada per il·luminar el segment de LED concret i configureu la lògica Alta per apagar el LED.

Càtode comú
A Common Cathode, tots els terminals negatius (càtode) de tots els 8 LED estan connectats junts, anomenats COM. I tots els terminals positius es deixen sols o connectats als pins del microcontrolador. Si utilitzeu un microcontrolador, si configureu la lògica HIGH per il·luminar el LED i configureu LOW per apagar el LED.

Obteniu més informació sobre les pantalles de 7 segments aquí i comproveu com es pot relacionar amb altres microcontroladors:
- Interfície de visualització de 7 segments amb Arduino
- Interfície de visualització de 7 segments amb Raspberry Pi
- Interfície de la pantalla de set segments amb ARM7-LPC2148
- Interfície de visualització de 7 segments amb microcontrolador PIC
- Interfície de visualització de 7 segments amb microcontrolador 8051
IC de registre de torns 74HC595

L' IC 74HC595 també conegut com 8-Bit Serial IN - Parallel OUT Shift Register. Aquest CI pot rebre l'entrada de dades en sèrie i pot controlar 8 pins de sortida en paral·lel. Això és útil per reduir els pins utilitzats des del microcontrolador. Podeu trobar tots els projectes relacionats amb el registre de torns 74HC595 aquí.
Funcionament de 74HC595 IC:
Aquest IC utilitza tres pins com Clock, Data & Latch amb el microcontrolador per controlar els 8 pins de sortida del IC. El rellotge s’utilitza per proporcionar impulsos continus des del microcontrolador i el pin de dades s’utilitza per enviar les dades com la sortida que cal activar o desactivar a l’hora corresponent.
Pinout:
|
Número de pin |
Nom del pin |
Descripció |
|
1,2,3,4,5,6,7 |
Pins de sortida (Q1 a Q7) |
El 74HC595 té 8 pins de sortida dels quals 7 són aquests pins. Es poden controlar en sèrie |
|
8 |
Terra |
Connectat a terra del microcontrolador |
|
9 |
(Q7) Sortida en sèrie |
Aquest pin s'utilitza per connectar més d'un 74HC595 en cascada |
|
10 |
(MR) Restabliment del mestre |
Restableix totes les sortides tan baixes. Cal mantenir-lo elevat per al funcionament normal |
|
11 |
(SH_CP) Rellotge |
Aquest és el pin de rellotge al qual s'ha de proporcionar el senyal de rellotge des de l'MCU / MPU |
|
12 |
(ST_CP) Pestell |
El pin Latch s’utilitza per actualitzar les dades als pins de sortida. És actiu |
|
13 |
Habilitació de sortida (OE) |
L’activació de sortida s’utilitza per apagar les sortides. Cal mantenir-lo baix per al funcionament normal |
|
14 |
(DS) Dades de sèrie |
Aquest és el pin al qual s’envien les dades, en funció del qual es controlen les 8 sortides |
|
15 |
(Q0) Sortida |
El primer pin de sortida. |
|
16 |
Vcc |
Aquest pin alimenta l'IC, normalment s'utilitza + 5V. |
Mòdul RTC DS3231

DS3231 és un mòdul RTC. RTC significa Real Time Clock (Rellotge en temps real). Aquest mòdul s’utilitza per recordar l’hora i la data fins i tot quan el circuit no està alimentat. Té una bateria de seguretat CR2032 per executar el mòdul en absència d'alimentació externa. Aquest mòdul també inclou un sensor de temperatura. El mòdul es pot utilitzar en projectes incrustats, com ara fer rellotge digital amb indicador de temperatura, etc. A continuació, es mostren alguns projectes útils:
- Alimentador automàtic d’animals de companyia mitjançant Arduino
- Interfície del mòdul RTC (DS3231) amb microcontrolador PIC: rellotge digital
- Interfície del mòdul RTC (DS3231) amb MSP430: rellotge digital
- Rellotge ESP32 en temps real mitjançant el mòdul DS3231
- Rellotge de paret digital en PCB amb microcontrolador AVR Atmega16 i DS3231 RTC
Pinout de DS3231:
|
Nom del pin |
Ús |
|
VCC |
Connectat al positiu de la font d'energia |
|
GND |
Connectat a terra |
|
SDA |
Pin de dades de sèrie (I2C) |
|
SCL |
Pin de rellotge sèrie (I2C) |
|
SQW |
Pin de sortida d'ona quadrada |
|
32K |
Sortida de l’oscil·lador de 32K |
Característiques i especificacions:
- RTC compta segons, minuts, hores i any
- Sensor digital de temperatura amb una precisió de ± 3ºC
- Registra't per retallar l'envelliment
- Interfície I2C de 400 KHz
- Baix consum d'energia
- Còpia de seguretat de la bateria CR2032 amb una vida útil de dos a tres anys
- Voltatge de funcionament: 2,3 a 5,5 V.
Esquema de connexions

Connexió del circuit entre DS3231 RTC i Arduino UNO:
|
DS3231 |
Arduino UNO |
|
VCC |
5V |
|
GND |
GND |
|
SDA |
A4 |
|
SCL |
A4 |
Connexions de circuits entre 74HC595 IC i Arduino Uno:
|
74HC595 IC |
Arduino UNO |
|
11-SH_CP (SRCLK) |
6 |
|
12-ST_CP (RCLK) |
5 |
|
14-DS (dades) |
4 |
|
13-OE (pestell) |
GND |
|
8-GND |
GND |
|
10-MR (SRCLR) |
+ 5V |
|
16-VCC |
+ 5V |
Connexions de circuits entre IC 74HC595 i segment de 4 dígits de set i Arduino UNO:
|
4-DigitSevenSegment |
IC 74HC595 |
Arduino UNO |
|
A |
Q0 |
- |
|
B |
P1 |
- |
|
C |
P2 |
- |
|
D |
P3 |
- |
|
E |
P4 |
- |
|
F |
P5 |
- |
|
G |
Q6 |
- |
|
D1 |
- |
10 |
|
D2 |
- |
11 |
|
D3 |
- |
12 |
|
D4 |
- |
9 |

Programació Arduino UNO per a la visualització de set segments de multiplexació
El codi complet i el vídeo de treball s’adjunten al final d’aquest tutorial. A la secció de programació, s’explicarà com es pren l’hora (hora i minut) del mòdul RTC en format 24 hores i després es converteix en el format corresponent per mostrar-los a la pantalla de 4 segments de 7 dígits.
Per connectar el mòdul RTC DS3231 amb Arduino UNO, s’utilitza el bus I2C d’Arduino UNO. Una biblioteca anomenada
En aquest concepte, les hores i els minuts es prenen primer de RTC i es combinen junts com 0930 (21:30) i després els dígits individuals es separen com mil, cent, desenes, unitat i els dígits individuals convertits en format binari com 0 a 63 (0111111). Aquest codi binari s'envia a un registre de desplaçament i, a continuació, des del registre de desplaçament al segment de set, mostrant amb èxit el dígit 0 a la pantalla de set segments. D'aquesta manera, els quatre dígits es multiplexen i es mostren les hores i els minuts.
Inicialment, s'inclou la biblioteca necessària, com ara la biblioteca DS3231 i la biblioteca Wire (biblioteca I2C).
#incloure
Els pins estan definits per al control de set segments. Aquests controls tindran un paper important en la multiplexació de la pantalla.
#define latchPin 5 #define clockPin 6 #define dataPin 4 #define dot 2
Les variables es declaren per emmagatzemar el resultat convertit o en brut extret del RTC.
int h; // Variable declarada per hora int m; // Variable declarada per a milers de minuts ; int centenars; int tens; unitat int; bool h24; bool PM;
A continuació, es declara l'objecte de la classe DS3231 com a RTC per simplificar l'ús en altres línies.
DS3231 RTC;
Com que el mòdul RTC s’interfaça amb Arduino mitjançant la comunicació I2C. Per tant, wire.begin () s’utilitza per iniciar la comunicació I2C a l’adreça predeterminada de RTC, ja que no hi ha cap altre mòdul I2C.
Wire.begin ();
Es defineix el mode pin, tant si el GPIO es comportarà com a sortida o entrada.
pinMode (9, OUTPUT); pinMode (10, OUTPUT); pinMode (11, OUTPUT); pinMode (12, OUTPUT); pinMode (latchPin, OUTPUT); pinMode (clockPin, OUTPUT); pinMode (dataPin, OUTPUT); pinMode (punt, SORTIDA);
El bucle funciona infinitament i triga el temps en hores i minuts des del mòdul RTC DS3231. "h24" indica la variable de format de 24 hores.
int h = RTC.getHour (h24, PM); int m = RTC.getMinute ();
A continuació, l'hora i el minut es combinen com un sol número (per exemple, si l'hora és 10 i el mínim és 60, el número és 10 * 100 = 1000 + 60 = 1060).
número int = h * 100 + m;
Els dígits individuals de nombre s'obtenen (exemple 1060- 1 es mil, 0 es hundered, 1 es desè i 0 és l'últim dígit). Per separar els dígits, s'utilitza l'operador de mòdul. Per exemple, el 1060 per obtenir 1, el 1060/1000 = 1,06% 10 = 1). Per tant, els dígits separats s’emmagatzemen en variables separades.
int milers = nombre / 1000% 10; int centenars = nombre / 100% 10; int tens = nombre / 10% 10; int unit = número% 10;
A continuació, es defineix una declaració de commutació de majúscules i minúscules per a cada dígit individual per convertir-los al format respectiu (format binari) i enviar-los mitjançant registre de desplaçament per mostrar-los en 7 segments. Per exemple (per a 1 dígit es canvia a 06 (0000 0110)). De manera que s’envia mitjançant canvi i es mostra un dígit en 7 segments (0 per BAIX, 1 per ALTA).
commutador (t) { cas 0: unitat = 63; trencar; cas 1: unitat = 06; trencar; cas 2: unitat = 91; trencar; cas 3: unitat = 79; trencar; cas 4: unitat = 102; trencar; cas 5: unitat = 109; trencar; cas 6: unitat = 125; cas 7: unitat = 07; trencar; cas 8: unitat = 127; trencar; cas 9: unitat = 103; trencar; }
A continuació, el dígit individual en format binari s'envia mitjançant la funció "shiftout" amb MSB primer i el PIN de dígit respectiu es fa HIGH i el PIN de bloqueig es fa HIGH.
digitalWrite (9, BAIX); digitalWrite (latchPin, LOW); shiftOut (dataPin, clockPin, MSBFIRST, milers); digitalWrite (latchPin, HIGH); digitalWrite (9, ALTA); retard (5);

Amb això s'acaba el codi complet. La majoria de les explicacions sobre la funció es donen a la secció de comentaris de codi al costat de la línia de codi. La freqüència del rellotge decidirà la visió del temps i la qualitat de la multiplexació, és a dir, si s’utilitza un rellotge baix, es pot veure el parpelleig on, com si la velocitat del rellotge fos alta, no hi haurà un parpelleig i es podrà veure un temps constant.
Tingueu en compte que per accedir al mòdul RTC s’ha de mantenir la tensió del bus I2C. Per donar qualsevol suggeriment o si teniu cap dubte, comenteu a continuació.
