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.
Protoboard conexiones

Una Protoboard más cables..

Array LED 8x8

Una matriz de LEDs 8×8, con gobernada por un MAX7219

tienda online prometec

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

#include "LedControlMS.h"
#define NumMatrix 1       // Cuantas matrices vamos a usar

LedControl lc=LedControl(12,11,10, NumMatrix);  // Creamos una instancia de LedControl

void setup()
   {
      for (int i=0; i< NumMatrix ; i++)
        {
           lc.shutdown(i,false);    // Activar las matrices
           lc.setIntensity(i,8);    // Poner el brillo a un valor intermedio
           lc.clearDisplay(i);      // Y borrar todo
        }
   }

void loop()
   {
        lc.writeString(0," Curso Arduino de Prometec.net ");
        delay(1000);
   }

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.
 

 

 

 

(97) Comments

    • Daniela

    Buenas..
    Me parece excelente la explicación, monté el proyecto primero con 5 matrices funciono bien, la concecté a otras cinco, siguió funcionando perfecto pero a la hora de conectar un numero 11 enciende a la hora de compilar, pero esa matriz no muestra el mensaje (letra que debería) , cambié en la programación la cantidad de matrices conectadas a aún así no funciona, probé probando con otra matriz y otros jumpers en la conexión pero sigue sin mostrar el resto de mensaje, quería saber si tiene alguna idea de por qué esto sucede o si me puede brindar alguna sugerencia para corregir.

    • Pues no se que decirte Daniela, El problema de coenctar muchas matrices no es mas que necesitas alimemntacion externa porque seguro que puedes haber sobrepasado la capacidad de alimentacion de tu arduino, pero al eliminar matrices deberia volver a funcionar tranquilamente

        • Diego Alonso

        En mi arduino funciona con 2 matrices si conecto 3 o más el arduino se apaga esto también es problema de la alimentación? porque he visto que la gran mayoría conecta más matrices y les funciona normal

        • Hola Diego, la verdad es queno lo he probado, pero si se te apaga el Arduino tiene toda la pinta de que la alimentación es insuficiente. Un saludo.

        • Hola DIego. Si . parece un problema de alimentacion. Yo he probado con 4 matrices sin problemas

  • Hola, queria saber si se sabe de alguna manera de implementar este metodo en una intel galileo en vez de un arduino uno .o si existe otra manera de controlar este tipo de chip + matriz de leds en una galileo.Desde ya muchas gracias.

    • Hola Victoria,
      No he tenido ocasion de usar un Galileo hasta a hora, pero se supone que es un arduino 100% compatible en codigo por lo que deberia compilar sin problemas estos ejemplos , y en caso de algun problema menor con la libreria se supone que deberia ser facilmente corregible

  • hola podrias decirme que programa utilizaste para hacer la simulacion, yo he utilizado proteus pero a la hora de iniciar la simulacion como que se vuelve locos los displays y no tiran el mensaje

    • Hola ROberto, no usamos simulador sino el producto Arduino rn vivo

    • Sergio Gonzalez Orozco

    Hola. Me da este error al compilar. Podrias indicarme porque?

    T:\Arduino\Proyectos Arduino\Matriz_Led\Matriz_Led.ino: In function ‘void loop()’:

    T:\Arduino\Proyectos Arduino\Matriz_Led\Matriz_Led.ino:28:39: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

    MatrizLed.writeString(0,”Hola Mundo”);

    • Joer, ultimamente nos estan volviendo locos con los cambios al compilador.
      Deprecated significa que ya se acepta esta forma de escribir la instruccion, pero hay que bucear en la libreria para ver porque

      • Sergio Gonzalez Orozco

      Hoy, tras probar de nuevo, y creo que sin haber tocado nada, me funciona.

    • Francisco Perez

    Tengo un problema con esta ultima instrucción lc.writeString(0, “Curso Arduino de Prometec.net”); puedo copilar pero no subir el archivo al Arduino

    • Francisco ¿Puedes darme el error exacto que te indica?

  • Buen dia, yo hice un letrero led con 5 matrices en serie, te queria preguntar sobre una parte del codigo asi podria poner la hora y que se actualice cada minuto, muchas gracias (https://www.youtube.com/watch?v=Gb1uNhCrlNs) este es el link de donde saque la idea

    • Michelle

    necesito su ayuda porfavor segui todos los pasos que muestra y mi matris siempre inicia con todos los leds ensendidos no se apagan no se por que?

    • Hola Michelle, Son matrices muy sencillas y que se gobiernan sin grandes problemas. Yo probaría con otra por si esa esta averiada

        • Mefizto

        Hola, tengo el mismo problema que tiene Michelle y en 4 modulos que tengo es el mismo problema, en algunas alcanzo a ver como parpadean o varian algunos leds pero no alcanzo a distinguir ya que todos están encendidos

        • Hola Mefizto, te aseguro que yo pruebo todos los programas que publico y el pograma es correcto o al menos lo era cuando lo probé y las matrices son los mismas

          Empieza por hacerlo con una matriz y luego con dos, a ver si asi os funciona ¿Vale? Ya me direis

          • Avatar for Prueba TPV TPV
            • Mefizto

            Mira este es el resultado que obtengo: https://goo.gl/photos/imsMzpDrV37fnaJaA

            por si sabes cual puede ser mi error, ya probé con diferentes códigos y librerías y siempre obtengo resultados similares

          • Avatar for Prueba TPV TPV

            Hola Mefizto, No reconozco el problema porque no me ha pasado, pero ¿CUantoas matrices tienes? ¿En todas te pasa el problema?

          • Avatar for Prueba TPV TPV
            • Mefizto

            tengo 4 matrices, todas con el mismo problema

          • Avatar for Prueba TPV TPV

            No se me ocurre que decirte, pero descartando que todas sean defectuosas parece un problema de conexiones

          • Avatar for Prueba TPV TPV
            • Mefizto

            resulta que la matriz es de ánodo común cuando debería ser el cátodo común, que es la configuración del modulo en el siguiente link encontré la solución:

            https://forum.arduino.cc/index.php?topic=357063.0

  • Hola, le envio un saludo, me podria ayudar con el scroll para la matriz de led? Si tiene el codigo se lo agradezco mucho! Gracias!!!

    • Hola Ulises, te ayudaré con gusto, pero no hay ningún código oculto y en la web tienes los programas que he usado y probado

  • Hola, son muy buenos tus tutoriales felicidades. Necesito hacer un programa para el juego del ping pong y para ello estoy ocupando el MAX7219, simplemente ocuparía que me orientes de como controlar el encedido de led por led con este integrado Gracias.

    • Hola Edwin, creo recordar que la libreria te permite encender los led uno por uno de cuando me la miré pero tendria que dedicarle un tiempo del que ando muy escaso. Echale una ojeada y me dices ¿Vale?

      • Lo he encontrado, muchas gracias, es con la instrucción lc.setLed (addr (0) ,fila,columna, boolean estado); , pero en un aso que llegarás a tener tiempo no estaría nada mal que subieras un tutorial de algo parecido

        • jajajaj me alegro de que lo encontraras y no te digo que no acabe poniendo un tutorial con algo así, porque estos modulitos son de lo mas interesante spara cantidad de cosas. Un saludo y hasta pronto

          • Ariel

          esa función serviría para encender cada led? que es addr?

          • Avatar for Prueba TPV TPV

            Hola Ariel, ¿me puedes decir a que funcion te refieres?

  • Hola buenas!
    Me ha gustado ver que funciona mi matriz.
    Para poner mensajes en la matriz queda chulo,tengo dos y al conectarlos en serie,pues queda mejor claro.
    Me preguntaba como se pueden utilizar los led de la matriz de manera independiente,para hacer algun simbolo antes de que salgan las letras .
    Espero que me puedas ayudar,Gracias.

    • Si señor, si que se puede. Basta con programar el array con la matriz de puntos que quieres mostrar aunque hasta la fecha no lo he intentado, pero dado que la libreria incluye un alfabeto completo deberias poder editar el fuente y buscar estos arrays (En el programa .cpp de la libreria) y modificar el array de algun caracter inutil como @, #,[,] o cualquier otra que se te ocurra
      Lo de editar la libreria no tiene que asustarte, aunque haya muchas cosas que no entiendas tienes que buscar la parte donde se definen las letras y modificar la que te interesa

  • Quiero saber si existe alguna forma de revisar que la matriz este funcionando correctamente amigo gracias!

    • Puedes sacar la matriz de su zocalo (Fijandote bien en la posicion para luego volverla a insertar) y probarla directamente. Tienes una sesion en la web sobre el tema llamada Matriz LED 8×8 si no recuerdo mal

  • 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!

  • 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 .

    • 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

    • 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.

    • 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

        • 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.

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

      • AngelVinny

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

      • 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

          • 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 Prueba TPV TPV

            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 Prueba TPV TPV
            • 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 Prueba TPV TPV

            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

    • Probé con una matriz led hecha por mi con esta configuración(Cátodo común), este código y funciona correctamente. Saludos!!

    • 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

    • 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

  • 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.

    • 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 😉

    • 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.

    • 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

    • Conde mike

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

Give a Reply

WordPress Anti-Spam by WP-SpamShield