Wiedermal LED Matrix Anzeige

Gast #596081
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
#596095
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.
Gast #596151
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
#596155
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.
Gast #596170
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...
Gast #596311
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren