Conexión del display de 8 dígitos MAX7219 con Arduino
Si te apasiona la electrónica y el desarrollo de proyectos con Arduino, es probable que te hayas encontrado en la necesidad de mostrar información numérica de manera clara y eficiente. Desde temporizadores hasta contadores de puntuaciones y dashboards de sensores, contar con un display que sea versátil y fácil de manejar es esencial. Aunque el módulo TM1637 de 4 dígitos es una opción popular, hay ocasiones en que necesitamos más espacio para mostrar información. En esos casos, el MAX7219 8-Digit 7-Segment Display se convierte en nuestra mejor opción. Este módulo no solo proporciona ocho dígitos, sino que también utiliza solo tres pines de datos de tu Arduino, lo que significa que tendrás más pines disponibles para otras funciones.
En este artículo, exploraremos en profundidad el funcionamiento del MAX7219, cómo conectarlo a un Arduino y cómo programarlo para mostrar números, texto y caracteres individuales de forma simple y efectiva. ¡Comencemos a dar vida a esos dígitos!
- Descripción general del hardware
- Cómo ajustar el brillo y la corriente
- Pinout del módulo MAX7219 8-Digit 7-Segment Display
- Conectando el MAX7219 8-Digit 7-Segment Display a un Arduino
- Conectando múltiples displays en cadena
- Instalación de la biblioteca MAX7219
- Ejemplo de Arduino – Programa de prueba básico
- Demostración
- Explicación del código
Descripción general del hardware
El módulo MAX7219 es una solución compacta y eficiente que combina dos pantallas de 4 dígitos con un controlador LED MAX7219, diseñado por Analog Devices. Este módulo es ideal para proyectos que requieren la visualización de números, ya sean temporizadores, contadores, lecturas de sensores o temperaturas.
La comunicación con el módulo se realiza a través de la interfaz Serial Peripheral Interface (SPI), lo que permite controlar todos los ocho dígitos utilizando únicamente tres pines de tu microcontrolador. Uno de los aspectos más destacados del MAX7219 es su capacidad para manejar la actualización de la pantalla de manera autónoma. Simplemente necesitas enviar comandos simples a través de SPI, y el chip se encarga de refrescar la pantalla hasta 800 veces por segundo, manteniendo la luminosidad de los LEDs estable. Esto libera a tu microcontrolador para manejar otras tareas importantes.
Además, el chip MAX7219 incluye características impresionantes, tales como:
- Modo de ahorro de energía: Puedes apagar la pantalla cuando no sea necesaria para conservar energía.
- Seguridad al iniciar: El chip mantiene todos los LEDs apagados durante unos segundos al encenderse, evitando parpadeos aleatorios o patrones extraños.
- Daisy-chaining: Si necesitas un display más grande, puedes conectar varios módulos MAX7219 en cadena utilizando los mismos tres cables de datos SPI.
Cómo ajustar el brillo y la corriente
El MAX7219 te permite ajustar el brillo de la pantalla de dos maneras diferentes: a través de hardware y software. Veamos ambas opciones.
Ajuste de brillo mediante hardware
En el módulo MAX7219, encontrarás un resistor etiquetado como R1. Este resistor regula la cantidad de corriente que fluye a través de cada LED, lo que afecta directamente el brillo de la pantalla.
Diferentes pantallas de 7 segmentos requieren distintos valores de resistencias, según el tipo de LEDs que utilicen. A continuación, se presenta una tabla que muestra los valores de resistencias recomendados, basados en el voltaje y la corriente necesarios por los LEDs de tu display.
| Tipo de LED | Voltaje (V) | Corriente (mA) | Valor de R1 (Ω) |
|---|---|---|---|
| Rojo | 2.0 | 20 | 150 |
| Verde | 2.2 | 20 | 120 |
| Azul | 3.0 | 20 | 75 |
Tu módulo MAX7219 ya cuenta con el resistor R1, que típicamente es un resistor SMD de 10 kΩ. Solo necesitarás cambiar este resistor si deseas establecer un límite diferente para la corriente máxima que fluye hacia los LEDs.
Ajuste de brillo mediante software
El MAX7219 también ofrece control de brillo basado en software a través del registro de intensidad interno. Aunque esto puede parecer complicado, el proceso es bastante sencillo, ya que muchas bibliotecas como la que utilizaremos simplifican esto a un solo comando. Más adelante en este tutorial, te mostraremos cómo implementarlo en tu código.
Pinout del módulo MAX7219 8-Digit 7-Segment Display
El módulo cuenta con dos conjuntos de pines:
Conector de entrada
Estos son los pines que utilizas para conectar el módulo a tu microcontrolador (como un Arduino):
- VCC: Es el pin de alimentación. Conéctalo a una fuente de 4V a 5.5V. Es recomendable usar una fuente de alimentación separada, ya que la pantalla puede consumir bastante energía. Si decides usar el pin de 5V del Arduino, mantén el brillo por debajo del 25% para evitar sobrecalentamientos en el regulador de voltaje.
- GND: Es el pin de tierra. Debe estar conectado al común de tierra.
- DIN: Es el pin de entrada de datos, que recibe datos en serie desde el Arduino. Puede asignarse a cualquier pin digital disponible en tu Arduino.
- CS: Es el pin de selección de chip, utilizado para habilitar la comunicación con el módulo. Este también se conecta a un pin digital en tu Arduino.
- CLK: Es el pin de reloj, que sincroniza la transferencia de datos mediante pulsos del Arduino. Este también se conecta a un pin digital en tu Arduino.
Conector de salida
El segundo conjunto de pines se utiliza para conectar múltiples displays en cadena (daisy-chaining):
- VCC: Conecta al pin VCC del siguiente módulo.
- GND: Conecta al pin GND del siguiente módulo.
- DOUT: Es el pin de salida de datos que se conecta al pin DIN del siguiente módulo.
- LOAD: Conecta al pin CS del siguiente módulo.
- CLK: Conecta al pin CLK del siguiente módulo.
Conectando el MAX7219 8-Digit 7-Segment Display a un Arduino
Ahora que hemos aprendido sobre el funcionamiento del módulo MAX7219, es el momento de conectarlo a un Arduino y ponerlo en funcionamiento.
Comienza conectando el pin VCC del módulo a la salida de 5V del Arduino, y el pin GND a uno de los pines de tierra (GND) del Arduino.
A continuación, conectaremos los pines necesarios para la comunicación SPI. Conecta el pin DIN al pin digital 12 del Arduino, el pin CS al pin digital 11 y el pin CLK al pin digital 10.
Aquí tienes una tabla de referencia rápida para las conexiones de los pines:
| Pin MAX7219 | Conexión Arduino |
|---|---|
| VCC | 5V |
| GND | GND |
| DIN | Digital 12 |
| CS | Digital 11 |
| CLK | Digital 10 |
Conectando múltiples displays en cadena
Si quieres crear un display más grande utilizando varios módulos MAX7219, puedes conectarlos en cadena de manera sencilla. Solo necesitas conectar el pin DOUT del primer módulo al pin DIN del siguiente módulo. Luego, comparte las conexiones de VCC, GND, CLK y CS entre todos los displays.
Instalación de la biblioteca MAX7219
Escribir todo el código para controlar el display MAX7219 desde cero puede ser complicado y consumir mucho tiempo. Afortunadamente, existe una biblioteca útil llamada MAX7219 que facilita mucho las cosas.
Para instalar la biblioteca:
- Abre el programa Arduino IDE y haz clic en el icono de Gestor de bibliotecas en la barra lateral izquierda.
- Escribe "max7219" en el cuadro de búsqueda para filtrar los resultados.
- Busca la biblioteca max7219 de Jonathan Evans.
- Haz clic en el botón Instalar para agregarla a tu IDE de Arduino.
Ejemplo de Arduino – Programa de prueba básico
A continuación, se presenta un programa de prueba básico que recorre diferentes rutinas para verificar rápidamente si el módulo funciona correctamente y para entender cómo se comportan el texto, los números, los caracteres y las posiciones en el display.
Prueba este código; más adelante revisaremos su funcionamiento:
#include <max7219.h>
MAX7219 max7219;
void setup() {
max7219.Begin();
}
void loop() {
String temp;
char temp2[8];
int y;
//Demostración de texto
max7219.DisplayText("95.67F", 1); //1=Justificado a la derecha
delay(1000);
max7219.Clear();
max7219.DisplayText("95.67F", 0); //0=Justificado a la izquierda
delay(1000);
max7219.Clear();
//Contador con decimales
//contador lento
for (float x = 0; x < 1; x = x + 0.1) {
temp = String(x);
temp.toCharArray(temp2, temp.length());
max7219.DisplayText(temp2, 1);
delay(500);
}
//contador rápido
for (float x = 0; x < 500; x++) {
temp = String(x);
temp.toCharArray(temp2, temp.length());
max7219.DisplayText(temp2, 1);
}
delay(500);
//Demostración de caracteres
max7219.Clear();
max7219.DisplayChar(7, 'H', 0); //Posición 7 está a la izquierda del display
delay(500);
max7219.DisplayChar(6, 'E', 0);
delay(500);
max7219.DisplayChar(5, 'L', 0);
delay(500);
max7219.DisplayChar(4, 'L', 0);
delay(500);
max7219.DisplayChar(3, 'O', 0);
delay(500);
max7219.DisplayChar(2, '1', 0);
delay(500);
max7219.DisplayChar(1, '2', 0);
delay(500);
max7219.DisplayChar(0, '3', 0);
delay(500);
max7219.Clear();
//Contar desde la derecha
for (int x = 0; x = 0; x--) {
max7219.DisplayChar(x, '7'-x, 0);
delay(500);
}
max7219.Clear();
//Contar desde la derecha
for (int x = 0; x = 0; x--) {
max7219.DisplayChar(x, '7'-x, 0);
delay(500);
max7219.Clear();
}
}
Demostración
Una vez que subas el sketch a tu Arduino, deberías ver varias animaciones que demuestran las capacidades del display, desde el conteo de números hasta la visualización de caracteres.
Explicación del código
El sketch comienza incluyendo la biblioteca max7219.h, que proporciona todas las funciones necesarias para comunicarse con el módulo de display.
Después de eso, creamos un objeto llamado max7219. Este objeto es lo que utilizaremos a lo largo del programa para controlar el display.
Dentro de setup(), llamamos a la función Begin() para activar el display y prepararlo para recibir nuestras instrucciones.
void setup() {
max7219.Begin();
}Al inicio de loop(), creamos dos variables para almacenar nuestros datos. Usamos temp para guardar números como texto, y temp2 como un arreglo de caracteres, ya que la función de display espera que el texto esté en ese formato.
String temp;
char temp2[8];Luego, utilizamos la función DisplayText(Text, Justification) para mostrar "95.67F" en el display. Esta función permite enviar un string o número completo a tu display de 8 dígitos de una vez.
Realmente solo necesita dos piezas de información específicas para funcionar: el texto que deseas mostrar (que puede contener hasta 8 caracteres, más hasta 8 puntos decimales) y tu alineación preferida. Simplemente pasa un 0 para justificar el texto a la izquierda o un 1 para alinearlo a la derecha.
max7219.DisplayText("95.67F", 1); //Justificado a la derecha
delay(1000);
max7219.Clear();A continuación, hacemos una pausa de un segundo para facilitar la lectura, y luego limpiamos la pantalla utilizando la función Clear().
Después de eso, mostramos el mismo texto, pero pasamos un 0 en su lugar para mover el texto hacia el lado izquierdo.
max7219.DisplayText("95.67F", 0); //Justificado a la izquierda
delay(1000);
max7219.Clear();Luego, pasamos a construir algunos contadores.
Primero configuramos un contador lento utilizando una variable float que va de 0 a 1 en incrementos de 0.1. Dentro de este bucle, tomamos ese número, lo convertimos en un string y luego lo pasamos a nuestro arreglo de caracteres, porque ese es el formato específico que espera el display. Lo imprimimos a la derecha y esperamos medio segundo entre cada actualización para poder observar cómo cuenta.
for (float x = 0; x < 1; x = x + 0.1) {
temp = String(x);
temp.toCharArray(temp2, temp.length());
max7219.DisplayText(temp2, 1);
delay(500);
}A continuación, ejecutamos un contador más rápido que va de 0 a 500. Utilizamos el mismo método de conversión, pero omitimos el delay dentro del bucle. Esto permite que los números aparezcan tan rápido como el Arduino pueda procesarlos.
for (float x = 0; x < 500; x++) {
temp = String(x);
temp.toCharArray(temp2, temp.length());
max7219.DisplayText(temp2, 1);
}
delay(500);Después de limpiar la pantalla nuevamente, comenzamos a jugar con caracteres individuales. Escribimos "HELLO123" un carácter a la vez.
Para esto, usamos la función DisplayChar(Digit, Char, Decimal), que nos permite escribir en dígitos específicos del display. Esta función espera tres entradas: el número de posición objetivo (donde 7 corresponde a la parte izquierda del display y 0 a la derecha), el carácter que deseas mostrar y finalmente, un indicador para activar o desactivar el punto decimal (0 para apagado, 1 para encendido).
max7219.Clear();
max7219.DisplayChar(7, 'H', 0); //Posición 7 está a la izquierda del display
delay(500);
max7219.DisplayChar(6, 'E', 0);
delay(500);
max7219.DisplayChar(5, 'L', 0);
delay(500);
max7219.DisplayChar(4, 'L', 0);
delay(500);
max7219.DisplayChar(3, 'O', 0);
delay(500);
max7219.DisplayChar(2, '1', 0);
delay(500);
max7219.DisplayChar(1, '2', 0);
delay(500);
max7219.DisplayChar(0, '3', 0);
delay(500);
max7219.Clear();Finalmente, tenemos algunas animaciones de conteo.
Ejecutamos un bucle de 0 a 7 y usamos el carácter ‘0’ y le sumamos nuestro contador de bucle. Dado que la posición 0 está en el extremo derecho, terminamos llenando el display con números que se desplazan de derecha a izquierda.
for (int x = 0; x < 8; x++) {
max7219.DisplayChar(x, '0'+x, 0);
delay(500);
}Luego, cambiamos el cálculo y contamos hacia atrás desde 7 hasta 0, lo que imprime nuestros números moviéndose de izquierda a derecha.
for (int x = 7; x >= 0; x--) {
max7219.DisplayChar(x, '7'-x, 0);
delay(500);
}Por último, ejecutamos esos mismos dos bucles nuevamente, pero esta vez limpiamos la pantalla justo después de imprimir cada número. En lugar de dejar los números en la pantalla, creamos un efecto en el que un solo número viaja a través del display, primero de derecha a izquierda, y luego de izquierda a derecha.
for (int x = 0; x = 0; x--) {
max7219.DisplayChar(x, '7'-x, 0);
delay(500);
max7219.Clear();
} Deja una respuesta

Estos temas te pueden interesar