Frohe Ostern! Ich nutze einen AT89S8252 mit einen 2x16 LCD-Display von Reichelt (HD44780 kompatibel). Das ganze ist eine Art Schaltuhr. So kann ich zb. mehrere Anzeigemodi umschalten: Modus 1: 1. Zeile "Uhrzeit 17:23:04" 2. Zeile " Mo, 17.04.2006 " Modus 2: 1. Zeile "Uhrzeit stellen:" 2. Zeile "17:23:04 " Modus 3: 1. Zeile "Datum stellen: " 2. Zeile "Mo, 17.04.2006 " usw... Die erste Zeile beginnt also immer mit Text, danach folgen Zahlenwerte, die im RAM des Controllers liegen. Problem ist nun, dass sich beim Moduswechsel der Text in der ersten Zeile ab und zu nach links oder rechts verschiebt. Die Zahlenwerte und alle anderen Zeichen sind jedoch immer an der richtigen Stelle. Jeder Modus beginnt mit dem Löschen des gesamten displays. Ich habe schon versucht, vor der Textausgabe den Cursor nochmal auf Position 00 zu schieben, aber das nützt auch nichts. Als Anhang die Display-Ansteuerung, die allerdings nicht von mir stammt. Teile, die ich nicht brauche, habe ich auskommentiert. Die Ausgabe eines Textes sieht dann im Programm so aus: mov dptr,#Textuhr ;Adresse des DB in DPTR lcall textaus ;Unterprogramm "Text ausgeben" aufrufen
Hi! Habe jetzt dein Progr.nicht studiert, aber das Löschen deines Displ. dauert recht lange im Gegensatz zum Schreiben. Wenn dein nächter Zugriff zu schnell erfolgt entsteht halt sowas. Habe Das Thema auch gerade hinter mir. Die 2.Zeile stimmt übrigens deshalb, weil du bestimmt eine neue Schreibadresse sendest. Viel Erfolg, Uwe
Ich lösche das LCD meist durch Positionieren des Schreibcursors und Überschreiben mit neuem Text bzw. mit Leerzeichen. Das geht schneller als das Clear-Kommando. Clear und Home meide ich. ...
Vielen Dank! Zuerst habe ich es mit einem delay nach jedem lösch-befehl versucht, das zeigte aber keinen Erfolg. Also überschreibe ich jetzt zuerst immer alles mit Leerzeichen. Das funzt astrein! Das einzige, was mich jetzt noch wundert: Nach Programmstart sieht man förmlich, wie das Display Zeichen für Zeichen schreibt. Sobald ich aber die Uhrzeit stelle (Modus2) läuft das Display wieder "unsichtbar" schnell. Also nicht allein durch das Modus-wechseln, sondern durch das Uhr stellen an sich... Aber das ist wohl eine Sache, bei der ich mir nur selbst helfen kann. (Man gut, dass ich morgen noch Urlaub habe ;)) Also vielen Dank nochmal!
Moin @Robert Mir ist noch Aufgefallen das Du dein PSW bei Lcall aufrufen nicht sicherst. Dies könnte für ungewöhnliche Seiteneffekte sorgen. Ist ein böser Fehler vor allem wenn Du mit Registern Arbeitest zudem wird das PSW verändert bei Unterprogrammaufrufe und kann Ärgerverusachen.
@Robert Du solltest bei LCDbefehl das wbusy auch nach dem senden des High-Nibbel abfragen da ja, das Display etwas Zeit brauch um neue Daten zu übernehmen und zwar jedesmal wenn Zeichen oder Befehle gesendet werden.
Nabend! Bei jedem LCALL das PSW sichern? uiuiui... ich hab da bestimmt an die 100 von, auch sehr verschachtelt. Bisher läuft ja alles... das mit dem lcdbefehl guck ich mir nochmal an. der programmteil stammt wie gesagt nicht von mir. fange erst langsam an, das ganze zu verstehen...
> Du solltest bei LCDbefehl das wbusy auch nach dem senden des > High-Nibbel abfragen da ja, das Display etwas Zeit brauch um neue > Daten > zu übernehmen und zwar jedesmal wenn Zeichen oder Befehle gesendet > werden. Also davon ist mir nichts bekannt, meine 4-Bit-LCD-Routinen (auf AVR) laufen ohne Wartezeit oder Busywait zwischen den Nibbles. Bei HD44780-Kompatiblen dauert lediglich DISPLAY-CLEAR und RETURN-HOME etwas länger, alle anderen Zugriffe gehen schnell. Um Wartezeiten (Busywait) zu vermeiden, erfolgt bei mir in letzter Zeit die Ausgabe eines Zeichens aus dem Ringbuffer (256 Byte) im Interrupt etwa alle 1ms. Die Printroutinen schreiben dann nur in den Ringbuffer, was ja keine Wartezeit kostet. ...
Hallo Hannes! Bei meinem HD44780 Kompatiblen frage ich (Busywait) nicht ab sondern mache das Timing selber ohne Interrupt. Ich habe bei mir festgestellt, das nachdem Enable erzeugt wurde, es besser ist eine kleine weile zuwarten bevor neue Daten am LCD-Display angelegt werden. Nichts desto Trotz soll jedermachen wie er es für richtig hält Hauptsache es funzt! :)
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.