Forum: Mikrocontroller und Digitale Elektronik Vorgehensweise Informationen -> LCD


von Johannes R. (joohaannes)


Lesenswert?

Hallo!

Ich wollte mal fragen, was denn so gängige Konzepte sind um 
Informationen auf einem LCD darzustellen?
Sollte ich einzelne Daten, die ich irgendwo auf dem LCD plazieren will 
einfach entsprechend direkt raussenden?

Oder ist es besser einen Char-Array (mit den Dimensionen des Displays)zu 
verwenden, in welches ich immer die Informationen reinschreibe, die auf 
dem LCD angezeigt werden sollen? Und dieses Char-Array dann immer in 
einem bestimmten Zyklus auf das LCD übertragen lasse?

Danke im voraus!
Johannes

von Klaus R. (klaus2)


Lesenswert?

Oh - gute Frage! Evtl. können wir das auch gleich noch auf Grafikmenüs 
erweitern: Da wird es dann ganz besonders spannend, alleine wegen dem 
extremen Platzbedarf...also, wie sind die gängisten Techniken?

Klaus.

von Matthias L. (Gast)


Lesenswert?

>Oder ist es besser einen Char-Array (mit den Dimensionen des Displays)zu
>verwenden, in welches ich immer die Informationen reinschreibe, die auf
>dem LCD angezeigt werden sollen? Und dieses Char-Array dann immer in
>einem bestimmten Zyklus auf das LCD übertragen lasse?

Genau. So wird das auch gemacht. Nur das dieses Char-Array sich im 
Controller auf dem Display (gewöhnlich) befindet und dieses zyklisch 
ausgegeben wird.

Du muss somit nur was zum Display schicken, wenn du irgendwas 
neues/anderes anzeigen willst.


Falls das Display keinen eigenen Kontroller hat, musst du das natürlich, 
wie von dir vermutet, so alles selbst machen...

von Johannes R. (joohaannes)


Lesenswert?

Hmm, ok ... danke schonmal!
Und wenn ich nun zum Beispiel etwas anderes auf dem LCD darstellen will, 
dann müsste ich ja entweder wissen, wo ich aktuell noch Zeichen stehen 
habe, die ich bei der neuen Darstellung nicht mehr brauche und diese 
dann mit Leerzeichen füllen.
Oder löscht  man in so einem Falle einfach das ganze Display (d.h. man 
überschreibt das ganze Display mit Leerzeichen) und schreibt dann erst 
die neuen Informationen drauf.
Oder wie kann man sicherstellen, dass auf dem LCD keine "alten" Zeichen 
mehr dargestellt werden?

von Matthias L. (Gast)


Lesenswert?

>die ich bei der neuen Darstellung nicht mehr brauche

Du kannst bei Displays mit Controllern auch den VIdeospeicher (das 
char-array) wieder auslesen.
Sinnvoller ist aber, wenn du exakt die Positionen auf dem Display 
löscht, die du nihct mehr nrauchst.


>Oder löscht  man in so einem Falle einfach das ganze Display (d.h. man
>überschreibt das ganze Display mit Leerzeichen) und schreibt dann erst
>die neuen Informationen drauf.

Ist auch möglich, je nachdem was sinnvoller ist: Ein paar Zeichen zu 
löschen (mit Leerzeichen) oder alles Löschen und dann ein paar neu 
aufbauen. Wobei den Befehl "display komplett löschen" unterstützen 
gewöhnich die Displaykontroller.

von Klaus R. (klaus2)


Lesenswert?

...komplett löschen ist uU auch die sicherere Methode, wenn man eh einen 
"Schattenspeicher" für das ganze Display im Controller hat - ansonsten 
muss man ja zu jedem Zeitpunkt wissen, was genau wo steht. Und das ist 
uU aufwendiger, als alles neu zu übertragen.

Grafiken werden vermutlich am besten "hart" gespeichert, oder? zB die 
einzelnen Elemente von Rahmen? Oder nimmt man nur eine Seite und dreht 
diese dann 4x zur Laufzeit und baut sie dynamisch zusammen?

Klaus.

von Peter D. (peda)


Lesenswert?

Johannes R. wrote:
> Oder löscht  man in so einem Falle einfach das ganze Display (d.h. man
> überschreibt das ganze Display mit Leerzeichen) und schreibt dann erst
> die neuen Informationen drauf.

Das Löschen bewirkt ein deutliches Flackern und wenn man das oft macht 
(<1s) ist das extrem nervig.
Besser ist es daher immer, den alten Text zu überschreiben.
Dazu bastelt man sich eine Funktion, die einen Text an eine bestimmte 
Position schreibt und mit Leerzeichen bis zur Länge des alten Textes 
auffüllt.

Dabei ist zu beachten, daß Ausgaben nicht unnötig oft erfolgen, da das 
LCD relativ langsam ist und man so die CPU stark ausbremst (da helfen 
dann auch keine 100MIPS- oder 32Bit-CPUs).


Besonders effektiv ist es, wenn man sich einen Bildspeicher im SRAM (40 
Byte bei nem 2*20 LCD) einrichtet und alles dort hineinschreibt.
Dieser Bildspeicher wird dann zyklisch von nem Timerinterrupt (z.B 1ms) 
zum LCD übertragen (1 Byte pro Interrupt).


Peter

von Johannes R. (joohaannes)


Lesenswert?

Vielen Dank, das hilft mir weiter!

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.