Forum: Mikrocontroller und Digitale Elektronik LCD Display ansteuern mit KS0073


von Gast (Gast)


Angehängte Dateien:

Lesenswert?

hallo,
kennt sich wer mit dem LCD Controller KS0073 aus? Ich hab folgendes 
Problem (ich hab mir vorher das forum angesehen, und auch die source 
codes dazu schon ausprobiert funktionieren aber nicht).
Ich will mit meinem Atmel µC das Display steuern, und zwar über SPI. 
Mittlerweile bin ich schon so weit, das ich das Display fertig 
initialisiert habe, sprich Cursor blinkt.
So, mir gelingt es aber nicht ein Zeichen am Display anzuzeigen.
Initialisiert habe ich es mit foglenden Kommandos:
0x1F ... Startbyte
0x34 ... 8Bit Datenlaenge, extension Bit RE = 1
0x09 ... 4 Zeilen Modus
0x30 ... 8Bit Datenlaenge, extension Bit RE = 0
0x0F ... Display ein, Cursor ein, Cursor blinken
0x01 ... Display loeschen, Cursor auf 1. Spalte, 1. Zeile
0x06 ... Cursor Auto-Increment

Ok, soweit so gut. wie gesagt, cursor blinkt, alles ok. nur welche 
kommandos muss ich jetzt an das Display schicken, um ein Zeichen 
anzuzeigen.
Ich bin mir nicht ganz sicher ob ich das Manual vom KS0073 (im Anhang) 
richtig verstehe. Aber muss ich jetzt als nächsten Befehl "Set DDRAM 
Address" schicken, und dann das Zeichen. Als das wäre dann:
0x80 ... Set DDRAM Address. Als Adresse hätte ich jetzt 0x00 genommen 
(1. Zeile)
0x53 ... das wäre der Hex-Code für ein "S"

Und was bedeutet im Manual das RE-Bit das in der Codetabelle auf Seite 
40 z.b. zu sehen ist?
Und mit dem R/S und R/W bit kann ich praktisch einstellen, was ich 
machen will. Da gibts ja die Tabelle auf Seite 10. Aber wie spielen die 
da mit, wann muss ich die senden?

von spess53 (Gast)


Lesenswert?

Hi

>Ich bin mir nicht ganz sicher ob ich das Manual vom KS0073 (im Anhang)
>richtig verstehe. Aber muss ich jetzt als nächsten Befehl "Set DDRAM
>Address" schicken, und dann das Zeichen. Als das wäre dann:
>0x80 ... Set DDRAM Address. Als Adresse hätte ich jetzt 0x00 genommen
>(1. Zeile)
>0x53 ... das wäre der Hex-Code für ein "S"

Das Zeichen wird an die Cursorposition geschrieben. Wenn du in eine 
andere Zeile wechseln willst, musst du die entsprechende Adresse setzen.

>Und was bedeutet im Manual das RE-Bit das in der Codetabelle auf Seite
>40 z.b. zu sehen ist?

S.39 Function Set-> RE-Bit.

MfG Spess

von Gast (Gast)


Lesenswert?

Danke für deine Antwort. Habe vielleicht vorher vergessen 
dazuzuschreiben, das ich die Codesequenz ja schon ausprobiert habe, 
diese aber kein Zeichen auf das Display zaubert. Auch wenn ich gleich 
einen Zeichencode z.b 0x53 hinschicke, funktioniert es nicht.

Und ich hab mir vorher auch vielleicht etwas unklar ausgedrückt. R/S und 
R/W sind ja nur 2 bit. wie schauen die anderen 6 aus?

von spess53 (Gast)


Lesenswert?

Hi

>Und ich hab mir vorher auch vielleicht etwas unklar ausgedrückt. R/S und
>R/W sind ja nur 2 bit. wie schauen die anderen 6 aus?

Das sind sie beiden Steuerleitungen zum Display. R/S - Auswahl Daten 
oder Steuerbefehl. R/W - Lesen oder Schreiben. Wenn du R/W nicht 
benutzt, dann auf L legen.

MfG Spess

von Gast (Gast)


Lesenswert?

ok, aber wenn du dir die Konstruktion des Startbytes anschaust (0x1F) 
dann steht ja da im Manual das eine 5bit 1er folge ist, dann kommt R/S, 
dann R/W (oder umgekehrt egal jetzt) und dann das Stopbit.

so wenn ich jetzt etwas anderes hinschicke, wo R/S und R/W anders 
gesetzt sind, muss ich dann wieder so eine sequenz schicken oder wie 
teil ich das dem display mit?

von spess53 (Gast)


Lesenswert?

Hi

>so wenn ich jetzt etwas anderes hinschicke, wo R/S und R/W anders
>gesetzt sind, muss ich dann wieder so eine sequenz schicken oder wie
>teil ich das dem display mit?

Ich glaube du hast noch etwas Probleme mit dem Verständnis der 
Displayansteuerung.

