Forum: Mikrocontroller und Digitale Elektronik KS0108 LCD: Daten lesen


von Thomas (Gast)


Lesenswert?

Hallo,

ich habe ein 128x64 LCD Display mit 2 KS0108 Controllern. Das ganze
programmier ich mit dem avr-gcc. Ich hab eine Routine die sieht so
aus:

void lcd_goto(uint8_t page, uint8_t address);

Sie wählt den richtigen Controller aus und sendet die Befehle um die
Page und die Addresse zu setzen. Das funktioniert auch (zum Test Daten
dort ausgegeben).

Eine zweite Funktion liest an der aktuellen Stelle Daten vom Display:

void lcd_read();

Nun hab ich versucht die beiden in Kombination zu verwenden:
lcd_goto(0, 0);
data = lcd_read();

Das liest aber immer wirrwarr. Dann hab ich bei Google folgende Seite
gefunden: http://piclist.com/techref/microchip/language/c/ks0107.htm -
Dort (in der Funktion lcd_plotpixel auf der Seite) macht er es etwa
so:
lcd_goto(0, 0);
lcd_read(); // dummy
data = lcd_read();

Damit geht es auch bei mir! Kann mir einer erklären warum das so ist?
Ich habe in meiner Doku des Displays nichts darüber gefunden.

Liebe Grüße,
Thomas

von Frank (Gast)


Lesenswert?

Haste mal probiert statt des Dummies einfach ne gewisse Zeit zu warten
nach der Cursorpositionierung? Vielleicht braucht das Display einfach
ne Weile eh die Daten zur Verfügung stehen? Ich hatte mal ein Display
das hat nach ner Positionierung immer das Erste Zeichen des
auszugebenden Strings verschluckt wenn man direkt danach ne Ausgabe
gemacht hat. Wenn dazwischen irgendwas Anderes stattfand wurde der
String korrekt ausgegeben.

bye

Frank

von Thomas (Gast)


Lesenswert?

Hab ich vergessen zu erwähnen: An den Zeiten kann es nicht liegen,
denn ich hab schon versucht das Busy-Flag zu überprüfen und eine sehr
sehr lange Wartezeit.

Gruß

von Daniel (Gast)


Lesenswert?

Ich hab auch ein solches Display. Läuft an sich wunderbar, allerdings
läuft das Lesen überhaupt nicht. Ich verzichte aber sowieso auf den
Lesevorgang. Hab den ganzen Displayinhalt im RAM gespeichert. Ich
schreibe diesen Raminhalt dann auf einmal ins Display. Und lesen kann
ich aus dem RAM ja problemlos.

Gruß

von Thomas (Gast)


Lesenswert?

Das kann ich mir beim mega16 (1kb ram) nicht leisten weil das schon
1,5kb wären :((

von Daniel (Gast)


Lesenswert?

Hmm, stimmt. Hab hier nen Mega128, also vom Speicher her kein Problem.
Kannst du dir ein externes Ram erlauben? Aber ist schon komisch, daß
das mit dem lesen nicht fuktioniert. Ich hab das auch schon von jemand
anderem gehört, der das gleiche Problem hatte.

von Marko (Gast)


Lesenswert?

Ich hab gerade diese Tage mit dem
Displaytech 64128A mit KS108 gebastelt.
Zugegeben ich progge unter Bascom, aber
am Prinzip der Ansteuerung tut sich das nix,
zumal ich mir meine eigene Lib für gebastelt
hab.

Also, mein Ablauf.

1. berechnen ob CS0 oder CS1
2. berechnen welcher Frame (Y)
3. setzen des Frames.
4. Frame auslesen

Dafür brauchts 2 Schritte:

Aus dem Datenblatt:
Output register stores the data temporarily from display data RAM when
CS1 or CS2 is in active mode and R/W and RS=H.

Stored data in display data RAM is latched in output register. When CS1
or CS2 is in active mode and R/W=H, RS=L, status
data (busy check)can be read out.

To read the contents of display data RAM, twice access of read
instruction is needed. (!!)

In first access, data in display data
RAM is latched into output register.

In second access, MPU can read data which is latched. That is, to read
the data in display
data RAM, it needs dummy read. But status read does not need dummy
read.

1. Die Diplaydaten ins Ram des Display
2. Die Displaydaten an die Pins raus.

Dann Abfrage über Mega, aber nicht über

xy=porta  sondern x.1 =pina.0

Übers Pinregister !!!

5. Den Frame wieder setzen auf gleiche Position, weil der KS108
automatisch bei jeder Operation ein Frame weiter geht.
6. Frame Schreiben, alte und neue Daten per Oder-Verknüpfung
übereinander gelegt

von Max (Gast)


Lesenswert?

Also ich habe das so in Erinnerung das mit dem Senden des Dummy erst
eine Übertragung eingeleitet wurde. Das hat tatsächlich mit den Zeiten
gar nichts zu tun. Nur das Lesen startet erst wenn der Controller des
LCD den Dummy empfangen hat. Stand meines wissens aber auch in dem
Datenblat das ich dazu habe. Bei interesse krusch ich es mal raus ;-)

Mfg Max

von Thomas (Gast)


Lesenswert?

Ok Marko hat die Sache ja aufgeklärt. In dem Datenblatt von meinem
Display steht es nicht :/

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.