Forum: Mikrocontroller und Digitale Elektronik Wie kompleziert ist eine Grafik-LCD Ansteuerung?


von Neuling (Gast)


Lesenswert?

Hallo zusammen,

ich habe es jetzt endlich geschafft eine Char. LCD anzusteuern (20x4), 
in den ersten Tagen musste ich im Datenblatt und hier öffter 
reinschauen, jetzt aber funktioniert einwandfrei.

Beim Char. LCD sind die Zeichen schon vorhanden und gerade mal 4 Zeilen, 
wie sieht es aus mit einem Grafischen LCD, musste man jedes Pixel 
ansteuerung??? wenn ich ein Zeichen geschrieben habe und später löschen 
möchte muss ich dann die Adresse dieses Zeichen auch merken!!!!!!

Ein spezielles LCD habe ich noch nicht, ich überlege mir nur ob ich 
gleich mit einem grafischen LCD anfange oder ist es doch so schwierig!!

Vielen Dank

von Mike (Gast)


Lesenswert?

Neuling schrieb:
> wie sieht es aus mit einem Grafischen LCD, musste man jedes Pixel
> ansteuerung???

Graphikdisplays leben davon, dass man jedes Pixel einzeln ansteuern kann 
- und das muss man dann auch. Oft verwendet man Graphikprozessoren, die 
primitive Zeichenbefehle (Linie/Kreis) bereits selber beherrschen.

von runni (Gast)


Lesenswert?

ftdi FT800 leave it to EVE, z.B. mit 4,3" Display... schöne Sache das!

von lpcuser (Gast)


Lesenswert?

meist mit einem eigenen font
der hat dann zB 7x5 pixel
deine funktionen schreiben in den LCD RAM dann die werte für die 
7x5pixel
( RGB / graustufen/SW)
abhängig vom LCD eben 1/2/4/8bit pro pixel


damit hast du quasi einen eigenen zeilen/spaltenaufbau
das zu löschende zeichen hat eine Position ( dahin wo du schreiben 
willst )
ob du ein neues zeichenschreibst oder löschen willst ist den LCD egal

es sind speicherstellen im LCD RAM
das selbe auch bei characterLCD

von Udo S. (urschmitt)


Lesenswert?

Neuling schrieb:
> ich habe es jetzt endlich geschafft eine Char. LCD anzusteuern (20x4),
> in den ersten Tagen musste ich im Datenblatt und hier öffter
> reinschauen, jetzt aber funktioniert einwandfrei.

Ich versuche es mal mit einem Vergleich:
"Ich habe mir einen Tretroller selber gebaut, wie schwer ist es sich ein 
Motorrad selber zu bauen?"
Antwort:
"Kommt darauf an, wenn du Motor, Bremsen, Felgen und Rahmen fertig 
nimmst und nur alles zusammenbaust kann das was werden, ist aber 
aufwändiger".

Übertragen:
Wenn du Bibliotheken hast die Zeichensätze beinhalten und sich um 
Zeichengenerierung und grafische Primitives kümmern ist das aufwändiger 
aber machber, wenn du das alles selber machen willst und "ich habe es 
jetzt endlich geschafft" beim Zeichendisplay schon Schwierigkeiten 
hattest, dann würde ich sagen lass es.

von PSblnkd (Gast)


Angehängte Dateien:

Lesenswert?

Im Gegensatz zu Chr-LCDs ist die Arbeit mit Grafik-LCDs ein sehr 
anspruchsvolles Thema.
Als Einstieg solltest Du die Literatur-Ressourcen hier unter 
"Artikelübersicht" durchforsten. Eine diesbezügliche Suche im hiesigen 
Forum sollte auch einiges zu Tage bringen. Und dann gibt es da auch noch 
spezielle Bücher, so z.B. das ELEKTOR-Buch: AVR-Programmierung, Bd.3 + 4 
- u.a. LCD-Graphik.
Trotzdem ist es dann in der Praxis doch nicht ganz einfach, da die 
marktüblichen Grafik-LCDs nicht nach einem einheitlichen Standard 
angesteuert werden, sondern je nach verwendeten Display-Controller 
unterschiedlichste Ansteuer-Prozederen verlangen - ohne ein 
ausführliches Datenblatt steht man oft auf sehr verlorenem Posten.
Dann kommt noch hinzu, dass publizierte Ansteuerprogramme neuzeitlich 
meist in "C" und selten ausreichend kommentiert vorliegen, so dass man 
außer die Sprache zu beherrschen sich auch noch mit den Tücken 
möglicherweise unvollkommener Bibliotheken rumschlagen muß.

