Frage zum LCD-Tut

Gast #25646
Lesenswert?
• ▲
▼
Hallo,

habe mittlerweile mit einem 16 x 2 LCD ( hd44780 ) rumgespielt. Nun 
möchte ich die Position von bestimmten Zeichen auf dem LCD festlegen. 
Ich denke mal, dass folgende Zeilen aus dem LCD-Tut eine Verschiebung 
des Cursors bewirken, oder :

----
        ldi temp1, 0b00101000        ;noch was einstellen...
        rcall lcd_command
        ldi temp1, 0b00001100        ;...nochwas...
        rcall lcd_command
        ldi temp1, 0b00000100        ;endlich fertig
        rcall lcd_command

-----
Was genau wird hier eingestellt ? Ein Blick ins Datenblatt hat schon 
geholfen, allerdings weiß ich immer noch nicht, wie ich den 
Adress-Counter des DDRAMs vom LCD variieren kann, um die Zeichen an eine 
gewünschte Stellen anzeigen zu lassen. Ich hoffe, Jemand kann mir die 
Zeilen kurz erklären.

Gruß

Steffen
Gast #25647
Lesenswert?
• ▲
▼
Hallo Steffen
Zur Intialisierung des Display
ldi temp1, 0b00101000 ;GG Ram einstellen ????????
ldi temp1, 0b00001100 ;Display einschalten
ldi temp1, 0b00000100 ;RAM inkrementieren nach schreiben eines Zeichens, 
also nächste Speicherstelle einstellen, für nächste Zeichen

Zum setzen einzelner Zeichen auf ein bestimmte Position, mußt du erst 
den DDRAM einstellen und dann das Zeichen schreiben.

DDRAM Setzen MSB 0 1  dann 6 Bits für die Adresse

Z.B.: 0100 0001 oder 0100 0010

Schau aber mal vorher nach, wie die Adressen auf die Zeilen aufgeteilt 
werden. Der Chip läuft auf vielen Anzeigen 2  16 bis 4  20 und 
weitere. Hab ich gerade nicht zur Hand.

MFG
Dieter
Gast #25648
Lesenswert?
• ▲
▼
Hallo Steffen

Kleiner Fehler hat sich da eingeschlichen.

Anstatt
DDRAM Setzen MSB 0 1 dann 6 Bits für die Adresse
Z.B.: 0100 0001 oder 0100 0010

Muß es heißen

DDRAM Setzen MSB 1 dann 7 Bits für die Adresse

Als lcd_command
Zeile 1 Stelle 1  0b10000001
Zeile 1 Stelle 8  0b10001000

Dein Display hat dann die Adressen.

1 Zeile         0 1 2 3 bis 16
2.Zeile        64 65 66 bis 79

MFG Dieter
Admin Persönliche Seite #25649
Lesenswert?
• ▲
▼
Steffen, die Initialisierung hat mit dem was du vorhast eigentlich 
nichts zu tun. (Trotzdem sollte ich wohl mal dazuschreiben was diese 
Zeilen genau bewirken.)

Mit dem folgenden Makro kannst du den Cursor auf eine bestimmte Position 
setzen:

;LCD-Cursor an bestimmte Position setzen
.MACRO locate ;(Zeile,Spalte)
        push temp1
        ldi temp1, 0b10000000|(((@0)-1)<<6)|((@1)-1)
        rcall lcd_command
        pop temp1
.ENDMACRO

Aufgerufen wird das ganze einfach so:

        ...
        locate 1,5
        ...

Fast wie in QBasic ;-)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.