LCD im 4Bit-Modus

Gast #3205
Lesenswert?

Hallo,

ich hab mal ein LCD wie im Tutorial beschrieben angeschlossen. 
Allerdings hab ich auch das Read/Write-Signal angeschlossen, weil ich 
das Busy-Flag abfrage, anstatt eine feste Zeit zu warten.

Im Buch "AVR-Risc Microcontroller" von Trampert heißt es auf Seite 344 
über den 4-Bit-Mode:
"Die beiden Halbbytes dürfen in diesem Fall [4-Bit-Modus] unmittelbar 
nacheinander übertragen, das Busy-Flag muß erst nach der Übertragung des 
gesamten Befehls abgefragt werden."
Wenn ich die beiden Nibble direkt hintereinander (ohne Wartezeit) 
rausgebe, geht's nicht. Wenn ich aber nach jedem Nibble auf das 
Busy-Flag warte, geht's. Also genau anders rum wie im Buch beschrieben.
Es wundert mich jetzt schon irgendwie, weil ich also nach jedem 
geschriebenen Nibble ein ganzes Byte rauslesen muß, um das Busyflag zu 
kriegen. Naja, wie auch immer, hat jemand Erfahrungen damit?

MfG,

Sebastian
Gast #3206
Lesenswert?

Hallo,
ich hab mal ein LCD wie im Tutorial beschrieben angeschlossen. 
Allerdings hab ich auch das Read/ Write-Signal angeschlossen, weil ich 
das Busy-Flag abfrage, anstatt eine feste Zeit zu warten.
Im Buch "AVR-Risc Microcontroller" von Trampert heißt es auf Seite 344 
über den 4-Bit-Mode:
"Die beiden Halbbytes dürfen in diesem Fall [4-Bit-Modus] unmittelbar 
nacheinander übertragen, das Busy-Flag muß erst nach der Übertragung des 
gesamten Befehls abgefragt werden."

Wenn ich die beiden Nibble direkt hintereinander (ohne Wartezeit) 
rausgebe, geht's nicht. Wenn ich aber nach jedem Nibble auf das 
Busy-Flag warte, geht's. Also genau anders rum wie im Buch beschrieben.
Es wundert mich jetzt schon irgendwie, weil ich also nach jedem 
geschriebenen Nibble ein ganzes Byte rauslesen muß, um das Busyflag zu 
kriegen. Naja, wie auch immer, hat jemand Erfahrungen damit?
MfG,
Sebastian

Ja hatte ich auch das problem.
Allerdings stimmt die aussage im Buch schon

Im Samsung KS0070B Datenblatt ist ein Timing Diagramm für den 4 bit 
modus abgebildet

"Busy Flag outputs "1" after the second transfer are ended"

Du musst 2 mal den Enable pulsen lassen währen der LCD contr im Read 
mode ist.

Ich hatte das problem das die Busy flag abfrage durch den AVR input 
gestöhrt wurde.
Musste den AVR Input auf High Z bringen dann hatts geklappt.

Soll ich dir mal den code (asm) rüberlassen ?

Phagsae
Gast #3208
Lesenswert?

Hallo,

das Problem ist: wenn ich beide Nibbles direkt hintereinander sende, 
zeigt das Display nur noch Müll an. Wenn ich dazwischen etwas warte (ca. 
20-30µs) oder eben das Busyflag abfrage, funktioniert es.
Laut Buch muß ich die beiden Nibbles ja direkt hintereinander senden 
dürfen.
Oder ist das vielleicht eine Macke des Display-Controllers (ich weiß den 
genauen Typ nicht, weil schin eingelötet)?

MfG,

Sebastian
Gast #3209
Lesenswert?

Hast du das timing beachtet ?
Zuerst RW/RS setzten
Dann 40ns warten bis Enable gesetzt wird
Enable nicht kürzer als 220ns
Enable muss ca 180 ns anliegen bevor Die Daten akzeptiert werden
Die Daten müssen 60 ns anliegen

Phagsae
Gast #3210
Lesenswert?

Hallo,

ja, du hast Recht. Es hat wirklich am Timing gelegen.
Ich hab meine LCD-Routinen jetzt mal umgeschrieben,
und siehe da - jetzt funktioniert es so, wie beschrieben.
Danke für den Tip.

MfG,

Sebastian

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren