IPS-Nano-Terminal

Hallo Andreas,

ich sehe nicht ganz den Zusammenhang zwischen Deinem Problem und dem Zitat von Bladerunner.

Bitte etwas ausführlicher, nach Möglichkeit mit dem von Dir verwendeten PHP-Code.

Gruß
HJH

Hallo HJH

der Bezug zu bladerunner´s Beitrag war, dass er das gleiche Display (EA DIP204) ohne Fehler verwendet. Bei mir jedoch die Ausgabe etwas verdreht ist.

Vorab schon mal, es wird die zweite- und dritte Zeile vertauscht und zusätzlich die nun aktuelle zweite- und vierte Zeile um 8 Zeichen nach links verschoben ausgegeben. Als Script habe ich das Beispiel auch getestet, gleiches Verhalten. Das „Beispiel“ und „Function“ Script hat Stand vom 18.07.07.

Die Ausgabe ist wie mit folgendem Muster:

  1. Zeile:Text der 1. Zeile
  2. Zeile: Text der 3.Zeile
  3. Zeile:Text der 2.Zeile
  4. Zeile: Text der 4. Zeile

Kannst Du damit schon was anfangen? Mehr Details heute Abend.

Ciao
Andreas

Hallo Andreas,

es deutet alles darauf hin, dass Du den falschen Controller eingetragen hast.

Im Datenblatt steht unübersehbar: KS0073

Ich vermute das ist der Grund für die Vertauschung der Zeilen.

Gruß
HJH

Hallo HJH

als Anlage mein Initialisierungsscript, dass Testscript und ein Bild der Ausgabe über das Display.
Die Einstellungen stehen auf „KS0073“.

Hast Du dazu eine Idee zur Ursache?

Grüße
Andreas


<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : Initialisierung_DIL_Display4x20.ips.php
Trigger  :
Interval :
*/

//Initialisierung DIL-Display 4x20

$InstanceID = 24332;
$ControllerType = "KS0073";
$Zeilen = 4;
$Spalten = 20;

$includeFile =  IPS_GetScriptFile("LCD_Functions");
require_once "LCD_Functions.ips.php";

$lcd = new OneWireLCD($InstanceID, $ControllerType, $Zeilen, $Spalten);
//$lcd = new OneWireLCD($id, $ControllerType, $Zeilen, $Spalten);

$lcd->SendLCDInit();

// Zeichen bergeben
$degree = "\x06\x09\x09\x06\x00\x00\x00\x00"; // Bit-Definitionen fr das Grad-Zeichen
$lcd->SendLCDCharDef(0, $degree);             // abspeichern an Speicherposition 0,
                                              // damit bekommt das Zeichen den ASCII-Code 0 (null)

$text0 = "HomeControl |DIL-Display| 4x20 | gestartet";
   echo "Text 0:  $text0
"; //Ausgabe Text 0
$lcd->SendLCDScreen($text0);
   echo "Display 4x20 Initialisiert 
"; //Ausgabe Text

//Beleuchtung des 4x20 Displays ausschalten
TMEX_F05_TogglePin(54512);

?>
<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : LCD_Test.ips.php
Trigger  :
Interval :
*/

$InstanceID = 24332;
$ControllerType = "KS0073";
$Zeilen = 4;
$Spalten = 20;


$includeFile =  IPS_GetScriptFile("LCD_Functions");
require_once "LCD_Functions.ips.php";

$lcd = new OneWireLCD($InstanceID, $ControllerType, $Zeilen, $Spalten);
//$lcd = new OneWireLCD($id, $ControllerType, $Zeilen, $Spalten);

$lcd->SendLCDInit();

$t1 = "Zeile 1        ";
$t2 = "Zeile 2        ";
$t3 = "Zeile 3        ";
$t4 = "Zeile 4        ";
$text = $t1."|".$t2."|".$t3."|".$t4;
// | ist der Trenner 1. und 2. Zeile

$lcd->SendLCDScreen($text);

echo "send test text";
?>

Hallo Andreas,

laut Datenblatt von Electronic Assembly benutzt das EA DIP204-4 den KS0073 Controller.
Was die Ansteuerung durch das Skript angeht, kann ich keine gravierenden Fehler erkennen, wenngleich es ein paar Ungereimtheiten enthält.
Die Zeilen sollten damit aber trotzdem korrekt ausgegeben werden.

Die Anordnung der Zeilen am Display lässt vermuten, dass es doch nicht den KS0073 sondern einen Standard Controller verwendet. Wie sieht denn der Output Deines Initialisierungsskripts aus?

Ansonsten versuch es doch einfach mal mit dem Standard Controller.

Gruß
HJH

Hallo HJH

danke für die schnelle Antwort.
Die Ausgabe meines Init. Scrips schaut vergleichbar mit dem Testscript aus. Ich hab den gleichen Zeilenversatz und auch das Vertauschen der Zeile zwei und drei.
Soll ich ein Bild machen?

Die Umstellung auf „Standart“ hat keine Auswirkung gezeigt.
Mir ist aber nun aufgefallen, dass die letzten Zeichen der ersten Zeile in den ersten 8 Stellen der zeiten Zeile wiederholt werden. Das gleiche passiert in der 4. Zeile mit den letzten 8 Zeichen der 3. Zeile. Ist sehr Eigenartig, oder?

Him, was könnte ich aus Deiner Sicht an meinen Scripts verbessern? :confused:Sozusagen als Versuch?
Können Laufzeiten über die Datenleitungen solche Effekte zeigen?

Ciao
Andreas

Hallo HJH

Hab mal das Sript geändert und das entsprechende Bild dazu.

Grüße
Andreas

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : LCD_Test.ips.php
Trigger  :
Interval :
*/

$InstanceID = 24332;
$ControllerType = "Standart";
$Zeilen = 4;
$Spalten = 20;


$includeFile =  IPS_GetScriptFile("LCD_Functions");
require_once "LCD_Functions.ips.php";

$lcd = new OneWireLCD($InstanceID, $ControllerType, $Zeilen, $Spalten);
//$lcd = new OneWireLCD($id, $ControllerType, $Zeilen, $Spalten);

$lcd->SendLCDInit();

$t1 = "Zeile-12345678901234";
$t2 = "Zeile-23456789012345";
$t3 = "Zeile-34567890123456";
$t4 = "Zeile-45678901234567";
$text = $t1."|".$t2."|".$t3."|".$t4;
// | ist der Trenner 1. und 2. Zeile

$lcd->SendLCDScreen($text);

echo "send test text";
?>

Hallo Andreas,

es sieht so aus, als ob immer der Standard Controller verwendet wird. Die Zeilenadressierung sieht ganz danach aus.

Übrigens: „Standard“ schreibt man hinten mit „d“.
Bei einem falsch geschriebenen oder unbekannten Controller-Typ wird automatisch der Standard Controller verwendet.

Vielleicht hast Du bei „KS0073“ auch einen Schreibfehler gemacht. Hier müssen zwei Nullen stehen, keine „O“ (Buchstaben).
Ich meine aber, dass er richtig geschrieben ist.

Ich will Dich jetzt nicht mit (hier unwichtigen) formalen Dingen zusätzlich verunsichern. Die „Ungereimtheiten“ können wir später klären. An denen liegt es bestimmt nicht.

Um ganz sicher zu gehen, solltest Du noch einmal das Skript „LCD_Functions“ herunterladen.

Gruß
HJH

Hallo HJH,

ja, es stimmt, „Standard“ schreibt man wirklich mit „d“. Man(n) sollte vielleicht ins Bett gehen wenn die Augendeckel schwer werden. :slight_smile:

Für den „KS0073“ hab ich es jedoch richtig eingetippt. Ich werd mochmals das „Function“ Script kopieren.
Bei der Gelegenheit ist mir aufgefallen, dass das „Function Script“ das über die Beschreibung des" IPS 1-Wire NanoTerminal, Include-Skript" einen Stand ohne KS0073 hat (Version vom 26.08.06).

Ciao
Andreas

Hallo Andreas,

leider liefen eine Zeit lang zwei verschiedene Versionen parallel.

Aber spätestens seit ich Dich das letzte Mal zum Download aufgefordert habe (gestern) gibt es nur noch die Version vom 18.07.07.

Bitte versuch es damit noch mal.

Gruß
HJH

Hallo HJH,

sehr gut, der Zeichenversatz in nun weg. Nur das Vertauschen der 2. und 3. Zeile habe ich noch. :rolleyes: Aber ich denke das bekommen wir auch noch hin.
Him, was kann ich denn noch, außer die Ausgabe zu vertauschen machen?

Danke für die neue Version.

Achja, dass DIIL Display hat eine sehr schöne Darstellung, kann ich empfehlen!

Ciao Andreas

Hallo Andreas,

jetzt wird es noch verrückter. Zeilenvertauschung einschließlich Zeilenversatz ist erklärbar. Aber das Eine ohne das Andere ist mir ein Rätsel.

Was passiert, wenn Du zwischen Standard und KS0073 wechselst?

Gruß
HJH

Hi HJH

Jippppppppppppppppppppppppppppppppppppppppi, nun geht das Display!!
Kein Zeichenversatz und richtige Reihenfolge der Zeilen!

