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?
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
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?
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
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?
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
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."
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
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
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?
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
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.
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?
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
}
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 ?
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