3 votos

problema con la matriz LED y la raspberry pi

Tengo una raspberry pi modelo B+ y una matriz de 8x8 LEDs de un solo color. He conectado 8 pines GPIO a los 8 pines de fila de la matriz y otros 8 pines GPIO a los 8 pines de columna. Hay que tener en cuenta que soy un principiante en esto, así que tengo algunas dudas. He observado mediante unas pruebas que si asigno Vcc (HIGH) a las filas y tierra (LOW) a las columnas, 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), pondría la fila2 en HIGH y la col3 en LOW.

El problema surge en el siguiente escenario. Quiero dos LEDs, es decir (0,0) y (1,1) para que se encienda de inmediato.

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

pero en lugar de sólo estos dos, tengo otros dos LEDs encendidos, es decir (0,1) y (1,0) lo cual es bastante razonable porque estoy estableciendo row0 y row1 HIGH y col0 y col1 LOW. Así que estos 2 pares de filas y columnas se van a cruzar en 4 puntos, por lo que se iluminan cuatro puntos. Para evitar esto, he creado un delight() que básicamente hace lo contrario de enlight() Es decir, poner la fila en LOW y la col en HIGH, apagando el LED. Para que se enciendan tanto (0,0) como (1,1) a la vez, sin que se encienda ningún otro LED, lo mando a:

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

De este modo, se produce 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 su lugar ve ambos LEDs constantemente encendidos.

Mi pregunta es, ¿es esto " truco "¿realmente es un buen truco? ¿Es así como se realizan los principales programas relacionados con la matriz LED? ¿O hay alguna otra forma de hacerlo? Si lo hay, por favor, explíquelo de forma sencilla.

2voto

Passerby Puntos 28913

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

Has hecho lo que se llama Escaneando una pantalla múltiple. Debido a la configuración de los pines compartidos de las Columnas y Filas de una Matriz, encontrará que Fantasmas si se activan varios pines al mismo tiempo. Esto se llama Ghosting y ocurre no sólo en las simples matrices de pantallas LED, sino en las pantallas multiplexadas, los LCD, incluso los teclados ( Artículo de Microsoft sobre Keyboard Ghosting )

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

Su Truco como se ha mencionado, se llama escaneo. Alternando qué fila y qué columna están encendidas, de modo que sólo una está encendida en cada momento, no hay conflicto. Si se hace más rápido de lo que la visión humana puede procesar (30 veces por segundo (Hertz o Hz) si no se mueven los ojos/cabeza, pero más suave a 60 Hz, y recomendable más rápido de 100 Hz), se aprovecha el fenómeno llamado Persistencia de la visión . Tu truco es como se manejan todas las pantallas multiplex, con algunas variaciones.

Nota de aplicación de un importante fabricante de semiconductores sobre cómo evitar las imágenes fantasma y otros problemas comunes. Está dirigido a los ingenieros profesionales, pero es muy informativo si quieres aprender más.

Una alternativa a hacer esto directamente, en su código, o incluso en los controladores como el sistema operativo para el RPI podría bloquear el acceso debido a la utilización de la cpu, es la descarga de este a un dedicado LED Display Driver IC. La única diferencia es que el IC fue desarrollado para hacer el mismo escaneo de manera más eficiente, liberando a su procesador principal de tener que hacer un seguimiento de la pantalla.

Además, el RPI no está pensado para conducir mucha corriente en sus pines GPIO. Una pantalla más grande, o una que tenga LEDs que requieran más corriente, no funcionará bien. Los circuitos integrados de controladores de pantallas LED tienden a soportar una corriente mucho mayor que los 16mA máximos por pin del RPI. Pero tu ejemplo de una pantalla de 8x8 de un solo color con sólo 1 led encendido a la vez estará bien.

0voto

Tom Deloford Puntos 508

Sí, así es más o menos como se hace.
Por supuesto, cuantas más filas tengas en tu matriz, menos tiempo pasa cada una con sus LEDs encendidos, por lo que tienes que compensar aumentando la corriente con la que los manejas para que no aparezcan apagados.
Aquí es cuando tendrás que empezar a buscar controladores de LED "adecuados" porque rápidamente alcanzarás el límite de la cantidad de corriente que tu RPi puede suministrar/enviar en sus puertos IO.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X