Ein Servus an alle! Wieder einmal schreibe ich euch, weil ich mein LCD nicht zum funzen bringe! Langsam wird's echt mühsam - für euch wahrscheinlich auch! Dennoch hoffe ich, ihr helft mir bei meinen Programmierproblemen. Folgende Probleme habe ich: - ä ö und ü werden als japanisches Zeichen (0xFC) ausgegeben - das letzte Zeichen des Strins wird 2mal ausgegeben z.B möchte ich "Servus" rausschreiben --> es erscheint "Servuss" - Die Anzeige ändert sich ständig bis auf die letzten zwei Zeichen. bei "Servus" also: "Servu <-- ändern sich immer, ss" --> bleiben Im Anhang findet ihr die lcd.c und die main.c! Würde mich über eure Hilfe freuen! Servus Jonny
1. Bei Ausgabe eines kürzeren Textes, als vorher auf dem Display stand, muß man mit Leerzeichen auffüllen, damit alle Buchstaben überschrieben werden. Vorher Löschen sieht unschön aus, da dann das Display sichtbar flackert. 2. Du must in der Zeichentabelle Deines Displays nachsehen, ob Umlaute überhaupt drauf sind und welchen Code sie haben. Wenn nicht, dann mußt Du sie in den 8 wählbaren Speicherplätzen selber definieren. Peter
@Peter 1. Ich verstehe was du meinst, allerdings ist z.B bei "Hallo" das selbe Problem: "Halloo" 2. In der Zeichentabelle sind die Umlaute vorhanden @Andreas Das habe ich mir auch schon überlegt. Gibt es nicht so etwas wie END OF TEXT, damit die Funktion erkennt wann der String fertig ist? Servus Jonny
das Problem wird genau da liegen, wo Peter es vermutet. Wenn die Strings nicht gleiche Länge haben, bleibt der alte Rest stehen. Lösungen: alle Strings, die auf eine bestimmte Position geschrieben werden, auf gleiche Länge bringen, die kürzeren also mit 0x20 auffüllen. Alternativ kannst du nach dem Schreiben eine Funktion lcd_write_spaces (string_length - string_length_max) aufrufen, die eine übergebene Zahl an Leerzeichen ausgibt und damit alte Zeichen überschreibt. Das Problem der Umlaute liegt am nicht übereinstimmenden Zeichensatz. Dazu gibts 2 Lösungsmöglichkeiten: Entweder im Quelltext gleich das passende LCD-Zeichen angeben, sieht komisch aus, funktioniert aber und ist auch am schnellsten und braucht am wenigsten Speicherplatz. "Daten gelþscht" Die abweichenden Zeichen kannst du mit "Alt und 0xxx" eingeben, xxx steht für den Dezimalcode des LCD-Zeichens, beim ö ist das 254. Alternativ kannst du in der lcd_putchar jedes auszugegebende Zeichen auf Sonderzeichen überprüfen und ggf. ersetzen.
Hi! Ich glaube, der Fehler ist hier: void LCDOuts(char* str) // Ausgabe eines Strings { while (*str != 0) { LCDOutc(*str++); } LCDClock(); // <------------ HIER! } LCDClock wird doch schon in der LCDOutc gemacht. Das heißt, beim letzten Zeichen wird zweimal eine Clock gegeben -> Das Zeichen wird zweimal ausgegeben. Also einfach mal die Zeile entfernen und sehen, obs klappt. Gruß, Hanno
Du gibst am Ende der LCDOuts-Funktion nochmal einen Clock-Impuls. Dadurch werden die letzten Daten nochmal ans LCD gesendet. Also: den LCDClock in der LCDouts einfach weglassen. Markus_8051
Mahlzeit @alle! Vielen Dank für eure Antworten. Ihr hattet alle irgendwie recht - so viel Fehler wie ich programmiert hatte, da konnte das LCD nicht funzen! Aber jetzt funktionierts!!!!!!!! Meine Fehler waren: - String nicht mit "\0" abgeschlossen - DDRAM nicht gesetzt - ... und noch ein paar so Kleinigkeiten, die eigentlich nicht sein müssten!! Noch einmal vielen Dank für eure Hilfe! Servus Jonny
Hm, wenn du schon meinen Code benutzt, dann doch ruhig richtig. ;-) Ich dachte eigentlich, dass ich die Sachen im Tutorial ganz gut erklärt hätte ... Und guck mal auf mathar.com, die LCDOutc() habe ich schon vor einiger Zeit überarbeitet, damit sie auch Umlaute ausgeben kann. (Direktlink: http://mathar.com/lcd.c). Du hast noch eine von meinen alten Versionen, die bei Umlauten nur Müll ausgeben.
Hallo Sebastian! Bin zwar täglich auf deiner Seite, aber den neuen Code für die LCDOutc() hab ich nicht entdeckt! Ich war gerade dabei eigene Zeichen für die Umlaute zu erstellen. Deine Meldung kam daher ganau richtig! Vielen Dank für deinen Hinweis! Servus Jonny
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.