www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Cursor oder Anzeige schieben beim HD44780-LCD


Autor: Tobias G. (tobi1435)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin noch mehr oder weniger Anfänger, was das Programmieren von 
Microcontroller angeht. Zur Zeit versuche ich mich am Pollin-LCD WINTEK 
WD-C2704M-1HNN (HD44780-kompatibel) und habe hierzu folgende Frage zum 
Schieben des Cursors bzw. der Anzeige:

Soweit ich das verstanden habe, speichert der Controller 40 Zeichen pro 
Zeile (1. Zeile Adresse 0...39, 2. Zeile Adresse 64...103), wovon nur 27 
angezeigt werden. Wenn nun der Cursor an Position 39 ist und nach rechts 
geschoben wird müsste er ja wieder bei 0 sein und in der entsprechenden 
Zeile bleiben.
Allerdings ist dies bei mir nicht so. Der Cursor wechselt regelmäßig 
beim 32. Schiebevorgang die Zeile (Zeile 1 -> Zeile 2 -> Zeile 1 etc.), 
sodass der Text auf der falschen Zeile überschrieben und der auf der 
richtigen Zeile nicht überschrieben, sondern nur geschoben wird.

Um das Problem zu verdeutlichen, habe ich in C ein Testprogramm für den 
ATmega32 geschrieben (siehe Anhang). Dies positioniert den Cursor auf 
die Adresse 8 und sollte dann in der Zeile 1 das Alphabet von A bis Z 
schreiben, wobei die Anzeige nach jedem Zeichen nach links geschoben 
wird. Anschließend soll der Cursor um 10 Stellen nach rechts geschoben 
werden.

Nach dem 1. Durchlauf und dem 6. Schieben des Cursors ergibt sich 
folgende Ausbage (. = leeres Feld, _ = Cursor (blinkend)):

STUVWXYZ..............ABCDE
.............._............

Nun wird vorübergenend in der 2. Zeile weitergeschrieben. Kurz nach 
Beginn des 2. Durchlaufes:

WXYZ..............ABCDEFGHI
..............ABCD_........

Meiner Meinung nach dürfte das doch so nicht sein.
Kann es sein, dass ich da etwas missverstanden habe, oder dass ein Soft- 
oder Hardwarefehler vorliegt?


Für die Antworten danke ich im Voraus.

Viele Grüße,

Tobi

Autor: Klaus (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Der Anhang hat mir damals sehr geholfen!

Autor: Tobias G. (tobi1435)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich glaube, ich habe nun die Lösung für mein Problem:

Der Cursor springt nach dem Schreiben eines Zeichens bei der Adresse 39 
auf die Adresse 64, also eine Zeile tiefer und von der Adresse 103 auf 
die Adresse 0, also wieder eine Zeile höher.

Wobei ich den Sinn nicht so ganz verstehe, denn so kann man 
Laufschriften offensichtlich nur zweizeilig machen, wobei in jeder Zeile 
aber ein anderer Text stehen muss. Außerdem dürfen die Texte wohl nur 40 
Zeichen lang sein, sonst werden wieder wild die Zeilen gewechelt.


Vielen Dank für eure Mithilfe.

Viele Grüße,

Tobi

Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!
>Wobei ich den Sinn nicht so ganz verstehe, denn so kann man
>Laufschriften offensichtlich nur zweizeilig machen, wobei in jeder Zeile
>aber ein anderer Text stehen muss.
Wer sagt denn das du die 2.(1.) Zeile mit Zeichen beschreiben musst?
Es reicht doch den Text einmalig einzutragen und dann nur die Anzeige zu 
schieben.
> Außerdem dürfen die Texte wohl nur 40
>Zeichen lang sein, sonst werden wieder wild die Zeilen gewechelt.
40 Zeichen, Ja(weil sonst in Zeile 2), wild durcheinander, Jein, man 
kann gezielt auf eine Adresse schreiben. Wenn man die Grenzen beachtet 
geht auch nichts durcheinander.

Viel Erfolg, Uwe

Autor: Tobias G. (tobi1435)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.

>Wer sagt denn das du die 2.(1.) Zeile mit Zeichen beschreiben musst?
Ich dachte, dass ich evtl. nur eine Zeile schieben kann, um in der 
anderen einen nicht laufenden Text anzuzeigen, oder der Text z. B. von 
der 2. in die 1. Zeile geschoben wird. Denn so habe ich ja entweder eine 
einzeilige Laufschrift und eine leere Zeile oder eine zweizeilige 
Laufschrift, wobei der Leser während des Laufens zum richtigen Zeitpunkt 
die Zeile wechseln muss, um alles zu lesen.

>Wenn man die Grenzen beachtet geht auch nichts durcheinander.
Dann sind es ja die 40 Zeichen, die ich nicht überschreiten darf.
Laufschriften sind ja eigentlich dazu gedacht, Texte anzuzeigen, die 
nicht aufs Display passen. Ich dachte, dass ich den Cursor ganz rechts 
positionieren könnte und einen theoretisch unendlich langen Text 
schreiben könnte. Die Zeichen, die links rausgeschoben werden, würde der 
Cursor dann mit neuen überschreiben.
Hierbei wechselt der Cursor halt wieder wild die Zeilen.


Viele Grüße,

Tobi

Autor: ... ... (docean) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dann musst du das wohl alles selber erledigen...

also einfach immer den kompletten Inhalt des Display schreiben

ach ja
http://homepage.hispeed.ch/peterfleury/avr-softwar...
die lib nimmt dir viel ab...eigentlich fast alles

Autor: Tobias G. (tobi1435)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe mein Problem nun gelöst:
Es wird nun bei einer Laufschrift nach jedem Zeichen die Position des 
Cursors geprüft. Ist dieser bei Adresse 0 oder Adresse 64, hat er ja 
zuvor die Zeile gewechselt. Dann wird die Adresse automatisch wieder zu 
64 bzw. 0 zurück gewechselt, sodass theoretisch unendlich lange 
Laufschriften möglich sind.

Falls sich jemand für die Lösung interessiert, habe ich die Dateien mit 
einem Tesprogramm (etwa 300 Zeichen lange Laufschrift) mal angehängt.
Die enstprechende Funktion heißt: LCD_Laufschrift ("Text", 
Displayhaelfte)
Displayhaelfte muss 1 oder 2 sein.

>http://homepage.hispeed.ch/peterfleury/avr-softwar...
>die lib nimmt dir viel ab...eigentlich fast alles
Danke, aber um das alles besser verstehen zu können, habe ich mir einige 
Funktionen gerade selber geschrieben. ;-)


Viele Grüße,

Tobi

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.