Ich bin deshalb bei Assembler geblieben, weil ich da überblicken kann, 
was wirklich passiert - und ein modulares Konzept kann man damit auch 
realisieren. Meine Untersuchungen bezogen sich auf das LCD-Modul 
DM19254A (192x64 Pixel, Controller: KS0108B), was seinerzeit von Pollin 
sehr preiswert angeboten wurde.
Zu beachten ist, dass es sich infolge der Kommunikation Steuer-µC mit 
dem Display-Controller um eine Master-Slave-Konfiguration handelt und 
demzufolge Timing-Probleme anstehen.
Der Entwicklungsbericht hat derzeit weit über 70 A4-Seiten - ist aber 
noch nicht abgeschlossen...

Anfragen bitte via eMail (www.ps-blnkd.de/Impressum)

Grüsse aus Berlin

PSblnkd

von Hei (Gast)


Lesenswert?

Man sollte fuer ein graphik LCD auch noch etwas Rechenleistung uebrig 
haben. Denn meist ist man ja mit Text drauf nicht zufrieden...

von Frank (Gast)


Lesenswert?

Grundlage ist "computergerechtes" Denken. Die Anordnung der Pixel im 
Pufferspeicher entspricht selten direkt der auf dem Display, oftmals 
sind sie noch zu Bytes oder Nibbles (4 Bit) organisiert und man benötigt 
UND/ODER-Funktionen um deren einzeln habhaft zu werden.

Also schreibt man sich zunächst eine Software-"Schicht", die diese 
"Umsortierung" erledigt, so dass man danach z.B. mit einer Funktion 
"set_pixel(x,y,color)" (oder so ähnlich) einzelne Pixel gezielt 
erreichen kann.

Der nächste Schritt wäre, diese Pixelfunktion zu sog. grafischen 
Primitiven (Linien, Kreise, Flächen) zusammenzufassen, z.B. 
"draw_rect(x,y,w,h)".

Wenn man mag, folgt dann die nächste Schicht, die darauf aufbauend ganze 
Objekte visualisiert (Buchstaben, Icons, Buttons) usw. ...

von micha (Gast)


Lesenswert?

Ach, lass Dich nicht abschrecken! Auch ein GLCD ist eigentlich recht 
einfach zu programmieren. Als Basis braucht man im Prinzip nur ein 
Set/Clear Pixel und damit kann man dann fast alles machen. Und 
Beispiele/Libraries gibt es auch viele. Ist natürlich aber schon etwas 
komplexer als ein standard LCD.

Du brauchst nur wesentlich mehr Speicher, z.B. für die Font-Daten.
Bei seriell angesteuerten (SPI/i2C) Displays gibt es oft keine 
Möglichkeit, den Displayspeicher auszulesen, daher benötigt einen 
entsprechenden Screen-Buffer. Bei 128x64 und 1bit sind dass schon 1024 
Byte; Dazu dann noch mal die Font-Daten (die aber auch im Flash liegen 
können). Nimm also einen entsprechend ausgestatteten µC, ein Tiny ist 
eher schlecht :-)

Beim Display achte auf einen standard-Controller, z.B. KS0108 o.ä. 
(wobei die Ansteuerung bei vielen gleich ist, ähnlich HD44780 für 
alpha-numerische standard LCDs) und nur einer einfachen 
Versorgungsspannung (dann musst Du die Kontrastspannung nicht selber 
erzeugen!).

von Seano L. (Gast)


Lesenswert?

Hei schrieb:
> Man sollte fuer ein graphik LCD auch noch etwas Rechenleistung uebrig
> haben. Denn meist ist man ja mit Text drauf nicht zufrieden...
Und Speicher - in irgendeiner Form. Icons, Bildchen, Animationen,... da 
wirds schnell knapp auf dem gängigen Microcontroller.

von PSblnkd (Gast)


Lesenswert?

Noch eine Ergänzung zu meinem Beitrag vom 22.11.2013:
Wer sich lieber mit C++ bei der µC-Programmierung "rumquälen" will - 
hier noch ein hilfreiches Buch:
"C und C++ für embedded Systems" ISBN 3-8266-1618-9

Dort ist auch ausführlich die Programmierung von Grafik-LCDs 
beschrieben.

Grüsse aus Berlin

PSblnkd

von Guido Körber (Gast)


Lesenswert?

Es gibt sehr unterschiedliche Controller für Grafik LCD. Einige davon 
können eine Grafik- und eine Textebene übereinander packen, einige 
können Zeichen selber in den Grafikspeicher schreiben und einige haben 
halt nur einen reinen Pixelspeicher.

Also erst mal definieren was am Ende raus kommen soll und dann nach 
passenden Displays schauen.

von c-hater (Gast)


Lesenswert?

micha schrieb:

> Ach, lass Dich nicht abschrecken! Auch ein GLCD ist eigentlich recht
> einfach zu programmieren. Als Basis braucht man im Prinzip nur ein
> Set/Clear Pixel und damit kann man dann fast alles machen.

