lcd initialisierung assembler

OP #3576918
Lesenswert?

Ich weiß, dass es schon ewig viele Beiträge von diesem Problem gibt, 
aber ich komme nicht weiter.

Ich versuche mein LCD (Treiber: 44780) mit einem Atmega16 (16MHz) zu 
programmieren. Ich programmiere in Assembler. Allerdings geht nicht mal 
die initialisierung.
Ich habe es nach dieser Anleitung probiert: 
http://www.sprut.de/electronic/lcd/#ks0073

Wenn die Initialisierung abgeschlossen ist, wird immer noch ein Balken 
in der oberen Zeile angezeigt, und der Cursor blinkt an der zweiten 
stelle.

Im Anhang befindet sich mein Programm.

Kann mir bitte jemand sagen was da nicht stimmt?

mfg
Angehängte Dateien:
#3576944
Lesenswert?

Zunächst, dein Code ist nicht kommentiert und schlecht lesbar. Ohne mich 
jetzt da hinein zu vertiefen, fällt mir als erstes auf:

";DB7-DB4 auf PB3-6"

Das ist suboptimal, weil die Datenleitungen nicht mit einem 
vollständigen Nibble übereinstimmen und somit unnnötige 
Schiebeoperationen erforderlich sind (die ich im Code nicht finde). 
Schließ die Datenpins an PB7-PB4 an.
OP #3576949
Lesenswert?

@holger

das Problem ist, dass bei dieser Seite der Code für die Initialisierung 
nicht direkt aufgeführt ist, sondern nur der Ablauf. Ich verstehe nicht 
was man mit  "$3" meint.

Ist es eigentlich auch richtig, dass ich zuerst die Pegel für RS und R/W 
anlegen muss, dann die Enable leitung auf High legen, dann die Pegel für 
die Datenleitungen anlegen muss und dann Enable wieder auf low ziehen?
#3576973
Lesenswert?

ldi R16, 0b00000110    ;Interface auf 8-bit setzen
out PORTB, R16
sbi PORTB, 2      ;Enableleitung auf high


Das geht so nicht. Du schreibst damit einerseits nur Nullen auf die 
Datenleitungen und gleichzeitig ziehst du R/W auf High, wodurch das 
Display in den Lesemodus versetzt wird.

Vergiß das Tutorial und schau dir das hier auf µC-net an.

holger schrieb:
> Vergleiche deinen Code mit dieser Seite:
>
> http://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD
OP #3576995
Lesenswert?

@ lcke

1.) Ich verstehe nicht ganz, wieso ich alle Datenleitungen auf low lege. 
Wenn ich die Zahl 0b00000110 auf Port B schreibe, so müssten doch DB5 & 
DB4 auf high sein. Außerdem setze ich R/W nie auf eins, weil auf Pin 2 
ja Enalbe liegt.

2.) Ich verstehe die Initialisierung auf uC.net nicht wirklich. Was 
meint man da, wenn man $3 ins Steuerregister schreiben soll?

mfg

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