Hallo! Ich hab einen LCD Display LCD161A von Reichelt mit 2x8 Zeichen die in einer Zeile angeordnet sind. Der Displayschift ist aktivirt und die Zeichen sollen alle von rechts nach links über den Display wandern. Am Anfang geht alles gut. Aber nach 14 Zeichen kommen die neuen Zeichen nicht mehr auf dem Display an. Hat jemand ne Idee woran das liegen könnte. Sind die Adressen des DD-RAM durcheinander? gruß Andreas
Andreas wrote:
> Hat jemand ne Idee woran das liegen könnte.
Naja, ich würde mal sagen an deiner Software...
Was meinst du mit Durcheinander ?
Bist du sicher, dass der 15. Wert auch richtig geschrieben wird ? Wenn irgendwo Probleme auftreten würden, dann normalerweise beim 8. Wert (da Übergang 1. -> 2. Zeile), oder beim 40. Zeichen (da der 44780 2x40 Bytes Speicher hat). Alles andere würde ich auf die Software schieben.
Na ja is ja bissel komplizierter. Springe erst zur hinterstern Stelle und schreibe dort einen Wert rein. Dann Springe ich zur 8. Stelle und schreibe dort einen Wert rein. Der Displayschift ist immer abwechselt an und aus damit es immer blos eine Stelle Weiter rückt. Dieses Wird unendlich wiederholt und die Adresse zu der ich Sprinnge um eins erhöht. Da dran ist auch bei der 14. Stelle nichts anders drann aber ab da kommen keine neuen Zeichen mehr hinten an.
Wenn es so kompliziert ist, kannst du dann ausschließen, dass du wirklich keinen Softwarefehler gemacht hast ? Stackoverflow usw. ?
nein kann nichts falsch sein ist ein und diselbe schleife die immerwieder wiederholt wird. Ich denke das die Adressen der auf dem Display nicht mehr Stimmen. Also das nach b'10111110' nicht b'10111111' kommt sonder irgeneine andere Adresse.
>nein kann nichts falsch sein
Wenn du meinst. Ich schliesse mich Benedikt an.
Damit stehts 2:1 ;)
>nein kann nichts falsch sein Ööhmmm, und warum funktioniert es dann nicht? Einfache Antwort: Wenn nichts falsch sein kann, gibt es auch keine Handlungsbedarf. Also alles so lassen wie es ist. >>Damit stehts 2:1 ;) Nein, 3:1 Jochen Müller
Dake für eure antworten die haben mich echt weitergebracht. Versteht ihr überhaubt das Problem. Die Sofware geht bis zur 14. Stelle ohne Probleme und bei der 15. macht sie das selbe und es funktioniert trotzdem nicht. Bitte nur noch sinnvolle Ratschläge. Danke.
Andreas wrote:
> Versteht ihr überhaubt das Problem.
Ich gebe zu, dass die Lösungsversuche etwas durch die Blume
waren.
Daher jetzt Klartext:
Poste endlich mal dein Programm!
Bei der Fehlersuche fängt man immer beim Naheliegendsten an.
Auch wenn ein Problem im LCD-Prozessor nicht ausgeschlossen werden
kann, so ist das Naheliegendste immer noch, dass du im Programm
einen Fehler hast. Erst wenn das ausgeschlossen werden kann,
macht es Sinn nach anderen Fehlerursachen zu forschen.
Ausserdem ist die Beschreibung dessen, was du da mit dem LCD
veranstaltest, zumindest für mich, etwas zu dürftig. Ich kann
mir noch nicht wirklich vorstellen was du da machst, bzw. wie
das Fehlerbild eigentlich aussieht.
>>Dake für eure antworten die haben mich echt weitergebracht. >>Versteht ihr überhaubt das Problem. Die Sofware geht bis zur 14. Stelle >>ohne Probleme und bei der 15. macht sie das selbe und es funktioniert >>trotzdem nicht. >>Bitte nur noch sinnvolle Ratschläge. Danke. NUN REISS DICH BITTE MAL ZUSAMMEN, OK? Sinnvolle Antworten hast Du GENUG bekommen: 1) Das Display macht KEINEN Adress-Umbruch mitten in der Zeile. Punkt. 2) Also liegt es an Deiner Software oder am Timing. Punkt. 3) Es gibt KEINE andere Möglichkeit. Punkt. Wann zu wirst DU endlich etwas sinnvolles tun, und die Software vorzeigen. Alles andere führt zu nichts. Jochen Müller
Ich verwende einen P16F873 an 4MHz Den Display steuer ich über 4-bit modus an Die Pinbelegung ist folgende: ;RB0 E ;RB1 ;RB2 RS ;RB3 R/W ;RB4 DB4 ;RB5 DB5 ;RB6 DB6 ;RB7 DB7 Anbei noch das ganze Programm wem das lieber ist. Vielen Dank schonmal für die vielen bemühungen.
Andreas, Ich konnte aus Zeitgründen nur kurz über den Quelltext fliegen, vielleicht später nochmal in Ruhe. Falls es ein 44780 Controller auf dem Display ist, dann hast Du aber meiner überschlägigen Meinung nach den Display-Shift nicht aktiviert. Dazu müsste im CommandMode auf jeden Fall BIT-4 irgendwo gesetzt werden, das sehe ich im Quelltext auf den ersten Blick nicht nicht. Du hast lediglich die Schreibrichtung von rechts nach links geschaltet, mit dem DisplayShift hat das aber nichts zu tun. Aber selbst wenn, würde das für eine Art Laufschrift, oder was das werden soll nicht reichen, denn der Displayspeicher ist nicht als Ringpuffer gebaut. Du kannst da also die Displayposition nicht beliebig oft shiften, irgendwann musst das das ganze mal auf 0 zurücksetzen. Jochen Müller
Also der Displayshif ist an. Für die ersten 14 Zeichen fuktioniert ja auch alle perfekt. Das der LCD keinen Rigpuffer hat ist mir bekannt. Meine frage ist ja auch wann und wo ich wieder an einer anderen stelle anfangen muss. Wie gesagt ab dem 14. Zeichen kommen hinten keine Neuen mehr an.
Probiere mal 2 Dinge: 1) wenn Du ohne DisplayShift ganz normal auf das Display schreibst, gehen dann alle Stellen, arbeitet im Display alles perfekt? 2) verlangsame das Timinig, vielleicht ist das so hart an der Grenze, dass das Display beim Shiften zwischendurch mehr Zeit benötigt und dadurch alles durcheinader kommt. Und zeige mir zur Kontrolle im Quellcode mal die Stellen, wo Du das DisplayShift aktivierst. Welchen Controller hat das Display? Jochen Müller
Im Katalog steht zum Controller: LSI KS0070B oder komp. Die 16 Zeichen kommen einwandfrei wenn ich den Display ausschalte. Mit dem Displayschift ist ein Fehler in meinem kommentar im Programm gewesen. Hat also keine auswirkung auf das Programm. Wird in der Displayrotine erst aus und dann wieder angesaltet. Hab nochmal alles berichtigt.
Die warezeiten hab ich auch verlängert bringt aber nichts. Ich habe jetzt 3ms bei Steuerbefehlen und 1ms bei Daten. Gefordert sin 1,6ms und 50µs.
>Dazu müsste im CommandMode auf jeden Fall BIT-4 irgendwo gesetzt werden, >das sehe ich im Quelltext auf den ersten Blick nicht nicht. Sehe ich auch so. Dein Code: movlw b'00000110' ;Display not shift!! : movlw b'00000111' ;Display shift an !! In (einem KS0070B) Datenblatt sehe ich aber: ------ 5) Cursor or Display Shift RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 0 1 S/C R/L × × : Table 4. Shift Patterns According to S/C and R/L bits S/C R/L Operation 0 0 Shift cursor to the left, AC is decreased by 1 0 1 Shift cursor to the right, AC is increased by 1 1 0 Shift all the disp. to the left, cursor moves according to the disp. 1 1 Shift all the disp. to the right, cursor moves according to the disp. ------- DB4 ist immer '1' um Cursor- oder Display-Shift zu schalten.
Ja das ist der Befehl und den Display unm eine Stelle zu verschieben. Ich schalte aber den Automatischen Displayschift immer an und aus. Dafür müste mein Befehl Stimmen. Oder kann ich das nicht so machen?
Wenn ich mir das Datenblatt ansehe, RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 0 1 S/C R/L × × ^ ^ ^ ^ ^ ^ ^ ^ müsste das Shift Ein-/Ausschalten aber so aussehen: ; DB 76543210 movlw b'00010000' ;Display shift off ^^^^^^^^ ; DB 76543210 movlw b'00011000' ;Display shift left ^^^^^^^^ ; DB 76543210 movlw b'00011100' ;Display shift right ^^^^^^^^
Naja, ICH persönlich habe es aufgegebe zu verstehen, was der OP will. Das wird mir echt zu mysteriös. BEISPIELE: >>Ich schalte aber den Automatischen Displayschift immer an und aus. >>Also der Displayshif ist an. Was denn nun? An, Aus, oder an-aus? >>Die 16 Zeichen kommen einwandfrei wenn ich den Display ausschalte. Also wenn das Display AUS ist, zeigt es die Zeichen an??????????????????? HÄ? Ausserdem ist nach wie vor kein DisplayShift im Quellcode aktiviert, auch nicht für kurze Zeit. Bit4 ist IMMER Null. Jochen Müller
>>>Ich schalte aber den Automatischen Displayshift immer an und aus. >>>Also der Displayshif ist an. > Was denn nun? An, Aus, oder an-aus? Der displayshift ist abwechselt an und aus weil ich an zwei stellen einen Buchstaben reinschreiben muss und der Display dabei nur um eine Stelle weiterrücken darf. >>>Die 16 Zeichen kommen einwandfrei wenn ich den Display ausschalte. > Also wenn das Display AUS ist, zeigt es die Zeichen > an??????????????????? > HÄ? sorry ich meine wenn der Displayshift aus ist. > Ausserdem ist nach wie vor kein DisplayShift im Quellcode aktiviert, > auch nicht für kurze Zeit. Bit4 ist IMMER Null. Dieser befehl von dem ihr die ganze zeit reded ist das einmalige verschieben des Displays. In meinem Datenblatt steht: shift: S/C 0 curser move 1 Display shift R/L 0 left 1 right Damit wird der Display einmalig verschoben es gibt aber noch einen anderen befehl: Entry mode set: RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 0 0 0 1 I/D SH I/D 0 decrease 1 increase SH 0 Display is not schift 1 Display is shift Der Display wandert also automatisch und *diesen Displayschift verwende ich in Meinem Programm!*
Ok, jetzt wird es klarer. Hast Du es mal mit dem manuellen Shift probiert, also bei jedem Buchstaben gezielt manuell zu shiften? Tritt das Problem dann an der selben Stelle auf? Jochen Müller
Also ich hab das jetzt mit dem manuellen schift probiert. Is aber auch nicht besser. Auch hir kommen dei ersten Zeichen ohne Probleme. Das 16. erschein aber dann nicht mehr auf dem Display. Wo kan den da noch was falsch sein?
also ich hab jetzt auch nicht ganz verstanden was du willst, aber klingt irgendwie nach laufschrift oder so. auf jeden fall ist es bei den meisten displays so, dass du z.b zwar nur 16 zeichen auf einer zeile anzeigen kannst, der puffer aber z.b bis 40 geht. wenn du nun also rotierst und 16 zeichen da stehen, dann schiebst du die restlichen 24 "leerzeichen" auch wieder vorne rein
Ich habe mir jetzt nicht den ganzen Thread durchgelese, evtl. wurde darauf schon hingewiesen (Datenblatt Seite 7 ganz unten): 1. Zeile Adresse 0x00..0x07 2. Zeile Adresse 0x40..0x47 Ich habe so ein 4x20-Zeichen-Teil von Displaytec, da fängt die erste Zeile bei 0x80 an, die zweite bei 0xc0. Ich denke mal, dass es an sowas liegen muss.
>Also ich hab das jetzt mit dem manuellen schift probiert. Is aber auch >nicht besser. Auch hir kommen dei ersten Zeichen ohne Probleme. Das 16. >erschein aber dann nicht mehr auf dem Display. >Wo kan den da noch was falsch sein? So wie ich das Datenblatt verstehe, hat das Display (der KS0070B) pro Zeile intern Platz für 24 Byte: Zeile 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D OE OF 10 11 12 13 14 15 16 17 Zeile 2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 Mein Gedanke: Wenn Du ein 2x8 Display hast und in der Zeile 1 mit Display-Shift (left) an die rechteste Position (Pos.8/0x07) schreibst, bekommt die Position 8 anschliessend eine höhere Adresse(->0x08). Wenn du das 16 mal machst, hat die Pos. 8 des Displays die Adresse 0x17. Weiter kann man eben nicht schieben.
So Ich hab endlich den Fehler Gefunden. Ich hatte eine Fehhler in der Anfangsadresse. Ich habe das funktionirende listing noch mal mit angehängt fals nochmal jemand sowas braucht. Danke nochmal für die vielen Antworten! Gruß Aschi!
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.