mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD Display ansteuern mit KS0073


Autor: Gast (Gast)
Datum:
Angehängte Dateien:

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

Autor: spess53 (Gast)
Datum:

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

Autor: Gast (Gast)
Datum:

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

Autor: spess53 (Gast)
Datum:

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

Autor: Gast (Gast)
Datum:

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

Autor: spess53 (Gast)
Datum:

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

Autor: Gast (Gast)
Datum:

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

Autor: spess53 (Gast)
Datum:

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

Autor: Gast (Gast)
Datum:

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

Autor: spess53 (Gast)
Datum:

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

Autor: Gast (Gast)
Datum:

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

Autor: Markus Schütz (jjmax)
Datum:

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

Autor: spess53 (Gast)
Datum:

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

Autor: Markus Schütz (jjmax)
Datum:

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

Autor: Markus Schütz (jjmax)
Datum:

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

Autor: Hubert G. (hubertg)
Datum:

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

Autor: Gast (Gast)
Datum:

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

Autor: gast (Gast)
Datum:

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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

Aber nicht bei der seriellen Ansteuerung.

$3F sollte eigentlich passen.

MfG Spess

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
passt danke

Autor: Gast (Gast)
Datum:

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

Autor: spess53 (Gast)
Datum:

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

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.