Dessin sur matrice LED 8x32 avec 74HC154

8

Comment envoyer un motif dans une matrice LED 8x32? J'utilise le microcontrôleur AT89S52 avec un décodeur 74HC154 4-16 lignes, en programmation C avec l'IDE Keil. J'ai effectué un balayage vertical, mais je suis perplexe à l'étape suivante. J'inclurai le schéma si nécessaire. Le circuit est le même que celui que j'inclus ci-dessous seulement Je n'utilise pas 74HC138, matrice d'anode commune et j'utilise UN2803 comme pilote, je n'utilise pas la mémoire

Le port 1 est la colonne, le port 2 est la ligne ... le code:

 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 */

           }

entrez la description de l'image ici

Rick Ant
la source

Réponses:

3

Le schéma normal de pilotage d'un écran LED multiplexé MxN consiste à désigner une direction en tant que "lignes" et l'autre en tant que "colonnes", indépendamment de la disposition physique à l'écran, de sorte que le système alimente les fils de "lignes" un par un et, tandis que chaque ligne est séquencée, le système alimente les fils de "colonne" pour tous les LEd de cette ligne qui doivent être allumés.

Chaque fil de colonne doit inclure un dispositif pour réguler le courant lorsqu'il est activé (une résistance peut fonctionner ici), et chaque fil de ligne doit avoir un pilote qui peut fournir suffisamment de courant pour alimenter toutes les colonnes à la fois. Le matériel ne doit pas autoriser le pilotage de plusieurs lignes à la fois, mais doit permettre le pilotage de toute combinaison de colonnes.

Les puces 74HC154 peuvent fonctionner correctement dans la logique de sélection de ligne, mais comme une seule sortie peut être active à la fois, elles ne conviennent pas au contrôle des colonnes. Si vous vouliez analyser votre "latéralement", afin qu'il soit logiquement accessible en 32 lignes et 8 colonnes, alors le 74HC154 pourrait convenir pour sélectionner une ligne, mais alors vous devriez ajouter du matériel supplémentaire pour permettre à chaque ligne de fournir assez de courant pour piloter huit LED, et vous devrez également ajouter quelque chose à chaque sortie de l'UN2803 pour limiter les courants.

Plus probablement, ce que vous voudriez faire serait de remplacer le 74HC154 par un tas de puces 74HC595 (registres à décalage) et de résistances, ou bien une ou plusieurs puces de pilote de LED avec limitation de courant intégrée (par exemple, quatre Texas Instruments TLC5916 , disponible auprès de Digi-Key). Connectez ces puces à un port SPI à partir de votre contrôleur et déplacez chaque ligne de données en série. Si vous utilisez une puce de pilote côté bas (comme le TLC5916 susmentionné), vous devrez changer vos pilotes de ligne en source de courant plutôt que de le couler. La façon la plus simple de le faire serait simplement d'utiliser huit transistors NPN, chacun avec le collecteur lié au rail positif (vous pouvez utiliser une alimentation non réglementée si vous le souhaitez), la base liée à la sortie du contrôleur ou une puce de décodeur, et l'émetteur attaché à une rangée de LED.

supercat
la source
donc je dois inverser la logique? P2 = colum; P1 = Row? ".... alors le 74HC154 pourrait convenir pour sélectionner une ligne ..." Je vais essayer cette logique dans le logiciel bientôt ...
Rick Ant
Si vous voulez avoir 32 "rangées" verticales, vous pouvez utiliser un 74HC154 pour les sélectionner, mais le 74HC154 n'est pas capable de fournir beaucoup de courant (ni de couler beaucoup d'ailleurs) et la conduite avec un rapport cyclique 1/8 est presque certainement mieux que de conduire avec un rapport cyclique 1/16. Vous n'indiquez pas si les LED sont câblées dans le sens horizontal comme des anodes ou des cathodes, mais je vous recommande d'utiliser des pilotes puissants (éventuellement des transistors discrets) pour les lignes et des pilotes limiteurs de courant pour les colonnes (indépendamment du fait que les lignes finissent par être horizontales ou verticales).
supercat
Si vous souhaitez que votre écran soit lumineux, il sera probablement nécessaire que le courant de commande pour chaque fil de colonne soit supérieur au courant maximal que la LED peut supporter en toute sécurité. Pour éviter que les voyants ne soient endommagés si le code cesse de fonctionner, vous devez probablement concevoir votre pilote de ligne de sorte qu'il ne conduise pas une ligne pendant une durée excessive, même en cas de dysfonctionnement du processeur. Il existe plusieurs façons de procéder. Si l'on utilise des transistors discrets pour les conducteurs de ligne, on pourrait ajouter une résistance et un capuchon à chacun pour limiter le rapport cyclique maximal.
supercat
Alternativement, si l'on utilise un compteur pour contrôler les rangées, on pourrait utiliser un circuit de synchronisation pour détecter si un temps excessif s'écoule entre les comptages et soit effacer l'affichage ou générer une impulsion de comptage "automatique".
supercat
avez-vous un exemple de code pour cela? Par exemple, je veux afficher le caractère AAAA?
Rick Ant