www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wiedermal LED Matrix Anzeige


Autor: Browncoat (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Browncoat (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Browncoat (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Matthias

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

MfG BC

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: 12:00 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: 12:00 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.