Gestützt auf 8x32 LED-Matrix mit 74HC154

Wie sende ich ein Muster in eine 8x32-LED-Matrix? Ich verwende den AT89S52 - Mikrocontroller mit einem 74HC154 4-16-Zeilen-Decoder und programmiere in C mit der Keil-IDE. Ich habe vertikales Scannen durchgeführt, bin aber beim nächsten Schritt ratlos. Bei Bedarf füge ich den Schaltplan bei. Die Schaltung ist die gleiche wie die, die ich unten einfüge, nur verwende ich nicht 74HC138, eine gemeinsame Anodenmatrix, und ich verwende UN2803 als Treiber, ich verwende den Speicher nicht

Port 1 ist die Spalte, Port 2 ist die Zeile ... der 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 */

           }

Geben Sie hier die Bildbeschreibung ein

Antworten (1)

Das normale Muster zum Ansteuern einer MxN-Multiplex-LED-Anzeige besteht darin, eine Richtung als "Zeilen" und die andere als "Spalten" zu bezeichnen, unabhängig von der physischen Anordnung auf dem Bildschirm, so dass das System "Zeilen"-Drähte nacheinander erregt und Während jede Reihe sequenziert wird, erregt das System die "Spalten"-Drähte für alle LEDs in dieser Reihe, die leuchten sollten.

Jeder Spaltendraht muss ein Gerät enthalten, um den Strom zu regulieren, wenn er aktiviert ist (ein Widerstand kann hier funktionieren), und jeder Zeilendraht muss einen Treiber haben, der genug Strom liefern kann, um alle Spalten gleichzeitig zu speisen. Die Hardware muss nicht zulassen, dass mehr als eine Zeile gleichzeitig angesteuert wird, muss jedoch das Ansteuern einer beliebigen Kombination von Spalten zulassen.

Die 74HC154-Chips funktionieren möglicherweise in Zeilenauswahllogik, aber da jeweils nur ein Ausgang aktiv sein kann, eignen sie sich nicht zum Steuern von Spalten. Wenn Sie Ihre "seitwärts" scannen möchten, damit logisch als 32 Zeilen und 8 Spalten darauf zugegriffen wird, ist der 74HC154 möglicherweise zum Auswählen einer Zeile geeignet, aber dann müssen Sie zusätzliche Hardware hinzufügen, damit jede Zeile versorgt werden kann genug Strom, um acht LEDs anzusteuern, und Sie müssten auch jedem Ausgang des UN2803 etwas hinzufügen, um die Ströme zu begrenzen.

Wahrscheinlicher wäre es, die 74HC154 entweder durch ein paar 74HC595-Chips (Schieberegister) und Widerstände oder durch einen oder mehrere LED-Treiberchips mit eingebauter Strombegrenzung zu ersetzen (z. B. vier Texas Instruments TLC5916 , erhältlich von Digi-Key). Verbinden Sie diese Chips mit einem SPI-Port Ihres Controllers und verschieben Sie jede Datenzeile seriell. Wenn Sie einen Low-Side-Treiberchip (wie den oben erwähnten TLC5916) verwenden, müssen Sie Ihre Zeilentreiber so ändern, dass sie Strom liefern, anstatt ihn zu senken. Der einfachste Weg, dies zu tun, wäre einfach, acht NPN-Transistoren zu verwenden, von denen jeder mit dem Kollektor an die positive Schiene gebunden ist (Sie könnten eine ungeregelte Versorgung verwenden, wenn Sie möchten), die Basis an den Ausgang des Controllers oder einen Decoder-Chip gebunden ist. und der Emitter an eine LED-Reihe gebunden.

Also muss ich die Logik umkehren? P2 = Spalte; P1= Zeile ?".... dann könnte der 74HC154 geeignet sein um eine Zeile auszuwählen..." Diese Logik probiere ich demnächst in der Software aus...
Wenn Sie 32 vertikale "Reihen" haben möchten, können Sie einen 74HC154 verwenden, um sie auszuwählen, aber der 74HC154 ist nicht in der Lage, viel Strom zu liefern (und auch nicht viel zu senken), und das Fahren mit einem Arbeitszyklus von 1/8 ist fast sicherlich besser als mit einem 1/16 Duty Cycle zu fahren. Sie geben nicht an, ob die LEDs mit horizontaler Richtung als Anoden oder Kathoden verdrahtet sind, aber ich würde empfehlen, dass Sie starke Treiber (möglicherweise diskrete Transistoren) für die Zeilen und strombegrenzende Treiber für die Spalten verwenden (unabhängig davon, ob die Zeilen am Ende horizontal oder vertikal sein).
Wenn Sie möchten, dass Ihr Display hell ist, ist es wahrscheinlich erforderlich, dass der Treiberstrom für jeden Spaltendraht höher ist als der maximale Strom, den die LED sicher aushalten kann. Um zu verhindern, dass die LEDs beschädigt werden, wenn der Code nicht mehr ausgeführt wird, sollten Sie Ihren Zeilentreiber wahrscheinlich so entwerfen, dass er selbst bei einer Fehlfunktion des Prozessors keine Zeile über einen übermäßig langen Zeitraum ansteuert. Es gibt verschiedene Möglichkeiten, dies zu erreichen. Wenn man diskrete Transistoren für Zeilentreiber verwendet, könnte man jedem einen Widerstand und eine Kappe hinzufügen, um das maximale Tastverhältnis zu begrenzen.
Wenn man alternativ einen Zähler verwendet, um die Reihen zu steuern, könnte man eine Zeitgeberschaltung verwenden, um zu erkennen, ob zwischen den Zählungen eine übermäßige Zeit verstreicht, und entweder die Anzeige löschen oder einen "automatischen" Zählimpuls erzeugen.
hast du ein Codebeispiel dafür? Zum Beispiel möchte ich das Zeichen AAAA anzeigen?
Wie kann ich die Spalte = Zeile und Zeile = Spalte umkehren, irgendwelche Ideen?