Forum: Mikrocontroller und Digitale Elektronik LCD im 4Bit-Modus


von Sebastian Fahrner (Gast)


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

von Phagsae (Gast)


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

von Phagsae (Gast)


Lesenswert?

Ich hab den code in die sammlung gestellt

von Sebastian Fahrner (Gast)


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

von Phagsae (Gast)


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

von Sebastian Fahrner (Gast)


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

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.