Forum: Mikrocontroller und Digitale Elektronik Wiedermal LED Matrix Anzeige


von Browncoat (Gast)


Lesenswert?

Hallo, bin gerade dabei eine LED Matrixanzeige zu basteln, momentan ist 
noch die Planungsphase :). Das ganze soll mit einem AVR betrieben 
werden. Hab hier im Forum schon etwas geschnökert und auch google ein 
wenig gequält und bin dabei auf diese 
http://home.wanadoo.nl/electro1/avr/scroll5.htm Seite gestoßen. Das 
Konzept gefällt mir ganz gut und es lässt sich einfach realisieren. 
Lediglich den Zeilentreiber (74HC259) würd ich ggf. auch gegen ein 
Schieberegister austauschen.

Bei dieser Schaltung hab ich nur eine kleine Verständnisfrage, in die 
Schieberegister für die Spalten muß man doch eigentlich nur einmal eine 
1 schieben, 1x durchlaufen lassen (also 39 x 0) und dann wieder eine 1 
rein... usw., außer man möchte z.B. daß jedes Display das gleich 
anzeigt, dann müßten einmal 1, dann vier mal 0, dann wieder 1, 4x0... 
usw. alternativ mit anderen Abständen. Enstprechend in der Spalte wo 
sich gerade der H Pegel befindet, müssen die dazugehörigen Zeilen 
geschaltet werden.
Will man in der letzten Anzeige etwas anzeigen, muß die benötigte 1 also 
erst mal bis dort hin geschoben werden.

Habe ich das soweit korrekt geschnallt?

Noch ein paar Fragen, der Sinn des Speicherregisters im HC595 erschließt 
sich mir nicht ganz für diesen Fall. Wozu braucht man das?
Gibt es ein äquivalentes Schieberegister wo man die Schieberichtung 
ändern kann?

MfG BC

von Johannes M. (johnny-m)


Lesenswert?

Die Zeilen werden gemultiplext, und nicht die Spalten! In die 
595er-Kette wird das reingeschoben, was in der nächsten Zeile angezeigt 
werden soll. Dann wird die Zeile weitergeschaltet und die 595er geben 
den seriell reingeschobenen Wert aus. Dann werden die 595er wieder 
gelatcht und während die Zeile leuchtet, werden die Bits für die nächste 
Zeile in die 595er geschoben. Usw... Andernfalls hätte man leichte 
Probleme mit Einschaltzeiten von 1/40 für jede Spalte.

von Browncoat (Gast)


Lesenswert?

Alles klar, der 74HC259 wird hier also lediglich als 1 zu 8 decoder 
missbraucht und hochgezählt.

In die Schieberegister werden also 40 BIT geschoben, dann für eine 
bestimmte Zeit angezeigt, in dieser Zeit werden die nächsten 40 BIT 
geschoben, der HC259 wird um 1 erhöht, rutscht um 1 Zeile höher / tiefer 
und zeigt dort die nächsten 40 BIT an, während die nächsten 40 BIT 
geschoben werden.

Nun richtig?

Die andere Methode würde auch funktionieren, allerdings wäre der 
Rechenaufwand sicherlich höher.

MfG BC

von Johannes M. (johnny-m)


Lesenswert?

Browncoat wrote:
> Alles klar, der 74HC259 wird hier also lediglich als 1 zu 8 decoder
> missbraucht und hochgezählt.
>
> In die Schieberegister werden also 40 BIT geschoben, dann für eine
> bestimmte Zeit angezeigt, in dieser Zeit werden die nächsten 40 BIT
> geschoben, der HC259 wird um 1 erhöht, rutscht um 1 Zeile höher / tiefer
> und zeigt dort die nächsten 40 BIT an, während die nächsten 40 BIT
> geschoben werden.
>
> Nun richtig?
Sieht besser aus...

> Die andere Methode würde auch funktionieren, allerdings wäre der
> Rechenaufwand sicherlich höher.
Das hat zunächst nichts mit dem Rechenaufwand zu tun, sondern damit, 
dass jeder Matrixpunkt nur noch 1/40 der Zeit leuchten würde. Um die 
gleiche Leuchtstärke wie im "normalen" Leuchtbetrieb zu erreichen, 
müsstest Du den 40-fachen Strom durch die LEDs schicken und außerdem 
eine sehr hohe Aktualisierungsrate wählen, um kein Flimmern zu haben. 
Mit der vorgestellten Methode hingegen brauchts nur den 7-fachen Strom, 
was die LEDs noch (kurzzeitig) abkönnen sollten. Außerdem muss die 
Aktualisierungsrate nicht so hoch sein.

