Forum: Mikrocontroller und Digitale Elektronik Frage zum LCD-Tut


von Steffen (Gast)


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

von Dieter Brüggemann (Gast)


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

von Dieter Brüggemann (Gast)


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

von Andreas S. (andreas) (Admin) Benutzerseite


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 ;-)

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.