remotecontrol Geschrieben March 31, 2013 at 14:08 Share Geschrieben March 31, 2013 at 14:08 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? Zitieren Link zu diesem Kommentar Share on other sites More sharing options...
AuronX Geschrieben March 31, 2013 at 21:47 Share Geschrieben March 31, 2013 at 21:47 Ich konnte bisher nur den WriteLine-Aufruf in der API entdecken... was meinst du genau? Dass du bei WriteLine(0, 0, "foo") nicht in Zeile 1 ganz vorne landest? Zitieren Link zu diesem Kommentar Share on other sites More sharing options...
remotecontrol Geschrieben April 1, 2013 at 08:10 Autor Share Geschrieben April 1, 2013 at 08:10 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. Zitieren Link zu diesem Kommentar Share on other sites More sharing options...
AuronX Geschrieben April 1, 2013 at 08:29 Share Geschrieben April 1, 2013 at 08:29 Ah Danke, habe das Cursor-Feature vollkommen übersehen. Ich denke nicht, dass es gewollt ist. Da das Problem meiner Erinnerung nach bisher nicht im FOrum erwähnt wurde tippe ich auf nicht bekannt Frohe Ostern! Zitieren Link zu diesem Kommentar Share on other sites More sharing options...
borg Geschrieben April 2, 2013 at 12:21 Share Geschrieben April 2, 2013 at 12:21 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 . Zitieren Link zu diesem Kommentar Share on other sites More sharing options...
AuronX Geschrieben April 2, 2013 at 18:11 Share Geschrieben April 2, 2013 at 18:11 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. Zitieren Link zu diesem Kommentar Share on other sites More sharing options...
borg Geschrieben April 2, 2013 at 20:18 Share Geschrieben April 2, 2013 at 20:18 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 . Zitieren Link zu diesem Kommentar Share on other sites More sharing options...
AuronX Geschrieben April 2, 2013 at 20:43 Share Geschrieben April 2, 2013 at 20:43 Das wäre wirklich schade. Aber danke fürs aufschreiben Zitieren Link zu diesem Kommentar Share on other sites More sharing options...
remotecontrol Geschrieben April 3, 2013 at 06:14 Autor Share Geschrieben April 3, 2013 at 06:14 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. Zitieren Link zu diesem Kommentar Share on other sites More sharing options...
photron Geschrieben April 23, 2013 at 09:42 Share Geschrieben April 23, 2013 at 09:42 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 Zitieren Link zu diesem Kommentar Share on other sites More sharing options...
remotecontrol Geschrieben April 25, 2013 at 18:03 Autor Share Geschrieben April 25, 2013 at 18:03 OK, vielen Dank. Jetzt muss ich dann mal meinen Code anpassen... Aber anderen wird es sicher helfen, da das Verhalten eingängiger ist. Zitieren Link zu diesem Kommentar Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.