Forum: Compiler & IDEs zeilenwechsel bei 2*16 lcd geht nicht


von Markus (Gast)


Lesenswert?

hm also die anderen probleme die ich gestern und heute hier gepostet
hab
scheinen im mom wengistens gelöst zu sein ...

leider gibts gleich das nächste.

die ausgabe auf meinem 2*16 lcd funktioniert wunderbar.
nur leider spinnt es völlig wenn ich die zeile wechsle.
wenn ich aus zeile eins in zeile 2 springe, gibt er,
wenn ich einen string ausgebe, diesen irgendwo
in der mitte beginnend aus. also aus "Hallo Welt" kann z.B. "
Welt"
werden. wenn ich über die erste zeile einfach hinaus
schreibe, also ohne manuellen zeilenwechsel,
verschluckt er einfach alle zeichen > 16.

(das display hängt an PORTA. wobei PORTA0-PORTA3 am 4bit-bus hängen
 und PORTA4 an RS & PORTA5 an E);
mein befehl zum zeilenwechsel:

lcd_send_cmd(0xa0);
0x80 für den dd-befehl
und 0x40 um das erste zeichen in zeile 2 zu adresieren
= 0xa0

wobei lcd die ausgabe der 2 nibbles erledigt.

gruß & thx im vorraus markus

von Alex (Gast)


Lesenswert?

Schau mal in das Datenblatt deines LCDs. Dort findest du die
RAM-Adressen für dein LCD (ist eine Tabelle). Ich gehe mal davon aus,
dass deine Zeilenanfangsadressen im Code nicht mit denen im Datenblatt
übereinstimmen.

Gruss, Alex

von Uwe Nagel (Gast)


Lesenswert?

0x80 + 0x40 gibt immer noch 0xc0 und nicht 0xa0 !
Die Adresse 0xa0 ist im nicht sichtbaren Bereich der ersten Zeile.
Nach 40 Zeichen also nach 0xa7 kommt der Zeilenumbruch. Daher sieht man
die erten 8 Zeichen von "Hallo Welt" nicht.
Einach weiterschreiben geht nicht, weil das Display intern das Format 2
x 40 Zeichen benutzt. Von beiden Zeilen sind jedoch nur die ersten 16 zu
sehen.
Man könnte auch einfach 24 Leerzeichen dazwischenschieben...

von Markus (Gast)


Lesenswert?

oh man bin ich blöd....
:) ich hatte schon ins DB geguckt und
die richtige adresse rausgesucht,,,,nur wenn man zu
doof zum addieren ist hilft das nix...

thx auf jeden fall :)

von Peter D. (peda)


Lesenswert?

Hier mal mein Macro zum Position setzen für ein 2*16-Display:

        .macro  lcd_pos ;00 ... 1F
        ldi     a0, 0x80 + @0 + @0 / 0x10 * 0x30
        rcall   lcd_command
        .endmacro

Peter

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.