www.mikrocontroller.net

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


Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Uwe Nagel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :)

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.