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 !
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
Jo danke erstmal für die schnelle Antwort Hm aber wie kann ich das umstellen ? Ich hab schon alles durchgeforstet, aber nix gefunden...
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
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.
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
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
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
@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 =) =)
Moment moment Wie gesagt bin ich (noch!) überhaupt kein Asm Genie, wie meint ihr das mit lcd_command und tmp ?! nixversteh
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
du kannst auch lcd_command aufrufen und dann ein command senden, was dir an die richtige speicher adresse springt
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.