Umlaut auf LC-Display überschreiben

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo zusammen,

    Ich habe eine eigene header Datei geschrieben welche ein 2x16 Zeichen LC-Display per µC ansteuert. Der LCD Controller ist ein HD44780, der µC welchen ich verwende ein ATmega32.

    Folgendes:

    Ich kann die Zeichen aus dem Datenblatt 0x21 bis 0xDF ohne Probleme an jeder Stelle auf dem Display schreiben, überschreiben, und löschen.

    Mit z.B. den Umlauten, Griechischen Buchstaben oder dem Blocksymbol kann ich das nur dann, wenn diese Symbole nicht an erster Stelle der Zeile stehen.

    Ich bekomm diese Symbole also in das Display, kann sie aber nur dann überschreiben wenn sie NICHT an erster Stelle in der jeweiligen Zeile stehen.


    Das einzige das funktioniert ist der Befehl clear Display, welcher die komplette Anzeige löscht.

    Und genau das würde ich gerne vermeiden.

    Ein leerzeichen drüber zu schreiben geht leider auch nicht.

    Vielleicht hat jemand eine idee.

    Hier ist mal ein auszug aus meinem quellcode.

    Für hilfreiche Kritik was das Problem angeht bin ich sehr dankbar.

    Schönen Sonntag!

  • Moin Neiwirger,

    dein Codeauszug hift nicht wirklich, weil einfach Teile fehlen. Was macht die Funktion"isBfSet();" ?

    Ich kann die Zeichen aus dem Datenblatt

    Welches Datenblatt? Link wäre schön.

    Du kannst jedes Zeichen in die DDRAM-Adresse 0x00 schreiben, nur die Sonderzeichen nicht? Trifft das auch auf 0x40 zu?

    Sind die Zeichen aus dem Font des Displays oder hast du die selbst generiert?

    Was ist wenn du den Befehl Return home nutzt? Dann wird nur der Adresszähler des DDRAMs auf 0 gesetzt und nichts gelöscht.

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Hallo,

    danke für die Antwort.

    Hier der Link zu der Display Serie.

    https://www.lcd-module.de/pdf/doma/blueline-w.pdf

    Ich habe davon das Display 2x16 Zeichen EA W162B N3LW.

    Der Zeichensatz von dem ich sprach, ist hierin enthalten.

    isBfSet(); habe ich eingerichtet um das Busy Flag abzufragen.

    Du kannst jedes Zeichen in die DDRAM-Adresse 0x00 schreiben, nur die Sonderzeichen nicht? Trifft das auch auf 0x40 zu?

    Sind die Zeichen aus dem Font des Displays oder hast du die selbst generiert?

    Ich kann in die DDRAM-Adressen 0x00 und 0x40 jedes Zeichen schreiben, welches kleiner als 0xA0 (nach obigem Link) ist und nach belieben manipulieren wie z.B. Überschreiben.

    Die Zeichen ab 0xA1 kann ich in den zuvor genannten DDRAM-Adressen zwar schreiben, jedoch nur über einen kompletten Display Clear löschen.

    Return home hat mich leider auch nicht weiter gebracht.

    Grüße

  • Moin Neiwirger,

    ok, dann noch mal zur Klärung.

    Du kannst grundsätzlich an 0x00 und 0x40 alle 192 Zeichen schreiben, aber nicht, wenn größer 0xA0, überschreiben.

    D.H. ein Zeichen kleiner 0xA0 kannst du löschen bzw. überschreiben.

    Ist das so richtig?

    Du betreibst das Display im 8Bit-Modus?

    wie sieht die bei dir das Byte für "function set" aus?

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Hallo Bernd,

    wie erkläre ich dir das nun am besten...

    Ich habe meinen Fehler gefunden.

    Es scheint so, als ob ich das Busy Flag zum falschen Zeitpunkt abgefragt habe.

    Mit den entsprechenden delay Operationen hat das Programm ohne Probleme funktioniert.

    Des Weiteren ist mir aufgefallen, dass der beschriebene Fehler auch an anderen Stellen auf dem

    Display reproduzierbar ist. Immer dann, wenn ich den Cursor auf die gleiche Stelle des Displays

    gelegt habe, auf welchem auch das Zeichen mit >=0xA0 bereits hat.

    Beispiel:

    ü steht in Zeile 2, Spalte 5.

    Möchte ich nun ab Zeile 2, Spalte 5 überschreiben, werden die neuen Zeichen erst ab Spalte 6 angezeigt.

    Habe ich mit dem Beschreiben schon ab Spalte 4 angefangen, hat das Überschreiben anstandslos

    funktioniert.

    Ich bitte diesen Fauxpas zu verzeihen und bedanke mich sehr für die Hilfe!

    Grüße

    Jens

  • Moin Jens,

    Egal, Hauptsache der Fehler wurde gefunden.

    Danke für die Rückmeldung!

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!