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


von Tobias G. (tobi1435)


Angehängte Dateien:

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

von Klaus (Gast)


Angehängte Dateien:

Lesenswert?

Der Anhang hat mir damals sehr geholfen!

von Tobias G. (tobi1435)


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

von Uwe (Gast)


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

von Tobias G. (tobi1435)


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

von ... .. (docean) Benutzerseite


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-software.html#libs
die lib nimmt dir viel ab...eigentlich fast alles

von Tobias G. (tobi1435)



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

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.