Forum: Mikrocontroller und Digitale Elektronik 4x16 LCD - Asm Routinen


von Paul Wilhelm (Gast)


Lesenswert?

Moin !
Ich suche nach ein paar Asm-Rountinen für ein 4 Zeilen/16 Zeichen
Standard LCD. Ich hab das LCD bereits mit meinem AT90S2313 verkabelt,
aber mit den Routinen aus dem hiesigen Tutorial kann ich leider nur die
1. und die 3. Zeile ansteuern. Liegt das an meinem LCD, oder muss man im
Quellcode noch irgendetwas einstellen ?

Ich wäre für Info's dankbar !

Ciao und frohes Neues Jahr !

von Jens123 (Gast)


Lesenswert?

kommt auf deine routine an
evtl musst du die auf 4 Zeilen einstellen
das mit der ersten Zeile und 3te Zeile ist korrekt, da du immer jede
zweite zeile ueberspringst

schau hier im tutorial mal nach

von Paul (Gast)


Lesenswert?

Jo danke erstmal für die schnelle Antwort

Hm aber wie kann ich das umstellen ? Ich hab schon alles
durchgeforstet, aber nix gefunden...

von Jürgen (Gast)


Lesenswert?

Hi,

schau mal in das datenblatt des LCDs, wo die Zeilen im DD-Ram des
HD44780 Controller sind. Dann setzt du die DD-Ram Adresse auf die
gewünschte Zeile und der nächste Char den du aufs LCD schickst
erscheint an der gewünschten stelle.

Guss Jürgen

von Jens123 (Gast)


Lesenswert?

http://www.repairfaq.org/filipg/LINK/F_Tech_LCD2.html#TECHLCD_002
unter:
Function set (001dnfxx)
Set interface data length, mode, font. Execution time: 40us
d=1
8-bit interface, d=0: 4-bit interface.
n=1
1/16 duty, n=0: 1/8 or 1/11 duty (multiplex ratio). For 2-line
displays, this can be thought of as controlling the number of lines
displayed (n=0: 1-line, n=1: 2 or more lines) except for 1x16 displays
which are addressed as if they were 2x8 displays--two 8-character lines
side by side.
f=1
5x11 dots, f=0: 5x8 dots.

von Paul (Gast)


Lesenswert?

Gute Idee würd ich jetzt auf Anhieb sagen, allerdings sind meine
Asm-Kenntnisse auf µC's extrem eingeschränkt...Bislang hab ich immer
nur auf dem PC mit Assembler geproggt

Gibts da nicht irgendwie was fertiges ? Oder liegt es tatsächlich an
meinem LCD...
Im Tutorial steht ja dass es mit einem 4x20er LCD kompatibel ist

von Jens123 (Gast)


Lesenswert?

du musst es ja auch richtig einrichten
es kann auch sein, dass die adressen nciht passen.
dein LCD hat verschidene speicheradressen
Zeile 1: zB. von 0 - 2
Zeile 2: zB. von 6 - 8
Zeile 3: zB. von 3 - 5
Zeile 4: zB. von 9 - 11

als Beispiel..

Du musst es:
a) richtig initalisieren
und b) richtig ansprechen

Gruss Jens

von Jürgen (Gast)


Lesenswert?

Hallo,

schick doch einfach mal 80 Zeichen zum LCD, dann sind alle 4 Zeilen
voll ;)

Zeile 2 beginnt glaub bei 40, spring also mal mit 40+128 in Tmp nach
lcd_command und du bist in zeile 2

von Jens123 (Gast)


Lesenswert?

@Jürgen nicht unbedingt hatte auch schon den fall, dass es etwas anders
war aber im grunde sollte es klappen ;)

ca. 100mal

ldi temp. "h"
rcall lcdout =) =)

von Paul (Gast)


Lesenswert?

Moment moment
Wie gesagt bin ich (noch!) überhaupt kein Asm Genie, wie meint ihr das
mit lcd_command und tmp ?! nixversteh

von Paul (Gast)


Lesenswert?

Ah gut, wenigstens liegt es nicht am LCD:
das mit den 80 Zeichen geht...hehe ein Glück hab ich mir ne Schleife
dafür gebastelt ^^

Jetzt bräuchte ich halt nur noch nen Tipp und ein Handfestes
Codebeispiel wie ich das Teil nun brauchbar zum laufen kriege

von Jens123 (Gast)


Lesenswert?

du kannst auch lcd_command aufrufen und dann ein command senden, was dir
an die richtige speicher adresse springt

von Jürgen (Gast)


Lesenswert?

Hallo,

mit tmp meinte ich temp1 (aus dem Quelltext, tutorial hier), sorry mein
fehler.
Du musst auf jeden Fall, egal was du anschliesst, in die Datenblätter
schauen, das hat nix mit Assembler zu tun.
Das Beispiel im Tutorial hat nicht nur ein Unterprogramm zum Zeichen
ausgeben, sondern auch eins um LCD-Befehle zu senden(nennt sich hier
"lcd_command").
Das LCD hat 80 Bytes Display-Ram in dem die Zeichen gespeichert sind
die auf dem Display sichtbar sind (genannt DD-Ram) nur sind Zeile 1-4
NICHT fortlaufen im DD-Ram gemappt. Bei einem 4x16 Display sieht das so
aus:

00-0F 1.Zeile
40-4F 2.Zeile
10-1F 3.zeile
50-5F 4.Zeile

Um Text in einer bestimmten Zeile zu beginnen musst du also den
Adresszeiger auf z.B 40 setzen um in der 2.Zeile zu beginnen.
Der LCD-Befehl (Set DD-Ram-Adress) ist 0b1xxxxxxx wobei in xxxxxxx die
Ramadresse steht.


ldi    temp1,0b10000000+$40   ;Bit7 + Adresse für die 3.Zeile
rcall  lcd_command            ;nun Adresse (Cursor) setzen

Da du anscheinend mit Datenblättern auf Kriegsfuss stehst(englisch
???), lies mal ergänzend ...

http://www.sprut.de/electronic/lcd/index.htm#adressen

... das hier durch.

grüsse Jürgen

von Paul (Gast)


Lesenswert?

Ah, verstehe ! Danke erstmal für die ausführliche Hilfe, ich werds
gleich mal ausprobieren !
Thx !!! :D

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.