Ich habe meine Scripts nochmals mit Deinem Beispiel-Script verglichen und gefunden, dass diese Zeilen sich unterschieden haben:

Meine alte Version:
require_once „LCD_Functions.ips.php“;

Beispiel:
require_once $includeFile;

Kannst Du mir den unterschied erklären? Nach wechseln der Zeile geht nun alles. Ein anderes „Standard“ Display mit der alten „require“ Zeile alles richtig dar.

Nebenbei habe ich noch eine Frage, ich erhalte auf mein Display-Script beim ausführen von Hand die Fehlermeldung: „RichEdit line insertion error“
Auf diesen Fehler habe ich keine Antwort in der Wiki gefunden.

Vielen Dank nochmals für den guten Support!!

Ciao
Andreas

Hallo Andreas,

das ist genau die „Ungereimtheit“, auf die ich noch zurück kommen wollte.

So ist es korrekt (von mir empfohlen):

$includeFile =  IPS_GetScriptFile("LCD_Functions");
require_once $includeFile;

So ist es auch korrekt:

require_once "LCD_Functions.ips.php";

Deine alte Version ist auch nicht wirklich falsch, aber die Zuweisung an die Variable $includeFile ist hier sinnlos, da Du die Variable anschließend überhaupt nicht verwendest:

$includeFile =  IPS_GetScriptFile("LCD_Functions");
require_once "LCD_Functions.ips.php";

Alle drei Versionen sollten exakt zum selben Ergebnis führen, außer Du hast zwei verschiedene „LCD_Functions.ips.php“-Dateien, und zwar eine im „Scripts“-Ordner und eine andere im (empfohlenen) Unterordner „NanoTerminal“.

Der PHP-Befehl require_once bewirkt, wie include auch, die Einbindung eines externen Skripts. Zusätzlich überwacht PHP, dass Das Skript nicht ein weiteres Mal (also nur einmal) eingebunden wird.

Gruß
HJH

Aha, vielen Dank HJH für die Erklärung.

Dann hab ich ohne zu wissen was ich da genau getauscht habe die richtigen Punkt gefunden. Wie war das mit dem blinden Huhn das auch ein Korn findet?

Darf ich dich auch naoch nach der Fehlermeldung (RichEdit line insertion error) fragen? Hat das auch was mit dem anderen „Fehler“ zu tun?

Grüße
Andreas

Hallo Andreas,

kommentier mal die „echo“-Zeile aus.

Tritt der Fehler dann immer noch auf?

Ansonsten bitte noch mal das Skript in der jetzigen Version posten.

Gruß
HJH

Hallo HJH,

Du hattest Recht! Ohne Echoausgabe kommt kein Fehler mehr.

Anbei mein Script für die normale Displayausgabe.

Danke für den guten Support

Grüße
Andreas

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : Display 4 x 20.ips.php
Trigger  : Current Time
Interval :
*/


// Initialisierung Display

$InstanceID = 24332;
$ControllerType = "KS0073";
$Zeilen = 4;
$Spalten = 20;

// Erzeugung des LCD-Objekts (wird hier durch die Variable $lcd reprsentiert)
$includeFile =  IPS_GetScriptFile("LCD_Functions");
require_once $includeFile;
$lcd = new OneWireLCD($InstanceID, $ControllerType, $Zeilen, $Spalten);

//$lcd->SendLCDInit();

// Zeichen bergeben
$degree = "\x06\x09\x09\x06\x00\x00\x00\x00"; // Bit-Definitionen fr das Grad-Zeichen
$lcd->SendLCDCharDef(0, $degree);             // abspeichern an Speicherposition 0,
                                             // damit bekommt das Zeichen den ASCII-Code 0 (null)

//Ausgabe Text 0
$Zeit = GetValueString("CurrentTime");
$TempLabor = GetValueString("Var-Temp-Labor");
$TempWohnzimmer = GetValueString("Var-Temp-Wohnzimmer");
$ATemp = GetValueString("Var-Temp-Aussen");

$text0 = "$Zeit Uhr      |LaborTemp: $TempLabor       |Wohnzimmer:$TempWohnzimmer      |AussenTemp: $ATemp       ";
//echo "Text 0:  $text0
"; //Ausgabe Text 0
$lcd->SendLCDScreen($text0);

IPS_Sleep(10000);    // Warten bis nchste Ausgabe

//Ausgabe Text 1
$Server = GetValueString("Betriebsart");  // Luft der Server auf Netzbetrieb?
$TempSpeicher  = GetValueString("Var-Temp-Speicher");
$Temp_Werkstatt  = GetValueString("Var-Temp-Werkstatt");