Das schon. Aber nur sehr, sehr gemächlich...

Nein, es macht wirklich keinen Spaß, live dabei zusehen zu können, wie 
sich selbst einfache blöde Rechtecke streifen- oder blockweise aus 
Einzelpixeln formen. Das mag noch vor 40 Jahren so durchgegangen sein, 
aber schon vor 30 Jahren war es sicher nicht mehr "state of the art".

> Du brauchst nur wesentlich mehr Speicher, z.B. für die Font-Daten.

Flash ist selten das Problem. In aller Regel klemmt's eher beim RAM. 
Schon der Bildwiederholspeicher selber braucht relativ viel und viele 
(gerade die besonders schnellen) Algorithmen brauchen noch mehr davon.

Und nach meiner Erfahrung sind µC quer über alle Leistungsklassen mit 
internem RAM gewöhnlich chronisch unterversorgt, während genug Flash 
meist kein Problem darstellt. Der Ausweg aus dem Dilemma besteht dann 
darin, auf die effizientesten Algorithmen zu verzichten und statt dessen 
weniger effiziente durch massives Loop-Unrolling zu beschleunigen. Damit 
wenigstens der Flash genutzt wird, der sozusagen als unerwünschter 
Kostenfaktor bei dem µC sowieso dabei ist, den man mindestens kaufen 
muß, um den unbedingt erforderlichen RAM für den Bildwiederholspeicher 
zu kriegen.

Typisches Beispiel: Ein Monochrom-Display der QVGA-Klasse (also z.B. 
320x240). Für den Bildwiederholspeicher benötigt man bei Vollgrafik 
320x240/8=9600 Byte RAM.

Da wird die Wahl schon recht eng. Nehmen wir mal an, man entscheidet 
sich für einen Mega1284P, denn der hat mit 16k RAM wenigstens in etwa in 
einer passenden Größenordnung.

Da könntest du nun 128k Flash mit Fonts füllen. Das braucht kein Mensch. 
Ein Vektorzeichensatz für einen großen (gut lesbaren Sans-Serif, also 
keinen sinnlos verspielten) Font schlägt mit nur rund 4..8k zu Buche. 
Dazu ein oder zwei passende Bitmap-Fonts für ein oder zwei kleine 
Schriftgrade nochmal mit etwa genausoviel. Also rund 16k für einen 
ordentlichen Font, der in allen Größen schick und lesbar erscheint.

Also bleiben erstmal über 100k ungenutzter Flash. Das freut den Anbieter 
des Controllers, aber nicht dich. Denn der hat dich mit seiner 
Modellpolitik dazu gezwungen, eine Sache zu kaufen und zu bezahlen, die 
du eigentlich garnicht benötigst.

Und wenn dann noch Farbe in's Spiel kommt, sieht das sogar alles noch 
viel schlechter aus, denn die Fonts bleiben in aller Regel monochrom.

Da bleibt dann schon sehr reichlich Platz im Flash, um Schleifen endlos 
auszurollen...

von W.S. (Gast)


Lesenswert?

Neuling schrieb:
> Beim Char. LCD sind die Zeichen schon vorhanden und gerade mal 4 Zeilen,
> wie sieht es aus mit einem Grafischen LCD, musste man jedes Pixel
> ansteuerung??? wenn ich ein Zeichen geschrieben habe und später löschen
> möchte muss ich dann die Adresse dieses Zeichen auch merken!!!!!!

Tja, wenn man an die Wandtafel in der Schule was schreiben will, muß 
entweder die Tafel an diese Stelle bereits abgewischt sein oder man muß 
das selber erledigen. Genauso geht es bei den Grafikdisplays.

Die diversen Einwürfe, daß solche Displays schwer zu benutzen seien, 
sind ein bissel hoch gegriffen - aber völlig einfach geht es auch nicht.

Schau dir hier in der Codesammlung mal die "Lernbetty" an, die ist 
strunzbillig und dennoch auch für den Anfang in der Benutzung grafischer 
Displays ein gutes Lernobjekt. (jaja, tibetanische Gebetsmühle..) Fonts 
sind dabei, ebenso Bilder in (4) Graustufen, ebenso Pixel und Linien und 
Rechtecke.

W.S.

von u8glib (Gast)


Lesenswert?

Ich habe hier einen Versuch gestartet, möglichst viele monochrome (und 
graustufen) Graphik OLEDs und Graphik LCDs zu unterstützen:

http://code.google.com/p/u8glib/wiki/device

Läuft mit ARM und AVR (ab ATTiny mit 8K Flash und 512 Bytes RAM).

Bei den Fonts steht jeweils der Speicherbedarf dabei. Damit kann man 
sich ja ausrechnen, wieviel Flash man spendieren will:

http://code.google.com/p/u8glib/wiki/fontsize

Oliver

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.