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 to comment
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 to comment
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 to comment
Share on other sites

Okay, in voller ahnungslosigkeit:

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

Oder eine Firmware-seitige Korrektur des krummen Verhaltens?

 

Weil das ist ja schon Fehlverhalten, ihr könnt bestenfalls dokumentiertes Fehlverhalten daraus machen.

Link to comment
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 to comment
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 to comment
Share on other sites

  • 3 weeks later...

Mit LCD 20x4 Bricklet Plugin 2.0.3 ist das Problem jetzt behoben.

 

Der Cursor springt am Zeilenende jetzt in die jeweils nächste Zeile. Aus der letzten Zeile springt er dann wieder in die erste.

 

War nicht so schwierig zu fixen wie borg erst dachte :)

Link to comment
Share on other sites

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...