von Matthias (Gast)


Lesenswert?

Richtig.
Ich denke aber, der Rechenaufwand wäre geringer, wenn das ganze 
Spaltenweise (und nicht wie hier zeilenweise) ausgegeben würde..

Welche andere Methode meinst du?

von Browncoat (Gast)


Lesenswert?

@Matthias

Die Methode von der ich zuerst ausgegangen bin, also Spaltenweise 
Multiplexen statt Zeilenweise.

MfG BC

von Matthias (Gast)


Lesenswert?

@ Johannes M:

Ich meine mit Rechenaufwand eher die SOftwareseite:

Für die Hardware/Stromstärken.. sind deine Ausführungen vollkommen 
korrekt.

Ich denke aber das es sinnvoller ist, das Array in derSoftware 
spaltenweise zu führen, da die Informationen so einfacher eingeschrieben 
werden können.
zB. viele kleine Bitmaps für die Zahlen 0..9, jede Bitmap ist 5Byte groß 
(idealerweise wohl eher 8) und beinhaltet die anzuzeigende Information 
für Spalte 0,1,2,3,4 damit die ensprechende Ziffer dargestellt wird.
Soll diese jetzt angezeigt werden, so muss diese nur in das 
Array[welches von 0..39 geht) kopiert werden, etwa so:

array[ y+0 ] = ziffernvorrat[ x*5 + 0];
array[ y+1 ] = ziffernvorrat[ x*5 + 1];
array[ y+2 ] = ziffernvorrat[ x*5 + 2];
array[ y+3 ] = ziffernvorrat[ x*5 + 3];
array[ y+4 ] = ziffernvorrat[ x*5 + 4];
x: anzuzeigende Ziffer, y: Spalte ab der die Ziffer angezeigt werden 
soll.

Das ist wohl einiges einfacher und Rechenzeitsparender als ein 
aufwändiges Kopieren in die entsprechenden Bits jeder 40bit großen 
Zeile...

von Karl H. (kbuchegg)


Lesenswert?

Hinweis:
Man kann die geänderte Spalten/Zeilen Geometrie
auch beim raustakten auf die Schieberegister
berücksichtigen.
Ist softwaremässig gar nicht mal so wild.

von 12:00 (Gast)


Lesenswert?

stimmt einfach den 74HC259 weglassen  und unten nur ein bit schieben.
4 bit spalte ---->  und für die zeile 1 bit schieben oder multiplexen.

von 12:00 (Gast)


Lesenswert?

4 bit spalte ---->  und für die zeile 1 bit schieben oder multiplexen.
falsch
7 bit spalte ---->  und für die zeile 1 bit schieben oder multiplexen.

von Falk (Gast)


Lesenswert?

@ Matthias (Gast)

>Ich meine mit Rechenaufwand eher die SOftwareseite:

>zB. viele kleine Bitmaps für die Zahlen 0..9, jede Bitmap ist 5Byte groß
>(idealerweise wohl eher 8) und beinhaltet die anzuzeigende Information

5, Du hast ja nur 5 Spalten pro Anzeige. Und mal 5 rechnen geht schnell, 
ist x 4 + x 1.

>Das ist wohl einiges einfacher und Rechenzeitsparender als ein
>aufwändiges Kopieren in die entsprechenden Bits jeder 40bit großen
>Zeile...

Ja. Das ist besser. Aber das hat nicht direkt was damit zu tun, wie die 
LEDs angesteuert werden. Du kannst mit deinem Speicheraufbau das Display 
in der jetzigen Form gut ansteuern. Du musst nur in jedem 
Zeilendurchlauf jeweils das 0te ,1te ,2te ,3te ,4te ,5te ,6te  Bit 
kopieren und ins Schieberegister schieben. Mit ner Bitmaske sehr einfach 
und schnell.

Den 259 würde ich nicht weglassen, der spart sinnvoll Pins.

MfG
Falk

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.