bclose

Matriz LED 8×8 con MAX7219 y SPI

Arduino y los arrays de 8x8 SPI

Objetivos

 

 

    • Presentar las matrices LED de 8×8 controladas por MAX7219.
    • Mostrar un circuito de muestra.
    • Programar diferentes mensajes.
 

Material requerido.

Imagen de Arduino UNO  Arduino UNO o equivalente. Arduino UNO o equivalente..
Protoboard conexiones

Una Protoboard más cables..

Una Protoboard más cables..

Array LED 8x8

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.

Array LED 8x8

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.

Esquema electrico

Y para la protoboard

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í:

Contenido solo disponible para suscriptores. ¡Accede al contenido!

     

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.
 

 

 

 

Para porder realizar consultas a nuestros expertos, tienes que ser suscriptor. Suscribiendote nos ayudas a mantener este proyecto en marcha.

¡ Quiero Suscribirme !

Si ya eres premium y no puedes comentar haz login. Hacer login

(101) Comments

  • Avatar for Charly

    Hola Amigo,

    Tengo conectada la matriz como lo indicas, pero lo unico que veo es la primera Columna prendida de leds y todos los demas apagados no sabes que podria ser? gracias!

  • Avatar for Charly
    • Admin

    Hola Leo, me alegro que te funcione jajajaja, Seguro que se puede modificar la velocidad aunque habria que echar una ojeada a las funciones de la libreria. A ver si saco un rato y lo miro para deceirte algo.
    Revisa tambien el siguiente tutorial donde veras como mover mensajes entre varios de estos displays para sacar esos mensajes moviles tan precuentes en los letreros

  • Avatar for Charly

    hola,muy buen tutorial , primera configuración que encuentro que, en realidad si funciona ..
    y una consulta, se puede disminuir la velocidad con la que aparecen las letras?
    de antemano gracias .

  • Avatar for Charly
    • Xivo

    Muchas gracias por el consejo, intentare buscar las matrices hechas con max7291, pero por lo que parece son menos comunes que las otras en ebay, ¿me puedes recomendar donde conseguirlas?. Gracias.

  • Avatar for Charly
    • Admin

    Hola xivo, en principio nosotros hemos utilizado un unico max7291 que es capaz de gobernar la matriz 8×8 directamente. Pero tu placa tiene dos 7ahc595 que son shift registers y por eso necesita dos para manejar la matriz.
    Sin duda puedes hacerlo, pero te dara un poco mas de trabajo. Revisa nuestro tutorial sobre el 74HC95 y veras como se maneja.
    La idea de usar dos para gobernar la matriz es que uses uno de los shif registers para majar las filas y el otro para las columnas. SI en una fila pones un 1 para que la corriente fluya tienes que poner en todas las columnas un 1 excepto en la que se encuentra el led que quieres encender y tendras que hacer un ciclo para ir encendiendo sucesivamente los pines a iluminar.
    Sera un poco mas trabajoso, pero si te lias con el asunto es mas facil que tires esos chismes y compres matrices con el max7291 que es mucho mas facila de manejar y esa diseñado para eso
    Suerte

  • Avatar for Charly
    • Xivo

    Saludos a todos.

    Veréis, tengo una duda, he adquirido una serie de matrices 8×8 con sus drivers en Ebay de un solo color. Usan 2 chips 74hc595.

    ¿Me podríais ayudar?, sé que se tienen que comunicar con SPI, pero ¿Me sirve lo que habéis hecho vosotros?

    Muchas gracias, la verdad es que me tiene superfrito esta parte del proyecto y por su culpa lo tengo todo parado.

  • Avatar for Charly
    • Admin

    Hola de nuevo Angel,
    Te ayudare en lo que pueda (Aunque ahora estoy fuera de mi casa) y efectivamente tienes un ejemplo de shiftleft en el tutorial https://www.prometec.net/scroll-max7219/ scrolling with max7219, echale una ojeada y me dices

  • Avatar for Charly
    • AngelVinny

    Saludos,

    Si lo probe con lc.writeString(0,” Curso Arduino de Prometec.net “); pero el texto me aparece letra por letra, mi objetivo es como desplazar cualquier texto de derecha a izquierda como un letrero de anuncios,
    tengo entendido que hay una funcion shiftLeft, con la cual podria hacerlo y si es asi me puedes ayudar

    De antemano gracias por ti tiempo para ayudarme

  • Avatar for Charly
    • Admin

    Hola Angeligo en la
    Pues nada mas facil. SImplemente pon tu codigo:
    lc.writeString(0,» Curso Arduino de Prometec.net «);
    Y reemplaza el mensaje por el que te interese

  • Avatar for Charly
    • AngelVinny

    Saludos,
    Gracias por el aporte lo he solucionado solo fue un error pequiño de coneccion 🙁 va muy bien tu programa,

    Ahora mi duda es la siguiente espero me puedas ayudar,

    Quiero un texto cualquiera de unos 120 caracteres se desplazen de derecha a izquierda por lo menos con dos matrices, se que el primer cambio es #define NumMatrix 2, cual seria el resto de codigo para obtener ese resultado

  • Avatar for Charly
    • Admin

    Angel, siento decirte que al no poder hacer pruebas, poco te puedo decir.
    Te recomendaria que pases la consulta al foro de usuarios , a ver si tenemos alli alguien que tenga material para replicar tu montaje y nos pueda decir algo al respecto.
    siento no poder ayudarte mas

  • Avatar for Charly
    • AngelVinny

    en las resistencias me refiero a las Rset del diagrama nada mas

  • Avatar for Charly
    • Angelvinny

    Saludos,

    Y gracias por la pronta respuesta, si es una matriz catodo común, he verificado bien ademas recalco que las resistencias usadas son de 10k, y este es el resultado que tengo:

  • Avatar for Charly
    • Admin

    Hola Angel,
    Me temo que voy a ser de mucha ayuda, porque depende de la matriz que estes usando y sus caracteristicas. Por ejemplo el esquema que nos mestras es de catodo comun asi que ¿Estas seguro de que tu matriz tambien? porque sino no va a funcionarte

  • Avatar for Charly
    • AngelVinny

    Saludos cordiales,

    Estimado tengo un inconveniente, he armado mi proyecto siguiendo este ejemplo, pero no he podido adquirir el modulo entero he hechado mano de mi taller con cosas que ya tenia y he conectado mi max7219 con una matriz 8×8 segun la imagen adjunta:
    mi duda es que no funciona, en teoria deberia hacer lo mismo si me pueden ayudar verificando si las conecciones del max7219 con la matriz esta correcta, pues he usado el mismo programa y no funciona,

    Agradezco cualquier sugerencia

  • Avatar for Charly

    Tampoco hace falta varias matrices para usar la función de desplazamiento» digo yo», saltas de una matriz en estático a 4 haciendo scroll, en tus códigos si cambias el numero de matrices no varia mucho si pones 2 deja de funcionar 0 que es una matriz van las dos,no lo entiendo.

  • Avatar for Charly
    • Juan Carlos

    ¡Excelente! Hace un par de días llegaron las 4 matrices que compré y hoy he podido probarlas con tu ejemplo que funciona perfectamente.

    Mi idea ahora sería grabar una serie de textos en varios archivos de texto en una tarjeta de memoria (en la de la wifi shield por ejemplo) y que el arduino los seleccione de forma aleatoria y los visualice en el grupo de matrices…

    Si lo consigo os aviso 😉

  • Avatar for Charly
    • Admin

    Hola Andrei,

    Me han hecho ese mismo comentario varias veces y tengo previsto en algun momento montar un tutorial de como montar varios d eestos displays en serie de forma que vayan moviendo un mensaje.

    En cuanto sque tiempo voy aintentar ver como hacerlo

  • Avatar for Charly
    • Andrei

    Hola. Por diseño la matriz de led que yo he hecho esta al revez. Por eso el codigo de esta pagina me hace que las letras vayan de arriba para abajo y no de derecha a izquierda. Como podria invertir eso sin girar la matriz led ya que quiero ponr mas una al lado de la otra y si las invierto no saldra bien por la forma de la PCB que tengo.

  • Avatar for Charly
    • Conde mike

    excelente el tuto… seria genial si explicaras como hacer desplazamiento del mensaje…. gracias!

Para porder realizar consultas a nuestros expertos, tienes que ser suscriptor. Suscribiendote nos ayudas a mantener este proyecto en marcha.

¡ Quiero Suscribirme !

Si ya eres premium y no puedes comentar haz login. Hacer login