Forum: Mikrocontroller und Digitale Elektronik HD44780 unter CodeVision


von VollNoob (Gast)


Angehängte Dateien:

Lesenswert?

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.

von VollNoob (Gast)


Lesenswert?

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.

von johnny.m (Gast)


Lesenswert?

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
//...

von VollNoob (Gast)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> Ich setzt LCD_E deshalb erst auf null weil meine MCU Low-Active, also
> wenn null ist Ein, wenn eins ist aus.

Hä?

von VollNoob (Gast)


Lesenswert?

Wenn ich z.B. PORTD.1 = 1 setzte, hab ich 0V anliegen,
wenn ich PORTD.1 = 0 setzt, habe ich 5V anliegen.

von Hannes L. (hannes)


Lesenswert?

Naja, beim STK500 leuchten die LEDs bei L-Pegel. Das kann einen 
"besoffenen Neuling" (voll noob) schon mal zu falschen Schlüssen 
verleiten...

Prost... ;-)

...

von VollNoob (Gast)


Lesenswert?

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^^.

von johnny.m (Gast)


Lesenswert?

Wenn Du das Display an den Controller-Port direkt anschließt, dann hast 
Du bei einer 0 im Portregister auch eine 0 am Ausgangspin...

von VollNoob (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.