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
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.
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
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.
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?
@Matthias Die Methode von der ich zuerst ausgegangen bin, also Spaltenweise Multiplexen statt Zeilenweise. MfG BC
@ 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...
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.
stimmt einfach den 74HC259 weglassen und unten nur ein bit schieben. 4 bit spalte ----> und für die zeile 1 bit schieben oder multiplexen.
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.
@ 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.