www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik KS0108 LCD: Daten lesen


Autor: Thomas (Gast)
Datum:

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

Autor: Frank (Gast)
Datum:

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

Autor: Thomas (Gast)
Datum:

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

Autor: Daniel (Gast)
Datum:

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

Autor: Thomas (Gast)
Datum:

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

Autor: Daniel (Gast)
Datum:

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

Autor: Marko (Gast)
Datum:

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

Autor: Max (Gast)
Datum:

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

Autor: Thomas (Gast)
Datum:

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

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.