Also:
Die Tabelle beschreibt die Bits und die Daten, die das LCD versteht; die Tabelle beschreibt NICHT einen Übertragungsmodus. Nur im 8-bit mode kann man sagen: "ich schicke die Datenbits 00000010 direkt an die pins D7..D0 des LCD (in einem einzigen Takt)".
Die gesetzten RS bits bei den beiden letzten Zeilen sagen genau das Gegenteil, nämlich: Das sind DATEN. Alle Zeilen davor haben RS=0 und sind deshalb KOMMANDOS.
Wenn Du die D-Bits "0000 0010" ans LCD schickst, je nach Modus in einem oder in zwei Takten, heisst das für das LCD:
Entweder
"Führe das Kommando CursorHome aus", nämlich genau dann, wenn RS=0 und R/W=0
oder
"Schreibe HEX 02 ins aktuelle RAM an die aktuelle Position und inkrementiere bzw. dekrementiere die Position dann", nämlich wenn RS=1 und R/W=0
oder
"Lies das nächste Zeichen aus dem aktuellen RAM von der aktuellen Position und inkrementiere bzw. dekrementiere die Position dann", nämlich genau wenn RS=1 und R/W=1 (Du darfst dann allerdings keine D-Bits schreiben, sondern muss sie ja lesen, notfalls wieder in 2 Takten).
oder
"Zeige mir das Busy Flag", nämlich genau wenn RS=0 und R/W=1 (Du darfst dann wieder keine D-Bits schreiben, sondern muss sie lesen, notfalls wieder in 2 Takten).
In der Praxis musst Du nie das Busy Flag vom LCD lesen, wenn Du in CBASIC programmierst - Dein Programm ist sowieso immer langsamer als das LCD. Deshalb wirst Du RS=0 und RW=1 nie verwenden.
Auch "Daten vom LCD lesen" benutzt Du normalerweise nicht -- normalerweise willst Du ja Daten zum LCD schreiben, und nicht nachschauen, was gerade auf dem LCD steht. Deshalb wirst Du auch RS=1 und RW=1 kaum verweden.
Bleibt also übrig:
RW=1 (das heisst: Du schreibst was ans LCD),
und da musst Du halt sagen, was das LCD mit den D-Bits anfangen soll:
Entweder schickst Du ein Zeichen, das das LCD anzeigen soll (RS=0),
oder Du schickst ein Kommando, das das LCD ausführen soll, wie z.B. "CursorHome" (RS=1).
Vielleicht solltest Du Dir die Tabelle etwas anders hinschreiben, nämlich:
1. Mit R/W gibt man an, ob zum LCD geschrieben wird (R/W=0), oder ob vom LCD gelesen wird (R/W=1, wird selten benutzt).
Wenn man wirklich mal vom LCD lesen will (R/W=1), darf man natürlich nichts auf die D-Bits schreiben - die will man ja gerade lesen, das müssen also ein Eingabe-Ports sein.
2. Mit RS gibt man an, welcher Teil des LCD betroffen ist. Betroffen ist entweder das LCD RAM (RS=1), oder es ist ein "LCD Kommando-Register" (RS=0).
Wenn man ins LCD DD-RAM schreibt (RS=1), muss man in den D-Bits das ASCII-Zeichen angeben, das man anzeigen will; wenn man ausnahmsweise mal aus dem LCD RAM lesen will, darf man natürlich keine D-Bits schreiben, sondern muss sie lesen.
Wenn man in ein LCD Register schreibt (RS=0), führt man ein Kommando aus, und man muss dann in den D-Bits angeben, welches der 8 Kommandos das sein soll; einige dieser 8 Kommandos haben noch Zusatz-Bits wie z. B. "I/D" bei "EntryModeSet".
Register lesen geht nicht, nur Busy Flag lesen geht, aber das braucht man in CBASIC nicht.
3. Die 8 D-Bits übergibt man natürlich nur, wenn man zum LCD schreibt (also nicht, wenn man ausnahmsweise mal vom LCD liest).
Je nach Mode gehen die 8 bits in einem Takt rüber (8 bit mode), oder in 2 Takten (4 bit mode).
Welchen mode man benutzt, hängt von der Beschaltung ab: Wenn ausser dem E-Bit und den Steuer-Bits RS und R/W auch noch alle 8 D-Bits beschaltet sind, kann man den 8 bit mode benutzen. Wenn statt dessen nur die D-Bits D4..D7 beschaltet sind, geht (nur) der 4 bit mode, der dann zwar zwei Takte pro Byte braucht, aber dafür schon mit 7 bit-Ports auskommt (im Gegensatz zu 11 bit-Ports für den 8 bit mode).
Lesezeichen