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
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.
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
Öö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.
>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?
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!