www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Vorgehensweise Informationen -> LCD


Autor: Johannes R. (joohaannes)
Datum:

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

Autor: Klaus R. (klaus2)
Datum:

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

Autor: Matthias Lipinsky (lippy)
Datum:

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

Autor: Johannes R. (joohaannes)
Datum:

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

Autor: Matthias Lipinsky (lippy)
Datum:

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

Autor: Klaus R. (klaus2)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

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

Autor: Johannes R. (joohaannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank, das hilft mir weiter!

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.