Llevo algunos meses diseñando un sistema de carteles avisadores para carreteras que se basa en Arduino y en placas de 18x18 cm que contienen dos matrices de 8x8 leds, 64 verdes y 64 rojos...
...Para controlarlos elegí el integrado MAX7219, por ser barato y haber mucha información sobre su control. Probé el circuito a conciencia, diseñé la placa con Kicad, una empresa nos hizo diez prototipos, en RS encontramos los leds fiables y de la luminosidad adecuada y he montado seis displays en serie... todo bien...
...Pero resulta que el MAX7219 parece tener la insana tendencia a colgarse, y entonces deja leds encendidos de forma aleatoria que no hay manera de resetear por software, ni borrando ni deshabilitando el display afectado y volverlo a activar. La única manera es quitarle la alimentación y volverla a dar.
Debo decir que cada display tiene su propio regulador independiente de tensión 7805 y condensadores de filtro a la entrada y la salida, electrolíticos de 3.000 uF y cerámicos de 220 nF en paralelo con los anteriores. Las masas están cuidadas, los contactos de los conectores son sólidos, la tensión de entrada es estable y suficiente ya que proviene de una batería de 12 Volts 300 A/h ...pero los malnacidos MAX se me siguen colgando de vez en cuando.
Quiero remarcar que el problema no parece venir por el Arduino, que sigue funcionando sin problemas. El probado varios UNO y varios MEGA (estos últimos con memoria de sobra), con todo el programa de mensajes o solamente con un escueto programa de test, y de vez en cuando, tal vez un par de veces por hora, a alguno (no siempre el mismo) de los 6 MAX7219 que están es serie se le cruzan los cables y hace lo mismo, lo cual no es admisible en un cartel informativo de carretera en que la fiabilidad debe ser absoluta...
...Pese a estar convencido que ni el Arduino ni el programa tienen nada que ver, he realizado mil pruebas de todo tipo, he desactivado las interrupciones del Arduino, he probado diversos pines de salida para el Din, CS y Sck, y no consigo evitar este dichoso problema. La librería que utilizo es la habitual "LedControlMS.h"
Este circuito funciona con el bus SPI, pero de manera unidireccional, porque sólo utiliza el MISO y además las funciones de esta librería permiten utilizar casi cualquier pin, ignorando los del SPI por hardware del Arduino. En este aspecto ignoro si a través de esta librería se puede también controlar la velocidad SPI. Tal vez bajándola habría menos problemas, o también reforzando las señales Sck (impedancia más baja) que atacan en paralelo a todos los 7219 (este cartel lleva 12 -6 verdes y 6 rojos-, pero habrá algunos con 36)
No sé si alguno de vosotros se ha encontrado con el mismo problema...
Un saludo a todos