Dibujo en matriz LED 8x32 con 74HC154


8

¿Cómo envío un patrón a una matriz de LED de 8x32? Estoy usando el microcontrolador AT89S52 con un decodificador de línea 4-16 74HC154 , programando en C con el Keil IDE. He hecho 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 anódica 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:


3

El patrón normal para manejar 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 activará los cables de "columna" para todos los LED de esa fila que deberían encenderse.

Cada cable de columna debe incluir un dispositivo para regular la corriente cuando se activa (una resistencia puede funcionar aquí), 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 que se controle más de una fila a la vez, pero debe permitir que se controle cualquier combinación de columnas.

Los chips 74HC154 podrían funcionar bien en la lógica de selección de fila, pero debido a que solo una salida puede estar activa a la vez, no son adecuados para controlar columnas. Si desea escanear sus "laterales", de modo que se acceda 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 controlar 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 quiera hacer sea reemplazar los 74HC154 por un montón de chips 74HC595 (registros de desplazamiento) y resistencias, o bien uno o más chips de controlador de LED que tienen una limitación de corriente incorporada (por ejemplo, cuatro Texas Instruments TLC5916 , disponible de Digi-Key). Conecte esos chips a un puerto SPI desde su controlador y desplace cada fila de datos en serie. Si utiliza un chip de controlador de lado bajo (como el TLC5916 mencionado anteriormente), tendrá que cambiar los controladores de fila para que generen corriente en lugar de hundirlo. La forma más sencilla de hacerlo sería simplemente usar ocho transistores NPN, cada uno con el colector atado al riel positivo (podría usar un suministro no regulado si lo desea), la base atada a la salida del controlador o un chip decodificador, y el emisor atado a una fila de LED.


¿Entonces debo revertir 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 ...
Rick Ant

Si desea tener 32 "filas" verticales, puede usar un 74HC154 para seleccionarlas, pero el 74HC154 no es capaz de obtener mucha corriente (ni hundirse demasiado) 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 conectados con la dirección horizontal como ánodos o cátodos, pero le recomendaría que utilice controladores fuertes (posiblemente transistores discretos) para las filas y controladores limitantes de corriente para las columnas (independientemente de si las filas terminar siendo horizontal o vertical).
supercat

Si desea que su pantalla sea brillante, 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 mantener 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 conduzca una fila durante un período de tiempo excesivo incluso si el procesador no funciona correctamente. Hay una variedad de formas en que esto se puede lograr. Si se utilizan transistores discretos para los controladores de fila, se podría agregar una resistencia y una tapa a cada uno para limitar el ciclo de trabajo máximo.
supercat

Alternativamente, si uno usa un contador para controlar las filas, podría usar un circuito de temporización para detectar si transcurre un tiempo excesivo entre los conteos y dejar en blanco la pantalla o generar un pulso de conteo "automático".
supercat

¿tienes un ejemplo de código para ello? Por ejemplo, quiero mostrar el carácter AAAA?
Rick Ant
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.