Dibujo en matriz LED 8x32 con 74HC154

¿Cómo envío un patrón a una matriz LED de 8x32? Estoy usando el microcontrolador AT89S52 con un decodificador 74HC154 de 4-16 líneas, programando en C con el IDE de Keil. He hecho un escaneo vertical, pero estoy perplejo en el siguiente paso. Incluiré el esquema si es necesario. El circuito es el mismo que el que incluyo a continuación solo que no uso 74HC138, matriz de ánodo común y uso UN2803 como controlador, no estoy usando la memoria

El puerto 1 es la columna, el puerto 2 es la fila... el código:

 row = 0xFF;
     //for (j=0x01; j< 0x08; j<<=1)  {   /* scan left to right */
     for (j=0x00; j<=0x0F; j++)
     {
          E1=0;
          E2=0;
          P1 = j;
          P2 = row;
                                   /* Output to LED Port */
          for (i = 0; i < 100; i++) 
           {  /* Delay for 100 ms */
              delay ();                       /* call delay function */

           }

ingrese la descripción de la imagen aquí

Respuestas (1)

El patrón normal para controlar una pantalla LED multiplexada MxN es designar una dirección como "filas" y la otra como "columnas", independientemente del diseño físico en la pantalla, de modo que el sistema energice los cables de "fila" uno a la vez y, mientras se secuencia cada fila, el sistema energizará los cables de "columna" para todos los LED en esa fila que deberían estar encendidos.

Cada cable de columna debe incluir un dispositivo para regular la corriente cuando se activa (aquí puede funcionar una resistencia), y cada cable de fila debe tener un controlador que pueda suministrar suficiente corriente para alimentar todas las columnas a la vez. El hardware no tiene que permitir el accionamiento de más de una fila a la vez, pero debe permitir el accionamiento de cualquier combinación de columnas.

Los chips 74HC154 pueden funcionar bien en la lógica de selección de filas, pero debido a que solo una salida puede estar activa a la vez, no son adecuados para controlar columnas. Si quisiera escanear sus "lados", para que se accediera lógicamente como 32 filas y 8 columnas, entonces el 74HC154 podría ser adecuado para seleccionar una fila, pero luego tendría que agregar hardware adicional para permitir que cada fila suministre suficiente corriente para impulsar ocho LED, y también tendría que agregar algo a cada salida del UN2803 para limitar las corrientes.

Lo más probable es que lo que desee hacer sea reemplazar los 74HC154 con un montón de chips 74HC595 (registros de desplazamiento) y resistencias, o uno o más chips de controlador de LED que tienen un limitador de corriente incorporado (por ejemplo, cuatro Texas Instruments TLC5916 , disponible en Digi-Key). Conecte esos chips a un puerto SPI de su controlador y cambie cada fila de datos en serie. Si usa un chip de controlador de lado bajo (como el TLC5916 mencionado anteriormente), tendrá que cambiar sus controladores de fila para generar corriente en lugar de hundirlo. La forma más sencilla de hacerlo sería usar ocho transistores NPN, cada uno con el colector conectado al riel positivo (si lo desea, podría usar un suministro no regulado), la base conectada a la salida del controlador o un chip decodificador, y el emisor atado a una fila de LED.

así que debo invertir la lógica? P2 = columna; P1= Fila ?"... entonces el 74HC154 podría ser adecuado para seleccionar una fila..." Probaré esta lógica en el software pronto...
Si desea tener 32 "filas" verticales, puede usar un 74HC154 para seleccionarlas, pero el 74HC154 no es capaz de generar mucha corriente (ni hundirse mucho) y conducir con un ciclo de trabajo de 1/8 es casi ciertamente mejor que conducir con un ciclo de trabajo de 1/16. No indica si los LED están cableados con la dirección horizontal como ánodos o cátodos, pero recomendaría que use controladores potentes (posiblemente transistores discretos) para las filas y controladores limitadores de corriente para las columnas (independientemente de si las filas terminar siendo horizontal o vertical).
Si desea que su pantalla brille, es probable que sea necesario que la corriente de la unidad para cada cable de columna sea mayor que la corriente máxima que el LED puede soportar de manera segura. Para evitar que los LED se dañen si el código deja de ejecutarse, probablemente debería diseñar su controlador de fila para que no controle una fila durante un período de tiempo excesivo, incluso si el procesador no funciona correctamente. Hay una variedad de maneras en que esto se puede lograr. Si se utilizan transistores discretos para controladores de fila, se podría agregar una resistencia y una tapa a cada uno para limitar el ciclo de trabajo máximo.
Alternativamente, si se usa un contador para controlar las filas, se podría usar un circuito de temporización para detectar si transcurre un tiempo excesivo entre conteos y poner en blanco la pantalla o generar un pulso de conteo "automático".
¿Tienes un ejemplo de código para ello? Por ejemplo, quiero mostrar el carácter AAAA.
¿Cómo puedo invertir la columna = fila y fila = columna, alguna idea?