Jump to content

LCD Cursor in Spalte 0


Recommended Posts

Hallo zusammen,

 

mit ist aufgefallen, dass die Positionierung des LCD Cursors am Zeilenanfang etwas trial&error erfordert. Um den Cursor am Anfang der Zeile zu positionieren muss man aktuell nicht in der Zeile davor etwas ausgeben, sondern am Ende einer ganze anderen Zeile, in etwa so:

        if (dest == 2)
            line = 0;
        else if (dest == 3)
            line = 1;
        else if (dest == 1)
            line = 2;
        else if (dest == 0)
            line = 3;

 

Ist das gewollt / bekannt?

Link zu diesem Kommentar
Share on other sites

Der Cursor soll laut Doku hinter dem zuletzt mit writeline ausgegebenen Zeichen stehen. Wenn ich nun an der letzten Spalte des LCD ein Zeichen ausgebe landet der Cursor weder am Anfang der Folgezeile noch am Anfang der aktuellen Zeile (was beides sinnvolles Verhalten wäre), sondern springt in eine ganz andere Zeile, abhängig von der aktuellen Zeile.

 

Für eine gezielte Positionierung auf Spalte 0 muss man daher genau wissen, welche Quellzeile zu einem Sprung in die gewünschte Zielzeile führt.

Link zu diesem Kommentar
Share on other sites

Ja, das ist ein bisschen verwirrend, können wir aber nichts gegen machen. Auf dem LCD sind zwei treiber für je zwei Zeilen. Dabei gehören die Zeilen 0 und 2 sowie 1 und 3 zu je einem Treiber.

 

D.h. er springt von Zeile 2 nach 0 (Treiber 1), von 0 aber nach 3 (von Treiber 1 nach Treiber 2). von 3 springt er nach 1 (Treiber 2) und von 1 wieder zurück nach 2 (von Treiber 2 nach Treiber 1).

 

Das sollten wir Dokumentieren, die Frage ist nur wie man das macht ohne totale Verwirrung zu stiften ;D.

Link zu diesem Kommentar
Share on other sites

Eine sinnvolle Zuordnung von Treiber zu Zeile ist nicht möglich?

Das ist im LCD fest verdrahtet, das ist keine softwareseitige Zuteilung oder sowas. Diese alphanumerischen LCDs sind aber alle so verdrahtet. Ich vermute das man damit theoretisch jeweils die erste und zweite sowie die dritte und vierte Zeile gleichzeitig schreiben kann (da sie je auf zwei Treiber verteilt sind).

 

Oder eine Firmware-seitige Korrektur des krummen Verhaltens?

Naja die Lösung wäre jeweils den letzten Buchstaben in der Zeile zu überschreiben, wo danach der Cursor dann an der "richtigen" Stelle steht.

 

Also wenn Buchstabe 20 in Zeile 2 geschrieben wird, würden wir danach nochmal Buchstabe 20 in Zeile 1 überschreiben, damit der Cursor danach in Zeile 3 steht. Ich hab es mir auf die TODO Liste geschrieben. Ich befürchte dafür müssten wir uns entweder den geschriebenen Text merken oder wieder auslesen, beides wird im Moment nicht getan und passt vermutlich nicht mehr auf das EEPROM. Da sind beim LCD Plugin nur noch ein paar Byte frei ???.

Link zu diesem Kommentar
Share on other sites

Kleine Anmerkung zu dem hier:

Ich befürchte dafür müssten wir uns entweder den geschriebenen Text merken oder wieder auslesen

Genau das mache ich aktuell Client-seitig: ich nutze das LCD mehrfach als "virtuelles" Display und halte daher eh immer den ganzen Inhalt aller Anzeigen im Client. Nur so konnte ich überhaupt den Cursor in Spalte 0 bekommen: das letzte Zeichen einer Zeile aus meinem Client-Puffer nochmal ausgeben.

 

Ich würde nicht zu viel Aufwand in der Firmware betreiben, nur um den Cursor-Sonderfall zu lösen. Eine Funktion in der LCD-API, die einem die "Quellzeile" liefert, wenn der Cursor in Spalte 0 der "Zielzeile" stehen soll wäre aus meiner Sicht ausreichend. Damit ist dann auch das Thema Doku erschlagen.

Link zu diesem Kommentar
Share on other sites

  • 3 weeks later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...