mikrocontroller.net

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


Autor: Paul Wilhelm (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 !

Autor: Jens123 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jo danke erstmal für die schnelle Antwort

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

Autor: Jürgen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jens123 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.repairfaq.org/filipg/LINK/F_Tech_LCD2.h...
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.

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jens123 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jürgen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jens123 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 =) =)

Autor: Paul (Gast)
Datum:

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

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jens123 (Gast)
Datum:

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

Autor: Jürgen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Paul (Gast)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.