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!

Índice de contenido
  1. Descripción general del hardware
  2. Cómo ajustar el brillo y la corriente
    1. Ajuste de brillo mediante hardware
    2. Ajuste de brillo mediante software
  3. Pinout del módulo MAX7219 8-Digit 7-Segment Display
    1. Conector de entrada
    2. Conector de salida
  4. Conectando el MAX7219 8-Digit 7-Segment Display a un Arduino
  5. Conectando múltiples displays en cadena
  6. Instalación de la biblioteca MAX7219
  7. Ejemplo de Arduino – Programa de prueba básico
  8. Demostración
  9. 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 LEDVoltaje (V)Corriente (mA)Valor de R1 (Ω)
Rojo2.020150
Verde2.220120
Azul3.02075

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 MAX7219Conexión Arduino
VCC5V
GNDGND
DINDigital 12
CSDigital 11
CLKDigital 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:

  1. Abre el programa Arduino IDE y haz clic en el icono de Gestor de bibliotecas en la barra lateral izquierda.
  2. Escribe "max7219" en el cuadro de búsqueda para filtrar los resultados.
  3. Busca la biblioteca max7219 de Jonathan Evans.
  4. 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();
}

Carlos Julián

Carlos Julián es el fundador de Ingtelecto, es Ingeniero Mecatrónico, Profesor y Programador, cuenta con una Maestria en Ciencias de la Educación, creador de contenido educativo en redes sociales. Lee más sobre mi trayectoria aquí.

Estos temas te pueden interesar

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Tu puntuación: Útil

Subir