Forum: Mikrocontroller und Digitale Elektronik Problem mit LCD Ansteuerung


von W.A.S.P (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

ich komme hier nicht mehr weiter bei dem Versuch, ein LC-Display mit 
einem ATmega16 anzusteuern.

Die Bibliothek von Fleury funktioniert, deshalb kann ich einen 
Hardwarefehler schonmal ausschließen.

Ich sitze hier seit 2 Tagen über der Software und kann keinen Fehler 
finden, ich habs auch auf Papier schon durchgespielt (soviel Code ist es 
ja noch nicht).

Kann vielleicht jemand über meinen Versuch mal drüberschaun? Oft sieht 
man ja selber den Wald vor lauter Bäumen nicht mehr wärend ein Andrer 
nur kurz hinschaun muss :)

Die Software ist im Anhang. Es geht momentan nur darum, ein einzelnes 
'A' darzustellen. Doch stattdessen seh ich nur schwarze Blöcke.

Ich habe letztes Jahr bereits ein Display im 8 Bit Mode betrieben, hier 
soll aber ein 4Bit Datenbus verwendet werden und die Software soll 
übersichtlicher werden, deshalb nochmal von vorne.

Achja, das ganze ist als Übung, deshalb will ich meinen eigenen Treiber 
schreiben.

Viele Grüße, Wasp

von holger (Gast)


Lesenswert?

Beim 4 Bit Mode kannst du dir das hier vergessen:

    lcd_write_byte(0, 0x30);            //writing 0x3 for the first time

Beim initialisieren darfst du nur Nibbels senden.

von W.A.S.P (Gast)


Lesenswert?

Aber meine lcd_write_byte macht doch genau das.
Sie ruft zweimal die lcd_write_nibble auf und schickt somit die 0x30 
nibbleweise an das LCD.

von John (Gast)


Lesenswert?

Nach dem Einschalten befindet sich das LCD im 8bit Modus. Du musst erst 
mit einem(!) 'sent' auf 4bit umschalten. Erst danach erwartet das LCD 
die Daten Nibble-Weise in zwei Sent-Befehlen.

Gruß
John

von W.A.S.P. (Gast)


Lesenswert?

Danke, aber ich bin noch in der Uni und komm grad nicht sofort zum 
Testen.

Trotzdem deckt sich deine Aussage nicht mit dem Tutorial hier und 
anderen Quellen.
Die Idee hinter dem dreimaligen Senden von 0x30 ist doch, das Display 
sicher in den 8Bit Modus zu kriegen. Nach 3mal befindet es sich dort 
100%ig. Danach wird es durch 0x20 in den 4 Bit Modus geschickt.

Zumindest in der Theorie...

von Mark L. (Firma: TH Köln) (m2k10) Benutzerseite


Lesenswert?

Du musst dreimal 0b0011 senden zum initialisieren, dein Code sendet aber 
0b0011 + 0b0000 und das dreimal. Hast es richtig verstanden, aber falsch 
umgesetzt ;-)
Die Wartezeit bei PowerOn ist mit 20ms vermutlich zu kurz, ich kenne so 
30-50ms, steht aber im Datenblatt. Der E-Puls reicht mit ca. 1µs. Nach 
jedem Senden an's Display sollte entwerder das busy-flag abgefragt 
werden, oder Warteschleifen eingefügt, Zeiten stehen im Datenblatt.

Mark

von Michael U. (amiga)


Lesenswert?

Hallo,

die 3x 0x30 ist der Soft-Reset des HD44780.
Aus dem 4Bit Mode in den 8Bit-Mode umschalten ist nicht 100% definiert, 
die alten Datenblätter sagen, daß die Umschaltung nach 4Bit nur durch 
PowerOn rückgängig gemacht werden kann.

Nach PowerOn ist der HD44780 immer im 8Bit-Mode.
Die HD44780 machen intern keine PowerOn-Initialisierung, die muß durch 
dies 3x 0x30 gestartet werden. Neuere Abkömmlinge erledigen das nach 
PowerOn alleine, kennen aber den Softreset auch noch.

Zum Senden: die 0x30 werden nach PowerOn als 8Bit Daten vom Display 
eingelesen. Es liest also mit dem E-Clock alle 8 Leitungen ein, 
ignoriert aber den Zustand von D0-D3.
Es darf hier also nur einen E-Clock geben.
Die 0x20 schaltet dann auf 4Bit um, logischerweise wird die aber 
immernoch im 8Bit-Mode eingelesen, also nur ein E-Clock.

Erst ab hier ist das Display im 4Bit-Mode und erwartet die 8Bit als 2 
4Bit Nibble mit jeweils E-Clock.

Gruß aus Berlin
Michael

von W.A.S.P. (Gast)


Lesenswert?

Danke euch beiden, das klingt doch mal einleuchtend :)

Freu mich schon aufs testen daheim!

Viele Grüße, Wasp

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.