problema con matriz LED y raspberry pi

Tengo una raspberry pi modelo B+ y una matriz de un solo color LED de 8x8. Conecté 8 pines GPIO a los pines de 8 filas de la matriz y otros 8 pines GPIO a los pines de 8 columnas. Tenga en cuenta que soy un principiante en esto, así que tengo algunas preguntas. He observado en algunas pruebas que si asigno Vcc (ALTO) a las filas y tierra (BAJO) a la columna, el LED se enciende.

def enlight(i, j):
    GPIO.output(row[i],GPIO.HIGH)
    GPIO.output(col[j],GPIO.LOW)

Si quiero que se encienda el LED de la coordenada (2,3), configuraría fila2 en ALTO y col3 en BAJO.

El problema surge en el siguiente escenario. Quiero dos LEDS, es decir (0,0), y (1,1)que se enciendan a la vez.

    enlight(0,0)
    enlight(1,1) 

pero en lugar de solo estos dos, tengo dos LED más encendidos, es decir, (0,1)y (1,0); lo cual es bastante razonable porque estoy configurando row0 y row1 HIGH y col0 y col1 LOW. Así que estos 2 pares de filas y columnas se intersecarán en 4 puntos, por lo tanto, se iluminarán cuatro puntos. Para evitar esto, creé una delight()función que básicamente hace lo contrario enlight(), es decir, establecer la fila en BAJO y col en ALTO, apagando el LED. Para encender tanto (0,0) como (1,1) a la vez, sin que se encienda ningún otro LED, le ordeno que:

while true:
    enlight(0,0)
    delight(0,0)
    enlight(1,1)
    delight(1,1)

Por esto, ocurre un bucle infinito y el LED (0,0) parpadea infinitamente y justo en el momento en que el LED (0,0) se apaga, el LED (1,1) se enciende. Todo esto sucede tan rápido que el ojo humano no puede distinguir el parpadeo y, en cambio, ve ambos LED encendidos constantemente.

Mi pregunta es, ¿este " truco " es realmente un buen truco? ¿Es así como se realizan los principales programas relacionados con la matriz LED? ¿O hay alguna otra manera de hacerlo? Si es así, explíquelo en términos simples.

Respuestas (2)

Mi pregunta es, ¿este "truco" es realmente un buen truco? ¿Es así como se realizan los principales programas relacionados con la matriz LED? o hay alguna otra manera de hacerlo? Si la hay, explíquela con sencillez.

Ha hecho lo que se llama exploración de una pantalla múltiplex. Debido a la configuración de pines compartidos de Columnas y Filas de una Matriz, encontrará Fantasmas si se activan varios pines al mismo tiempo. Esto se llama Ghosting y ocurre no solo en matrices de pantalla LED simples, sino también en pantallas multiplexadas, LCD e incluso teclados ( artículo de Microsoft sobre Keyboard Ghosting )

"Ghosting" es el problema de que algunas teclas del teclado no funcionan cuando se presionan varias teclas simultáneamente. Se dice que las pulsaciones de teclas que no aparecen en la computadora o parecen haber desaparecido han sido "fantasmas". En la mayoría de los teclados, incluso algunos que se comercializan explícitamente como "Anti-Ghosting", esto sucede con muchas combinaciones de tres teclas.

Su truco , como se mencionó, se llama escaneo. Al alternar qué fila y columna están encendidas, de modo que solo una esté encendida en un momento dado, no hay conflicto. Si se hace más rápido de lo que la visión humana puede procesar (30 veces por segundo (hercios o Hz) si no mueven los ojos o la cabeza, pero más suave a 60 Hz, y se recomienda más rápido que 100 Hz), aprovecha el fenómeno llamado Persistencia de Visión . Su truco es cómo se manejan todas las pantallas multiplex, con algunas variaciones.

Una nota de aplicación de un productor líder de semiconductores sobre cómo evitar las imágenes fantasma y otros problemas comunes. Está dirigido a ingenieros profesionales, pero es muy informativo si desea obtener más información.

Una alternativa a hacer esto directamente, en su código, o incluso en los controladores, ya que el sistema operativo para el RPI podría bloquear el acceso debido al uso de la CPU, es descargar esto a un IC de controlador de pantalla LED dedicado. La única diferencia es que el IC se desarrolló para realizar el mismo escaneo de manera más eficiente, liberando a su procesador principal de tener que realizar un seguimiento de la pantalla.

Además, el RPI no está destinado a generar mucha corriente en sus pines GPIO. Una pantalla más grande, o una que tenga LED que requieran más corriente, no funcionará bien. Los circuitos integrados de controlador de pantalla LED tienden a admitir una corriente mucho más alta que el máximo de 16 mA por pin del RPI. Pero su ejemplo de una pantalla de un solo color de 8x8 con solo 1 LED encendido a la vez estará bien.

Sí, esto es más o menos cómo se hace.
Por supuesto, cuantas más filas tenga en su matriz, menos tiempo pasará cada una con sus LED encendidos, por lo que debe compensar aumentando la corriente con la que las maneja para que no se vean tenues.
Aquí es cuando deberá comenzar a buscar los circuitos integrados de controladores LED "adecuados" porque alcanzará muy rápidamente el límite de la cantidad de corriente que su RPi puede generar/disminuir en sus puertos IO.

¿Puede dar algunos ejemplos de LED driver ICs, son solo decodificadores simples que minimizan la cantidad de pines o hacen más que eso, y cómo aumento la corriente para controlar los LED?