- Componentes requeridos
- Pantalla de 4 dígitos y 7 segmentos
- 74HC595 Registro de cambios IC
- Módulo RTC DS3231
- Diagrama de circuito
- Programación de Arduino UNO para multiplexar pantalla de siete segmentos
Los relojes de pared digitales se están volviendo más populares hoy en día y son mejores que los relojes analógicos, ya que proporcionan la hora exacta en horas, minutos y segundos y son fáciles de leer los valores. Algunos relojes digitales también tienen muchas funciones, como mostrar la temperatura, la humedad, configurar varias alarmas, etc. La mayoría de los relojes digitales utilizan una pantalla de siete segmentos.
Anteriormente construimos muchos circuitos de relojes digitales usando pantallas de 7 segmentos o usando LCD de 16x2. Aquí puede ver los diseños completos de PCB del reloj digital basado en AVR. Este tutorial trata sobre cómo hacer un reloj digital multiplexando pantallas de cuatro 7 segmentos usando Arduino UNO y mostrando la hora en formato HH: MM.
Componentes requeridos
- Pantalla de 4 dígitos y 7 segmentos
- 74HC595 IC
- Módulo RTC DS3231
- Arduino UNO
- Tablero de circuitos
- Cables de conexión
Pantalla de 4 dígitos y 7 segmentos
La pantalla de 4 dígitos y 7 segmentos tiene cuatro pantallas de siete segmentos unidas o podemos decir multiplexadas juntas. Se utilizan para mostrar valores numéricos y también algunos alfabetos con decimales y dos puntos. La pantalla se puede utilizar en ambas direcciones. Cuatro dígitos son útiles para hacer relojes digitales o como contar números del 0 al 9999. A continuación se muestra el diagrama interno para la pantalla de 4 dígitos y 7 segmentos.
Cada segmento tiene un LED con control LED individual. Hay dos tipos de pantallas de siete segmentos, como el ánodo común y el cátodo común. La imagen de arriba muestra la pantalla de 7 segmentos de tipo ánodo común.
Ánodo común
En el ánodo común, todos los terminales positivos (ánodos) de los 8 LED están conectados entre sí, denominados COM. Y todos los terminales negativos se dejan solos o se conectan a los pines del microcontrolador. Al usar un microcontrolador, si la lógica BAJA está configurada para iluminar el segmento de LED en particular y configura la lógica Alta para apagar el LED.
Cátodo común
En cátodo común, todos los terminales negativos (cátodo) de los 8 LED están conectados entre sí, denominados COM. Y todos los terminales positivos se dejan solos o se conectan a los pines del microcontrolador. Mediante el uso del microcontrolador, si se establece la lógica ALTA para iluminar el LED y se establece BAJO para apagar el LED.
Obtenga más información sobre las pantallas de 7 segmentos aquí y compruebe cómo se puede conectar con otros microcontroladores:
- Interfaz de pantalla de 7 segmentos con Arduino
- Interfaz de pantalla de 7 segmentos con Raspberry Pi
- Interfaz de pantalla de siete segmentos con ARM7-LPC2148
- Interfaz de pantalla de 7 segmentos con microcontrolador PIC
- Interfaz de pantalla de 7 segmentos con microcontrolador 8051
74HC595 Registro de cambios IC
El IC 74HC595 también conocido como 8-Bit Serial IN - Parallel OUT Shift Register. Este IC puede recibir entrada de datos en serie y puede controlar 8 pines de salida en paralelo. Esto es útil para reducir los pines utilizados por el microcontrolador. Puede encontrar todos los proyectos relacionados con el registro de turnos 74HC595 aquí.
Funcionamiento de 74HC595 IC:
Este IC utiliza tres pines como Clock, Data & Latch con el microcontrolador para controlar los 8 pines de salida del IC. El reloj se usa para proporcionar pulsos continuos desde el microcontrolador y el pin de datos se usa para enviar los datos, como qué salida debe encenderse o apagarse a la hora del reloj respectivo.
Pinout:
Número de PIN |
Nombre de PIN |
Descripción |
1,2,3,4,5,6,7 |
Pines de salida (Q1 a Q7) |
El 74HC595 tiene 8 pines de salida de los cuales 7 son estos pines. Se pueden controlar en serie |
8 |
Suelo |
Conectado al suelo del microcontrolador |
9 |
(Q7) Salida serial |
Este pin se utiliza para conectar más de un 74HC595 en cascada. |
10 |
(MR) Reinicio maestro |
Restablece todas las salidas como bajas. Debe mantenerse alto para un funcionamiento normal |
11 |
(SH_CP) Reloj |
Este es el pin de reloj al que se debe proporcionar la señal de reloj desde MCU / MPU |
12 |
(ST_CP) Pestillo |
El pin Latch se utiliza para actualizar los datos a los pines de salida. Es activo alto |
13 |
(OE) Habilitación de salida |
La habilitación de salida se utiliza para apagar las salidas. Debe mantenerse bajo para un funcionamiento normal |
14 |
(DS) Datos en serie |
Este es el pin al que se envían los datos, en función del cual se controlan las 8 salidas |
15 |
(Q0) Salida |
El primer pin de salida. |
dieciséis |
Vcc |
Este pin alimenta el IC, generalmente se usa + 5V. |
Módulo RTC DS3231
DS3231 es un módulo RTC. RTC son las siglas de Real Time Clock. Este módulo se utiliza para recordar la hora y la fecha incluso cuando el circuito no está encendido. Tiene una batería de respaldo CR2032 para ejecutar el módulo en ausencia de energía externa. Este módulo también incluye un sensor de temperatura. El módulo se puede utilizar en proyectos integrados, como hacer un reloj digital con indicador de temperatura, etc. Aquí hay algunos proyectos útiles que lo utilizan:
- Alimentador automático de mascotas con Arduino
- Interfaz del módulo RTC (DS3231) con el microcontrolador PIC: reloj digital
- Interfaz del módulo RTC (DS3231) con MSP430: Reloj digital
- Reloj en tiempo real ESP32 usando el módulo DS3231
- Reloj de pared digital en PCB con microcontrolador AVR Atmega16 y DS3231 RTC
Pinout de DS3231:
Nombre de PIN |
Utilizar |
VCC |
Conectado al positivo de la fuente de alimentación |
GND |
Conectado a tierra |
SDA |
Pin de datos en serie (I2C) |
SCL |
Pin de reloj serie (I2C) |
SQW |
Pin de salida de onda cuadrada |
32K |
Salida de oscilador de 32K |
Características y especificaciones:
- RTC cuenta segundos, minutos, horas y año
- Sensor de temperatura digital con precisión de ± 3ºC
- Regístrese para envejecer
- Interfaz I2C de 400 kHz
- Bajo consumo de energía
- Batería de respaldo CR2032 con una vida útil de dos a tres años
- Voltaje de funcionamiento: 2,3 a 5,5 V
Diagrama de circuito
Conexión de circuito entre DS3231 RTC y Arduino UNO:
DS3231 |
Arduino UNO |
VCC |
5V |
GND |
GND |
SDA |
A4 |
SCL |
A4 |
Conexiones de circuito entre 74HC595 IC y Arduino Uno:
74HC595 IC |
Arduino UNO |
11-SH_CP (SRCLK) |
6 |
12-ST_CP (RCLK) |
5 |
14-DS (datos) |
4 |
13-OE (pestillo) |
GND |
8-GND |
GND |
10-MR (SRCLR) |
+ 5V |
16-VCC |
+ 5V |
Conexiones de circuito entre IC 74HC595 y siete segmentos de 4 dígitos y Arduino UNO:
Segmento de siete dígitos de 4 dígitos |
IC 74HC595 |
Arduino UNO |
UN |
Q0 |
- |
segundo |
Q1 |
- |
C |
Q2 |
- |
re |
Tercer trimestre |
- |
mi |
Cuarto trimestre |
- |
F |
Q5 |
- |
GRAMO |
Q6 |
- |
D1 |
- |
10 |
D2 |
- |
11 |
D3 |
- |
12 |
D4 |
- |
9 |
Programación de Arduino UNO para multiplexar pantalla de siete segmentos
El código completo y el video de trabajo se adjuntan al final de este tutorial. En la sección de programación, se explicará cómo se toma la hora (hora y minutos) del módulo RTC en formato de 24 horas y luego se convierte al formato respectivo para mostrarlos en la pantalla de 7 segmentos de 4 dígitos.
Para conectar el módulo DS3231 RTC con Arduino UNO, se utiliza el bus I2C de Arduino UNO. Una biblioteca llamada
En este concepto, la hora y los minutos se toman primero de RTC y se combinan juntos como 0930 (09:30 pm) y luego los dígitos individuales se separan como mil, cien, decenas, unidad y los dígitos individuales se convierten en formato binario como 0 en 63 (0111111). Este código binario se envía a un registro de desplazamiento y luego desde el registro de desplazamiento al de siete segmentos, mostrando con éxito el Dígito 0 en la pantalla de siete segmentos. De esta forma, los cuatro dígitos se multiplexan y se muestran la hora y los minutos.
Inicialmente, se incluye la biblioteca necesaria, como la biblioteca DS3231 y la biblioteca Wire (biblioteca I2C).
#incluir
Los pines están definidos para el control de siete segmentos. Estos controles jugarán un papel importante en la multiplexación de la pantalla.
#define latchPin 5 #define clockPin 6 #define dataPin 4 #define dot 2
Las variables se declaran para almacenar el resultado convertido o sin procesar tomado del RTC.
int h; // Variable declarada para la hora int m; // Variable declarada por minuto int miles; int cientos; int decenas; unidad int; bool h24; bool PM;
A continuación, el objeto de la clase DS3231 se declara como RTC para simplificar el uso en otras líneas.
DS3231 RTC;
Como el módulo RTC se interconecta con Arduino mediante la comunicación I2C. Entonces, wire.begin () se usa para iniciar la comunicación I2C en la dirección predeterminada de RTC ya que no hay otros módulos I2C.
Wire.begin ();
El modo pin está definido, si el GPIO se comportará como salida o como entrada.
pinMode (9, SALIDA); pinMode (10, SALIDA); pinMode (11, SALIDA); pinMode (12, SALIDA); pinMode (latchPin, SALIDA); pinMode (clockPin, SALIDA); pinMode (dataPin, SALIDA); pinMode (punto, SALIDA);
El bucle se ejecuta de manera infinita y toma el tiempo en horas y minutos del módulo RTC DS3231. 'h24' indica la variable de formato de 24 horas.
int h = RTC.getHour (h24, PM); int m = RTC.getMinute ();
Luego, la hora y los minutos se combinan como un número (por ejemplo, si la hora es 10 y el mínimo es 60, entonces el número es 10 * 100 = 1000 + 60 = 1060).
int número = h * 100 + m;
Se obtienen los dígitos individuales del número (ejemplo 1060-1 es mil, 0 es hunde, 1 es el décimo y 0 es el último dígito). Para separar los dígitos, se utiliza el operador de módulo. Por ejemplo, en 1060 para obtener 1 luego 1060/1000 = 1.06% 10 = 1). Entonces, los dígitos separados se almacenan en variables separadas.
int miles = número / 1000% 10; int centenas = número / 100% 10; int decenas = número / 10% 10; int unidad = número% 10;
Después de eso, se define una declaración de cambio de caso para cada dígito individual para convertirlos en el formato respectivo (formato binario) y enviarlos a través del registro de desplazamiento para mostrarlos en 7 segmentos. Por ejemplo (para 1 dígito se cambia a 06 (0000 0110)). De modo que se envía mediante desplazamiento y se muestra 1 dígito en 7 segmentos (0 para BAJO, 1 para ALTO).
switch (t) { caso 0: unidad = 63; romper; caso 1: unidad = 06; romper; caso 2: unidad = 91; romper; caso 3: unidad = 79; romper; caso 4: unidad = 102; romper; caso 5: unidad = 109; romper; caso 6: unidad = 125; caso 7: unidad = 07; romper; caso 8: unidad = 127; romper; caso 9: unidad = 103; romper; }
Luego, el dígito individual en formato binario se envía a través de la función 'shiftout' con MSB primero y el pin del dígito respectivo se hace ALTO y el pin de cierre se hace ALTO.
digitalWrite (9, BAJO); digitalWrite (latchPin, LOW); shiftOut (dataPin, clockPin, MSBFIRST, miles); digitalWrite (latchPin, HIGH); escritura digital (9, ALTA); retraso (5);
Esto termina el código completo. La mayor parte de la explicación de la función se da en la sección de comentarios del código justo al lado de la línea de código. La frecuencia del reloj decidirá la vista del tiempo y la calidad de la multiplexación, es decir, si se usa un reloj bajo, entonces se puede ver el parpadeo donde, como si la velocidad del reloj fuera alta, entonces no habrá ese parpadeo y se puede ver un tiempo estable..
Tenga en cuenta que para acceder al módulo RTC, se debe mantener la tensión del bus I2C. Para dar alguna sugerencia o si tiene alguna duda, por favor comente a continuación.