He construido una placa de interfaz para conectar una matriz de LED y un controlador de juegos hecho en casa a una placa Arduino Due. La interfaz y el código para la matriz y el controlador se probaron de forma independiente antes de combinarlos en un solo circuito en un Stripboard.
Los datos de los interruptores del controlador son incorrectos a veces cuando la pantalla se está ejecutando, lo que me hace preguntarme si algún tipo de interferencia / señales inducidas podrían estar afectando los datos que estoy recuperando del controlador. Estoy pensando en la interferencia ya que el problema solo ocurre cuando se muestran ciertas imágenes en la matriz. He revisado dos veces en busca de cortocircuitos y estoy bastante seguro de que el código en sí no es la causa del problema.
El controlador está leyendo 8 interruptores (que se bajan cuando se abren con resistencias) en paralelo a través de un registro de desplazamiento y envían sus datos al Arduino en serie a través de 3 cables. Leo el nuevo valor de los interruptores cada 8 segundos. He configurado un código de prueba que muestra el estado actual de todos los interruptores en tiempo real en la matriz de LED y, dependiendo de lo que se muestra en la pantalla, muestra como se esperaba o mostrará errores en la forma de los interruptores incorrectos que aparecen como al presionarlo, incluso cuando los interruptores múltiples se muestran como presionados aunque solo esté presionando uno.
La matriz de LED está controlada por 13 líneas, algunas de las cuales pueden estar pulsando hasta aproximadamente 40MHz. Las líneas solo están activas en ráfagas muy cortas. Al comienzo de un cuadro de pantalla, el reloj pulsa 32 veces con 6 líneas de datos que posiblemente cambian en paralelo con cada pulso. Esto se repite 7 veces con un retraso (que se duplica cada vez) entre ellas. El proceso anterior se repite 15 veces para otras líneas en la pantalla (con las líneas de selección de 4 filas establecidas entre cada línea) y todo el proceso se repite 60 veces por segundo.
He logrado "solucionar" el problema optimizando el código que se lee en el registro de desplazamiento. El ajuste de los retrasos entre los latch y los pulsos de reloj en el registro de desplazamiento también ayudó, pero también puede hacer que el problema vuelva a aparecer dependiendo de lo que se muestra en la pantalla. No considero esto una solución. Sospecho que en algún momento el problema aparecerá nuevamente cuando implemente juegos nuevos que muestren diferentes imágenes en la matriz.
Aquí hay una foto de mi circuito:
Loscírculosrojosmuestranlospinesa/desdeelArduinoparalainterfazdelcontrolador,losverdesmuestranlospinesparalainterfazdematrizdeLED.Hedibujadoencianparadarunaideadeloqueconectaconqué.Loscuatropinesverdesmáscercanosalospinesdelcontroladorsonlaslíneasdeseleccióndefilaque"solo" cambian ~ 1000 veces por segundo.
¿Es probable que alguna falla en mi diseño / circuito esté causando falsos máximos en el reloj o las líneas de retención del registro de desplazamiento del controlador que están dañando la salida? No he roto las pistas del stripboard que se usan y son más largas de lo que deberían ser, ¿es una mala idea? ¿Podría estar contribuyendo al problema?
Gracias por cualquier ayuda / consejo.