Erstmal Hallo, Ich weis das hier jeden Tag mindestens 10 Leute über LCD's fragen, aber ich bin echt am Ende meines Lateins, ich haben die Codesammlung durchforstet und auch das Tutotial probiert und nichts klappt. Wie im Betreff genannt habe ich ein 4x20 LCD mit HD44780 und Programiere unter C mit Codevision Compiler. Im Anhang befindet sich die Initialisierung und der Versuch ein H auf dem LCD auszugeben, leider funktioniert es aus irgendeinem Grund nicht, hoffe mir kann jemand helfen. Es geht bei init irgendwas schief, der nur die 1er Zeilen( 1&3 ) initialisiert werden und sonst gar nix passiert. danke im voraus.
Edit: Jetzt habe ich glatt vergessen zu erwähnen das ich einen ATMEGA 128 auf STK501 benutze , das LCD läuft im 4Bit Modus und hängt an PORTB.
Wo ist Deine main()? Abgesehen davon ist es ein ziemlicher Krampf, jedes Bit einzeln zu setzen. Außerdem übernimmt der Controller des Displays die Daten mit der fallenden Flanke an LCD_E. Du musst schon erst die Daten auf den Datenbus legen und dann erst einen kurzen Low-Impuls an LCD_E geben. Wenn Du LCD_E vor der Datenausgabe auf "0" schaltest, dann werden in dem Moment die Daten, die von vorher noch an den Datenpins waren, übernommen. Zu Deiner void WriteLCDData4() z.B. (ohne Gewähr!):
1 | //...
|
2 | LCD_E = 1; |
3 | PORTD &= 0x0F; //D7..4 löschen |
4 | PORTD |= data & 0xF0; //High-Nibble ausgeben |
5 | LCD_E = 0; //Enable auf Low |
6 | #asm("nop") //Kurz warten
|
7 | #asm("nop")
|
8 | LCD_E = 1; |
9 | PORTD &= 0x0F; |
10 | PORTD |= data << 4; //Low-Nibble ausgeben |
11 | LCD_E = 0; //Enable auf Low |
12 | //...
|
Erstmal danke für Antwort. Ich setzt LCD_E deshalb erst auf null weil meine MCU Low-Active, also wenn null ist Ein, wenn eins ist aus. die Main ist ja jetzt nicht wichtig, da steht nur void main( void ) { InitLCD(); } Gut, das mit den Ports setzten ist ansichtssache, aber ja kein Fehler.
> Ich setzt LCD_E deshalb erst auf null weil meine MCU Low-Active, also > wenn null ist Ein, wenn eins ist aus. Hä?
Wenn ich z.B. PORTD.1 = 1 setzte, hab ich 0V anliegen, wenn ich PORTD.1 = 0 setzt, habe ich 5V anliegen.
Naja, beim STK500 leuchten die LEDs bei L-Pegel. Das kann einen "besoffenen Neuling" (voll noob) schon mal zu falschen Schlüssen verleiten... Prost... ;-) ...
Ich bin ja echt der Mega VollNoob, oh mein gott, ich nachhinein kommt einem immer alles so logisch vor^^, werd das gleich mal testen. btw. man hätte das aber auch netter sagen können xD, jetzt am Nachmittag bin ich schon fast wieder nüchtern^^.
Wenn Du das Display an den Controller-Port direkt anschließt, dann hast Du bei einer 0 im Portregister auch eine 0 am Ausgangspin...
Es haut jetzt mit Init soweit hin das alle Zeilen angezeigt werden, der Cursor wir ist zwar auf der Falschen stelle, aber das Krieg ich schon hin, danke euch.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.