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
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
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.