Zeichnung auf 8x32 LED Matrix mit 74HC154

8

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

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

Rick Ant
quelle

Antworten:

3

Das normale Muster zum Ansteuern einer MxN-Multiplex-LED-Anzeige besteht darin, eine Richtung als "Zeilen" und die andere als "Spalten" zu kennzeichnen, unabhängig von der physischen Anordnung auf dem Bildschirm, so dass das System "Zeilen" -Drähte einzeln mit Strom versorgt und Während jede Zeile sequenziert wird, aktiviert das System die "Säulendrähte" für alle LEds in dieser Zeile, die beleuchtet werden sollen.

Jeder Säulendraht muss ein Gerät zur Regelung des Stroms enthalten, wenn er aktiviert ist (hier kann ein Widerstand arbeiten), und jeder Zeilendraht muss einen Treiber haben, der genügend Strom liefern kann, um alle Säulen gleichzeitig zu speisen. Die Hardware muss nicht zulassen, dass mehr als eine Zeile gleichzeitig angesteuert wird, sondern dass eine beliebige Kombination von Spalten angesteuert werden kann.

Die 74HC154-Chips funktionieren möglicherweise in der Zeilenauswahllogik einwandfrei. Da jedoch jeweils nur ein Ausgang aktiv sein kann, eignen sie sich nicht zur Steuerung von Spalten. Wenn Sie Ihre "seitwärts" scannen möchten, damit logisch auf sie als 32 Zeilen und 8 Spalten zugegriffen werden kann, ist der 74HC154 möglicherweise für die Auswahl einer Zeile geeignet. Dann müssen Sie jedoch zusätzliche Hardware hinzufügen, damit jede Zeile versorgt werden kann genug Strom, um acht LEDs anzusteuern, und Sie müssten außerdem jedem Ausgang des UN2803 etwas hinzufügen, um die Ströme zu begrenzen.

Wahrscheinlicher wäre es, die 74HC154 durch eine Reihe von 74HC595-Chips (Schieberegister) und Widerstände oder einen oder mehrere LED-Treiberchips mit integrierter Strombegrenzung zu ersetzen (z. B. vier Texas Instruments TLC5916) , erhältlich bei 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 genannten 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 die Verwendung von acht NPN-Transistoren, wobei jeder mit dem Kollektor an die positive Schiene gebunden ist (Sie können eine ungeregelte Versorgung verwenden, wenn Sie möchten), die Basis mit dem Ausgang des Controllers oder einem Decoderchip verbunden ist. und der Emitter an eine LED-Reihe gebunden.

Superkatze
quelle
also muss ich die logik umkehren? P2 = colum; P1 = Zeile? ".... dann könnte der 74HC154 zur Auswahl einer Zeile geeignet sein ..." Ich werde diese Logik bald in der Software ausprobieren ...
Rick Ant
Wenn Sie 32 vertikale "Reihen" haben möchten, können Sie diese mit einem 74HC154 auswählen, aber der 74HC154 kann nicht viel Strom beziehen (und auch nicht viel sinken), und das Fahren mit einem Arbeitszyklus von 1/8 ist fast sicherlich besser als mit einem Arbeitszyklus von 1/16 zu fahren. Sie geben nicht an, ob die LEDs in horizontaler Richtung als Anoden oder Kathoden verdrahtet sind, aber ich würde empfehlen, starke Treiber (möglicherweise diskrete Transistoren) für die Zeilen und strombegrenzende Treiber für die Spalten zu verwenden (unabhängig davon, ob die Zeilen am Ende horizontal oder vertikal sein).
Supercat
Wenn Ihr Display hell sein soll, muss der Ansteuerstrom für jedes Säulendraht wahrscheinlich höher sein als der maximale Strom, den die LED sicher halten kann. Um zu verhindern, dass die LEDs beschädigt werden, wenn der Code nicht mehr ausgeführt wird, sollten Sie Ihren Zeilentreiber wahrscheinlich so gestalten, dass er auch bei einer Fehlfunktion des Prozessors nicht über einen längeren Zeitraum eine Zeile ansteuert. Dies kann auf verschiedene Arten erreicht werden. Wenn man diskrete Transistoren für Zeilentreiber verwendet, kann man jedem einen Widerstand und eine Kappe hinzufügen, um das maximale Tastverhältnis zu begrenzen.
Supercat
Wenn man alternativ einen Zähler verwendet, um die Zeilen zu steuern, könnte man eine Zeitschaltung verwenden, um zu erkennen, ob zwischen den Zählungen eine übermäßige Zeit vergeht, und entweder die Anzeige auszublenden oder einen "automatischen" Zählimpuls zu erzeugen.
Supercat
Haben Sie ein Codebeispiel dafür? Zum Beispiel möchte ich das Zeichen AAAA anzeigen?
Rick Ant