Bei vollständiger Beschaltung hast du 8 Datenleitungen, R/S-Leitung, 
R/W-Leitung und E-Leitung. Wenn du einen Befehl an das Display schicken 
willst muss die R/S-Leitung L und die R/W-Leitung auch L sein. Bei einem 
Zeichen muss R/S=H und R/W=L sein.

MfG Spess

von Gast (Gast)


Lesenswert?

ja aber erstens ich hab keine vollständige beschaltung. sondern die ist 
schon ausgerichtet für SPI.
und zweitens schau lies mal auf seite 50:

"Before transferring real data, start byte has to be transferred. It is 
composed of succeeding 5 “High” bits,
read write control bit (R/W), register selection bit (RS), and end bit 
that indicates the end of start byte."

von spess53 (Gast)


Lesenswert?

Hi

Du hattest nicht explizit geschrieben, das du den seriellen Mode 
benutzt.

Wenn du jetzt Daten senden willst musst du das erste Byte mit RL=H und 
RW=L senden. Danach in den nächsten zwei Byte High- und Low-Teil deines 
Datenbytes. Bei weitere Daten Reicht es, nur die Daten zu senden. Erst, 
wenn du wieder eine, oder mehrere Instruktions senden wills muss das 
Startbyte gesendet werden.

MfG Spess

von Gast (Gast)


Lesenswert?

aha also sieht dann das praktsich so aus:

startbyte: 11111 R/S R/W 0 (oder halt vertauscht, egal)
und ab dann daten

richtig?

von spess53 (Gast)


Lesenswert?

Hi

>richtig?

Also Startbyte:

   Bit   7   6   5   4   3   2   1   0
         0  R/S R/W  1   1   1   1   1

MfG Spess

von Gast (Gast)


Lesenswert?

ja genau, hab ich eh gemeint. dann probier ich das morgen aus und meld 
mich wieder obs funktioniert bzw nicht funktioniert hat. danke trotzdem 
mal

von Markus S. (jjmax)


Lesenswert?

Ich beschäftige mich gerade zufällig mit dem gleichen Thema. Könnte mir 
bitte jemand erklären was das RE- Bit ist?

Lg,
Max

von spess53 (Gast)


Lesenswert?

Hi

>Ich beschäftige mich gerade zufällig mit dem gleichen Thema. Könnte mir
>bitte jemand erklären was das RE- Bit ist?

Hatte ich doch schon geschrieben: Das ist ein Bit vom Function Set 
Befehl.

MfG Spess

von Markus S. (jjmax)


Lesenswert?

Hab ich gelesen, aber ich steh gerade auf der Leitung :) Wird das seriel 
gesendet, also vorm R/W, statt dem letzten der fünf 1er, oder muss ein 
Pin gesetzt werden?

von Markus S. (jjmax)


Lesenswert?

Markus Schütz schrieb:
> Hab ich gelesen, aber ich steh gerade auf der Leitung :) Wird das seriel
> gesendet, also vorm R/W, statt dem letzten der fünf 1er, oder muss ein
> Pin gesetzt werden?

Sry, war eine dumme Frage (: Habs schon gesehn

von Hubert G. (hubertg)


Lesenswert?

Hier gib es eine *.lib für ein SPI-LCD.
www.schorsch.at/content/view/25/2/lang,en/
Ist zwar für ein VLGEM1021, da soll ein KS0074 oder kompatible drinnen 
sein, vielleicht gehts auch mit einem KS0073.

von Gast (Gast)


Lesenswert?

hallo,
so bin jetzt endlich dazu gekommen. zeichen draufschreiben funktioniert 
jetzt. juhu. hätte aber noch eine frage. um das busy flag abzufragen. 
reicht es da 0x3F zum display zu schicken oder gehört da noch was?

von gast (Gast)


Lesenswert?

man ließt das LCD dazu aus  !!

[pseudocode]
busy{
port auf eingang umschalten
RS und RW passend setzen
enable
while ( lcdpin &( 1<< bit 7 )
  volatile asm("nop")
disable
port auf ausgang umschalten
}

von spess53 (Gast)


Lesenswert?

Hi

>man ließt das LCD dazu aus  !!
>[pseudocode]
>busy{...

Aber nicht bei der seriellen Ansteuerung.

$3F sollte eigentlich passen.

MfG Spess

von Gast (Gast)


Lesenswert?

passt danke

von Gast (Gast)


Lesenswert?

Frage noch zum abfragen des busy flags. wenn man nur 0x3f ist das aber 
nicht ausreichend oder?. dann muss man noch zweimal 0x00 schicken. erst 
dann bekomm ich was richtiges ?

von spess53 (Gast)


Lesenswert?

Hi

>dann muss man noch zweimal 0x00 schicken. erst dann bekomm ich was
>richtiges ?

Nein. Nur einmal pro Abfrage. Nach dem Senden von $3F liest du mit jeden 
Senden einer Null das Statusregister.

MfG Spess

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.