Hallo Forum,
habe IPS schon recht lange auf dem Rechner installiert, komme aber leider erst jetzt zur Inbetriebnahme. Daher fehlt mir auch noch sehr viel an Erfahrung mit der Programmierung und der Inbetriebnahme von Skripten.
Seit einigen Tagen versuche ich einee kleine Schaltung, auf der ein DS1820 zur Temperaturmessung, ein DS2408 als Ansteuerung für das EA DOGM163 Display sowie ein DS2490 als Master verbaut ist, in Betrieb zu nehmen - leider ohne Erfolg.
Als Funktion will ich die vom DS1820 kommende Temperatur über des DS2408 auf dem Display darstellen.
Die Temperatur des DS1820 kann ich bereits auslesen. Nur funktioniert die Ansteuerung des Displays nicht.
Ich sehe den DS2408 in den Instances und habe die ersten 5 Ports (A-E) als Ausgänge konfiguriert und ihnen die Variablen P0-P4 zugeordnet.
Hardwaremäßig sind Pins mit folgenden Eingängen am Display verbunden: P0-D4, P1-D5; P2-D6, P3-D7, P4-RS.
Als Skripte für die Ansteuerung habe ich verschiedene Skripte aus dem Forum verwendet, konnte dem Display aber bislang kein einziges Zeichen entlocken.
Sollte man in der Variablenübersicht von IPS bei P0-P5 nicht ein Toggeln oder eine Änderung des Status der einzelnen Ports sehen?
Als Skript habe ich verschiedene Vorlagen versucht zu kombinieren, bzw. abzuwandeln. Ob das aber so passt, kann ich leider nicht ganz beurteilen.
Starte ich die Skripte in „Event Script“ kommt aber keine Fehlermeldung.
Zur Initialisierung nehme ich folgendes Skript:
<?
/*
*******************************
IP-SYMCON Script
*******************************
File : LCD_INI.ips.php
Trigger :
Interval :
*/
$id = 30051;
$controller = "ST7036";
$rows = 3;
$cols = 16;
TMEX_F29_SetStrobe($id, TRUE);
IPS_Sleep(100);
TMEX_F29_WriteBytes($id, chr(03).chr(03).chr(03).chr(03).chr(03).chr(02).chr(02).chr(12).chr(00).chr(06).chr(00).chr(14).chr(00).chr(01).chr(00).chr(02));
?>
Auf dem Display soll mir folgendes Skript etwas ausgeben:
<?
/*
*******************************
IP-SYMCON Script
*******************************
File : LCD.ips.php
Trigger :
Interval :
*/
$id = 30051;
$text = "Hello |zweite Zeile";
$lcd = new OneWireLCD(3, 16);
$lcd->SendLCDText($text);
class OneWireLCD {
private $rows;
private $cols;
public function __construct( $rows, $cols ) {
$this->rows = $rows;
$this->cols = $cols;
}
public function SendLCDText($text) {
$id = 30051;
$sendbuf="";
$currentline=0;
$lines = explode("|", $text);
//Clear Display
$sendbuf .= chr(0);
$sendbuf .= chr(1);
//Disable Cursor
$sendbuf .= chr(0);
$sendbuf .= chr(12);
foreach($lines as $line) {
if ($currentline >= $this->rows) {
break;
}
//Position
if($currentline > 1) {
$shift=16;
} else {
$shift=0;
}
$sendbuf .= chr(((($currentline%2)*4*16+$shift) | 128) >> 4);
$sendbuf .= chr(((($currentline%2)*4*16+$shift) & 15));
//Text
//$line = str_pad($line, $this->cols);
$line = substr($line, 0, $this->cols);
for($i=0; $i<=strlen($line)-1; $i++) {
$sendbuf .= chr((ord($line{$i}) >> 4) | 16);
$sendbuf .= chr((ord($line{$i}) & 15) | 16);
}
$currentline++;
}
TMEX_F29_WriteBytes($id, $sendbuf);
}
}
?>
Habe ich hier ein prinzipiellen Fehler in meiner Vorgehensweise, oder sollte das funktionieren.
Wäre klasse, wenn mir jemand von euch bei meinen Startschwierigkeiten etwas unter die Arme greifen könnte, denn mittlerweile macht sich bei mir der Frust breit.
Gruß
Mike