Objetivos
- Presentar las matrices LED de 8×8 controladas por MAX7219.
- Mostrar un circuito de muestra.
- Programar diferentes mensajes.
Material requerido.
![]() | Arduino UNO o equivalente. | Arduino UNO o equivalente.. |
![]() ![]() | Una Protoboard más cables.. | Una Protoboard más cables.. |
![]() | Una matriz de LEDs 8×8, con gobernada por un MAX7219 | Una matriz de LEDs 8×8, con gobernada por un MAX7219 |
Las matrices LED
Si me habéis aguantado hasta aquí, ya estáis familiarizados con la idea, de que cuando en electrónica algo es un asco, por trabajoso, pesado o molesto, alguien se descuelga con un chip integrado que nos resuelve la papeleta y así podemos dedicarnos a pensar en lo que queremos y no estar preocupados por si se suelta un cable o por si habremos definido bien las matrices de caracteres.
Y como ya sospechabais, las matrices LED de 8×8, no son una excepción.
De hecho, tenemos un integrado muy extendido del fabricante Maxim, el MAX7219/MAX7221 que nos hace reconciliarnos con las matrices LEDs y hasta con los displays de 7 segmentos. Sus características son:
- Entrada y salida en serie, para necesitar menos pines.
- Controla displays de 7 segmentos de hasta 8 dígitos.
- Bar graph displays o Barras de LEDs.
- Matrices de 8×8 o hasta 64 LEDs individuales.
- Solo requiere una resistencia externa para los 64 LEDs.
- Incluye decodificador BCD (No hay necesidad de dibujar matrices de caracteres, las lleva incluidas. Mayúsculas, minúsculas y hasta números y signos).
- Se encarga del multiplexado de los caracteres y dígitos.
- Incluye memoria de los caracteres.
- Es compatible con SPI y QSPI, (Algún día tendremos que hablar del SPI).
- Es barato y se consiguen por pocos euros.
Así que la única razón para manejar cualquier tipo de displays LED a mano y cableando, es la de comprender un circuito y aprender (Sufriendo por supuesto), pero en el mundo real usaremos un chip de este estilo, porque nos ahorrará muchas horas de improperios.
En el futuro incluiremos alguna sesión mostrando como manejar displays con el chip directamente, pero de momento vamos a empezar por una placa que incluye una matriz de 8×8 con uno de estos chips.
Por menos de lo que valen los componentes, ya nos venden unas plaquitas con una matriz gobernada por un MAX7219 y con pines para olvidarnos de las complicaciones. Son fáciles de montar en una protoboard y con la ventaja añadida de que se pueden cascadear, es decir, montar hasta 8 en serie. La conexión con nuestros Duino es a través de un puerto serie asíncrono SPI
Esquema de conexiones
De nuevo, cuando se usa un controlador externo, la conexión es trivial.

Y para la protoboard

El Programa de control
Para manejar el array, existe disponible una librería de control, llamada LedControlMS y que podéis descargar desde aquí Libreria adafruit LEDControl
Una vez que la hayáis instalado con Programa\Importar Librería\Añadir librería, debéis lo primer hacer el include correspondiente:
#include "LedControlMS.h"
Después indicar cuantos displays vamos a usar, uno de momento y crear una instancia de la clase LedControl, pasándole los pines de control y por último el número de matrices que vamos a usar:
#define NumMatrix 1
LedControl lc=LedControl(12,11,10, NumMatrix);
Cuando arrancamos las matrices están en modo standby. Hay que levantarlas
for (int i=0; i< NumMatrix ; i++) { lc.shutdown(i,false); // Activar la matriz lc.setIntensity(i,8); // Poner el brillo a un valor intermedio lc.clearDisplay(i); // Y borrar todo }
Y ya solo queda escribir el mensaje:
lc.writeString(0,"Curso Arduino de Prometec.net");
En resumen, el programa completo para escribir un mensaje quedaría así:
Como podeis ver, igual igual que en la sesión anterior.No tenemos que definir arrays de caracteres, ni preocuparnos de multiplexar los pines.
- Soy un fiel defensor de trabajar lo mínimo para conseguir nuestros objetivos (En la jerga informática se llama optimizar recursos), pero esto es porque los chicos de Adafruit, a los que nunca les daremos suficientemente las gracias, se han trabajado una librería para nosotros.
- Pero no os equivoquéis, esta librería por debajo, hace exactamente lo que vimos en la sesión anterior. Definir arrays de caracteres y funciones de multiplexado de LEDs.
- Si tenéis interés, (Alguien habrá digo yo) podéis verlo, porque haciendo \\Programa\Añadir fichero podéis buscar dos programas en vuestro directorio de librerías, que suele ser\Documents\Arduino\libraries\LedControlMS en Windows y si cargáis LedControlMS.cpp veréis los programas que forman la librería(No os asusteis, que las libreiras no estan hechas para que las entiendan los novatos).
Entre tanto aqui os dejo un mini video con el resultado.
Resumen de la sesión
- Hemos visto, muy por encima, las caracteristicas MAX7219.
- En el futuro volveremos sobre este integrado, porque resuleve muy bien la problemática de displays LEDs de diferentes tipos.
- Hemos visto que ya nos venden montadas con bus SPI modulos con array de 8×8 y unMAX7219, que se manejan muy facilmente si queremos sacar mensajes de texto o numeros.
Hola!! Una consulta, cómo sería si quisiera que mi matriz de led se active con un pulsador? Estaría bien si uso estos comandos, pero en vez de “LED” lo reemplazo por el nombre de la matriz?
const int LED =13;
const int BOTON = 7;
int val = 0; //val se emplea para almacenar el estado del boton
int state = 0; // 0 LED apagado, mientras que 1 encendido
int old_val = 0; // almacena el antiguo valor de val
void setup(){ // definir si la variable es de entrada // o salida.
pinMode(LED,OUTPUT); // establecer que el pin digital es una señal de salida
pinMode(BOTON,INPUT)
Gracias por tu ayuda
Sí, y luego haces un ondicional con el botón aquí:
if (boton == 1)
{
lc.writeString(0,” Curso Arduino de Prometec.net “);
delay(1000);
}
Disculpen como seria para q se vaya desplazando letra por letra o numero
Echa un ojo aquí https://www.prometec.net/scroll-max7219/
Hola, estoy feliz de ver funcionar la matriz, me gustaría que las letras se desplacen, que aparezcan y desaparezcan de manera dinámica, de derecha a izquierda, facilita leer el mensaje.
Hola, estoy teniendo un problema con la representación de números y letras, cuando compilo el programa en el IDE de arduino me tira un error que dice lo siguiente: ‘ ISO C++ forbids converting a string constant to ‘char*’ ‘, si me pudieran ayudar seria de gran ayuda
Hola Pablo, he descargado el programa y no me da ningún error. Si estás haciendo copia y pega, descárgatelo mejor.