Darstellungsfehler im Textmodus in Sebastians Lib
Problem: Viel Text mit kleinem Zeichensatz darstellen
Hallo Sebastian und andere Displayprogrammierer
danke an alle hier im Forum, mit Eurer Hilfe habe ich auch mein Display
zum Laufen gebracht. Ich einen Atmega32 und Libs in C von Sebastian, die schön flott arbeiteten.
Folgendes fehlt noch zum letzten Glück: Ich möchte gerne viel Text
komprimiert auf dem GLCD ausgeben und einen 5x7 Zeichensatz verwenden.
Ich habe dazu je einen Lösungsansatz für den Textmodus und den
Grafikmodus, jeder natürlich jeder mit einem Problem, was sonst:
1) Textmodus + interner Zeichensatz, schön klein, spart Speicherplatz
Das funktioniert allerdings nur mir 20 Zeichen pro Zeile statt 26
möglichen und ist mir nicht dicht genug. Bei 26 Zeichen gibt es irgendwo
in der Mitte jeder Zeile Pixel die nicht angesprochen werden. Das
gleiche Problem wurde hier im Forum schon einmal mit Foto nachgefragt.
Man muss also die horizontal pitch und number of characters entsprechend
Datenblatt anpassen. Die Erklärung ist sicher, dass mit einer Hp von 8
und einer Pixelanzahl von 160 pro Zeile eben nur 20 Zeichen glatt
aufgehen. Sonst müsste man den LC7981 irgendwie überlisten, wie weiß ich
leider nicht.
So funktioniert es im Textmodus:
lcd_write_command(0x01,0x77); //Hp=8 stellt die pitch-Werte ein
lcd_write_command(0x02,20 - 1); //Anzahl Zeichen pro Zeile (minus 1)
Frage 1: hat jemand einen Tip, wie ich auch 26 Zeichen pro Zeile im
Textmodus fehlerfrei darstellen kann, 160/7 =26,6 das geht nicht auf!!
Textmodus so einstellen, aber das gibt besagte Fehler:
lcd_write_command(0x01,0x75); //Hp=6
lcd_write_command(0x02,26 - 1); //Anzahl Zeichen pro Zeile (minus 1)
2) Grafikmodus + selbst erstellter Zeichensatz 5x7
Das würde ja funktionieren, aber ich habe keinen freien
Zeichensatzgenerator und die verfügbaren Zeichensätze sind anders
kodiert als ich es brauche, nämlich SB last!!
Frage 2: Kann jemand einen Zeichensatzgenerator oder einen Zeichensatz
empfehlen?
Gruß Tom_W
Liste der Anhänge anzeigen (Anzahl: 4)
Fotos zu Zeichensatzproblemen
Hallo Sebastian,
herzlichen Danke für die schnelle Antwort. Habe mich heute einige Stunden mit den Problemen herumgeschlagen und ein paar Fotos gemacht, die ich hoffentlich gleich anhängen kann. Habe mich quasi empirisch dem Problem etwas genähert und ein paar Ausgaben mit unterschiedlichen Zeichensätzen gemacht und auch den Fehler im Textmodus fotografiert.
Foto 3: Bei deinem original verwendeten Zeichensatz gibt es leider auch Darstellungsfehler z.B. bei "h" und "r" - wie übrignes bei 4x6 -siehe unten- auch.
lcd_plot_text_P(0,30,PSTR("Feler bei"),8,8,font_8x8);
lcd_plot_text_P(20,40,PSTR("hhhhhrrrrr"),8,8,font_ 8x8);
Also da passt entweder der Zeichensatz nicht zur Ausgaberoutine oder die Ausgaberoutine verdreht etwas?
Foto 1 und 2 stellen zum Testen eine Tabelle dar mit dem Text "E3". Damit teste ich verschiedene x,y-Werte für den Textausgabebefehl im Grafikmodus:
lcd_plot_text_P(test*20-80,lauf*10-30,PSTR("E3"),x,y,font_5x8);
Die erste Zeile beginnt bei y=4, erste Spalte bei x=4, dann immer durchlaufend bis 10. Man kann erkennen bei welchen Werten der Text korekt dargestellt wird.
Foto 1: Der Zeichensatz 5x8 lässt sich mit 8,8 richtig darstellen.
Foto 2: Der Zeichensatz 4x6 stellt zwar "E3" zwei mal richtig dar, hat aber immer Fehler z.b. bei "r" und "h" wie bei deinem 8x8 :-(((
Selbst wen man endlich die Zeichen richtig darstellen kann, sind 8 Pixel Breite für einen 5 Pixel breiten Zeichensatz zu viel des Guten. Leider wird bei diesen winzigen Zeichensätzen immer Platz verschwendet und die Zeichen nicht so eng zusammengerückt wie es möglich wäre. Der 4x6 Zeichensatz ist aufgrund der Darstellungsfehler momentan unbrauchbar für mich - oder ich muss vielleicht die Buchstaben einzeln editieren ;-| Ich möchte gerne viel infos auf wenig Raum darstellen, Ziel ist nicht
erreicht.
Letztes Foto - Fehler im Textmodus:
Wie beschrieben, hier Fehler in der Mitte des LCD, Pixel werden nicht angesprochen.
Ich wollte zu allen aderen Problemen auch fragen, was macht eigentlich "lcd_write_text_P(const char *txt)"?
Danke schin einmal für deine Hilfe:-)
Gruß Tom.