$text1 = "$Zeit Uhr|Speicher:  $TempSpeicher |KellerTemp:$Temp_Werkstatt |Serverbetrieb: $Server";
//echo "Text 1:  $text1
"; //Ausgabe Text 1
$lcd->SendLCDScreen($text1);

IPS_Sleep(10000);                 // Warten bis nchste Ausgabe

//Ausgabe 2 Text Energiewerte
$KW_1  = GetValueString("KW_1");
$KWh_1 = GetValueString("KW_h1");
$KW_2  = GetValueString("KW_2");
$KWh_2 = GetValueString("KW_h2");

$text2 = "Solaranlage:          | $KW_2  $KWh_2      |Hausstrom:         | $KW_1  $KWh_1      ";
//echo "Text 2:  $text2
";      //Ausgabe Text 2
$lcd->SendLCDScreen($text2);

?>

Hallo,

Wo kann ich die SMD-Adapter-Platine den kaufen? Bei dir?

Gibt es das Gehäuse für das Display auch bei dir?

Was passiert wenn der 1-Wire-Bus ausfällt?
Bleiben die Infos auf dem Display erahalten?

Kann ich das Display auch unter Linux ansprechen?

Gruß.

Hallo,

ich habe nun auch ein DIP204-4:), leider bleibt bei mir egal was ich mache das Display komplett leer:confused:.
Das Nanoterminal funktioniert, habe die Pins mal ohne Display gesetzt und gemessen, ausserdem hatte ich vorher schon Text auf ein 2x16 Zeichen Display ausgegeben und ich kann die Hintergrundbeleuchtung am P7 einschalten.

Benutze das Script von HJH vom 18.07.07 aus der Doku, da beim Download in diesem Thread ein älterer Stand enthalten ist.

Das Include-Script wird auch durchlaufen, hab da zum test mal eine Variable hochgezählt.

Hatte am Anfang den Pin 3 für die Kontrastspannung offen gelassen, da diese laut Datenblatt nicht benötigt wird, ist jetzt aber auch angeschlossen weil ich dachte der Fehler liegt evtl. daran.

Die vier Datenleitungen habe ich am Display an D4-D7 angeschlossen steht so im Datenblatt, wobei ich dann die Befehlstabelle nicht nachvollziehen kann. Müssen die evtl. doch an D0-D3 angeschlossen werden?

Hier noch mein Init-Script:

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : LCD_Kueche_INIT.ips.php
Trigger  : 
Interval : 
*/

 //******************************************************************************
// Erzeugung eines LCD-Objekts
// ===========================
//
// Das Script "LCD_Functions.ips.php" muss eingebunden sein,
// entweder durch "include" oder durch "require".
//
// $InstanceID: InstanceID des für das LCD verwendeten 1-Wire Bausteins
//
// Zulässige Werte für $ControllerType:
// $ControllerType = "Standard";
// $ControllerType = "KS0073";
// $ControllerType = "ST7036";
//
// $Zeilen: Anzahl der LCD-Zeilen
// $Spalten: Anzahl der Zeichen pro Zeile
//
// Alle Ports des 1-Wire Bausteins DS2408 müssen in der Instance-Definition
// ihrer Funktion entsprechend als Ein- oder Ausgang deklariert werden.
// Für das NanoTerminal gilt:
// P0...P4: Output (LCD-Daten)
// P5...P6: Input  (zB. für Tasten)
// P7:      Output (Summer)
//
//******************************************************************************
// die folgenden Angaben müssen angepasst werden:

$InstanceID = 51118;
$ControllerType = "KS0073";
$Zeilen = 4;
$Spalten = 20;

// Erzeugung des LCD-Objekts (wird hier durch die Variable $lcd repräsentiert)
$includeFile =  IPS_GetScriptFile("LCD_Functions");
require_once $includeFile;
$lcd = new OneWireLCD($InstanceID, $ControllerType, $Zeilen, $Spalten);



//******************************************************************************
// LCD-Initialisierung
// ===================
//
// Diese Funktion muss nur jeweils einmal
// nach dem Einschalten oder einem Reset aufgerufen werden
//
//******************************************************************************
$lcd->SendLCDInit();

//Textausgabe zum testen
$text = "IP-Symcon";
$lcd->SendLCDScreen($text);

?>

Gruß
Martin

Hallo,

wollte nochmal an mein Problem von oben erinnern, hat den keiner eine Ahnung woran das liegen könnte.

Da das DIP204 bei einigen schon läuft, würde mich interessieren wie ihr das angeschlossen habt.

Mein Skript welches ich oben angefügt habe, sollte doch eigentlich passen, währe schön wenn sich mal jemand melden würde.

Gruß
Martin