4x16 LCD - Asm Routinen

Gast #135999
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 !
Gast #136000
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
Gast #136002
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
Gast #136003
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.
Gast #136004
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
Gast #136005
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
Gast #136009
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
Gast #136011
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren