	:Revision=2
:html
<<
128.131
IC Port-Expander PCF8574-Objekt|PCF8574
--
Das IP-Objekt <!RW>PCF8574 realisiert die digitale Ausgabe ber PCF8574 Bausteine am IC Bus.

Die einzelnen Bausteine mssen in der I2CBusses.Dat definiert sein und werden ber ihren Namen angesprochen.

Die Definition erfolgt innerhalb der I2CBusses.Dat nach der Definition der Busse selber in einem Block, der durch [PCF8574] eingeleitet wird. Danach wird in jeweils einer Zeile ein PCF8574 Baustein definiert:

Beispiel einer I2CBusses.DAT:
<!CODE>
{-----------------------------------------------------------------------------------------}
// BusName      Typ             Daten                           Info
{-----------------------------------------------------------------------------------------}
I2C_MCD         I2CviaME3000    (SDAIn=A13;SDAOut=B8;SCLOut=B9) Default Bus intern im Victor
I2C_Adapter     I2CviaRS232     (Port=1; Invert=true)           abgesetztes System ber RS232 Port1

//----------------------------------------------------------------------------------------
// Name         BusName         Adresse Daten
//----------------------------------------------------------------------------------------
[PCF8574]
PCF0            I2C_Adapter     0       (Used=$3F;INVERT=$ff;PINS=Relais1,Relais2,Relais3,Relais4,Relais5,Relais6,--,--)
PCF1            I2C_Adapter     1       (Used=$3F;INVERT=$ff;PINS=Relais7,Relais8,Relais9,Relais10,Relais11,Relais12,--,--)
PCF2            I2C_Adapter     2       (Used=$3F;INVERT=$3f;PINS=Relais13,Relais14,Relais15,Relais16,Relais17,Relais18,--,--)
PCF3            I2C_Adapter     3       (Used=$3F;INVERT=$3f;In=$C0;PINS=Relais19,Relais20,Relais21,Relais22,Relais23,Relais24,--,--)
PCF4            I2C_Adapter     4       (Used=$1F;INVERT=$1F;IN=$E0;PINS=Relais25,Relais26,Relais27,Relais28,Relais29,IN,IN,IN)

{--Ende der Datei--}
<!TXT>
Die Zeile mit <!CW>[PCF8574] leitet die Definition ein

Jede folgende Zeile beginnt mit dem Namen des PCF8574 Bausteins, unter dem er im folgenden angesprochen werden wird. Dieser Name sollte den Konventionen fr IP-Bezeichner entsprechen.

Nach dem Namen des Baustein folgt der Name des Busses, an dem der Baustein hngt. Dieser Busname muss zuvor oben in der Datei definiert worden sein.

Das dritte Element ist die Adresse des Bausteins, wie sie von den 3 Adress-Pins festgelegt wird. Hierbei gelten die Adressen 0-7 fr die PCF8574P Typen, whrend die Adressen 8-15 fr die  PCF8574AP Typen verwendet werden. Pro Bus darf jede Adresse nur einmal verwendet werden.

Das vierte Element ist eine (durch Semikolon getrennte) Liste von optionalen Zusatzdaten in Klammern. Die Zusatzdaten haben den Aufbau &quot;Name=Wert&quot;. &quot;Name&quot; gibt an, um welche Art von Datum es sich handelt. Erlaubet &quot;Namen&quot; sind:

 <!CW>USED gibt an, welche Bits verwendet werden, es folgt ein 8 Bit Wert, bei dem ein gesetztes Bit anzeigt, dass das Bit verwendet wird (Default=$FF / 255). Dieser Wert hat nur Auswirkung auf die Anzeige im Monitor, unbenutzte Pins werden grau dargestellt.

 <!CW>INVERT legt fest, welche Ausgangssignale invertiert angesteuert werden sollen (aktiv=low, inaktiv=high), es folgt ein 8 Bit Wert, bei dem ein gesetztes Bit anzeigt, dass der Pin invertiert wird (Default=$00 / 0).

 <!CW>IN legt fest, welche Pins als Eingang betrachtet werden sollen, es folgt ein 8 Bit Wert, bei dem ein gesetztes Bit anzeigt, dass der Pin ein Eingang ist (Default=$00 / 0).

Es ist zu beachten, dass ein Pin nicht gleichzeitig ein invertierter Ausgang und ein Eingang sein kann, <!CW>(IN <!CW>& <!CW>INVERT) muss daher 0 sein.

 <!CW>PINS dient dazu, Namen fr die einzelnen Pins im Monitor zu definieren. Die einzelnen Namen werden durch Komma getrennt. Sie drfen daher selber weder Komma noch Semikolon beinhalten.
>>

<<
128.131.1
Funktionen des PCF8574-Objekts|Funktionen
--
>>
<<
128.131.1.1
PCF8574.Get|Get
--
<!DEF>
function <!TW>PCF8574.Get (sPCFName : string) : real;
<!TXT>
Liefert den Ausgabe-Zustand (es wird nicht eingelesen) des PCF8574-Bausteins mit dem Namen <!PW>sPCFName als 8 Bit Wert.
>>
<<
128.131.1.2
PCF8574.Read|Read
--
<!DEF>
function <!TW>PCF8574.Read (sPCFName : string) : real;
<!TXT>
Liefert den Eingangs-Zustand (es wird eingelesen) des PCF8574-Bausteins mit dem Namen <!PW>sPCFName als 8 Bit Wert.
>>
<<
128.131.1.3
PCF8574.Error|Error
--
<!DEF>
function <!TW>PCF8574.Error (sPCFName : string) : real;
<!TXT>
Liefert <!RW>TRUE, wenn bei der letzten Aktion des PCF8574-Bausteins mit dem Namen <!PW>sPCFName ein Fehler aufgetreten ist.
>>
<<
128.131.2
Prozeduren des PCF8574-Objekts|Prozeduren
--
>>
<<
128.131.2.1
PCF8574.Bits|Bits
--
<!DEF>
procedure <!TW>PCF8574.Bits (sPCFName : string; rBits, rOperation, rSendIt : real [, rVerify : real [, rConfigure : real ]] );
<!TXT>
Auf dem PCF8574-Baustein mit dem Namen <!PW>sPCFName werden die aktuellen Ausgabebits mit den unter <!PW>rBits angegebenen Bitmuster wie in <!PW>rOperation angegeben verknpft. Wenn <!PW>rSendIt = <!RW>Send, dann werden die Daten zum Chip gesendet, ansonsten zwischen gespeichert. <!PW>rVerify (false/true) legts fest, ob der Status der Ausgnge ber die Eingnge zurckgelesen und kontrolliert werden soll. <!PW>rConfigure (false/true) kennzeichnet, dass vor dem Schreiben der Ausgnge noch die Konfiguration der Ein-/Ausgnge erfolgen soll. Der Default-Wert der letzten beiden Parameter ist false.

 <!PW>rOperation kann sein : <!RW>CLR | <!RW>SET | <!RW>FLIP | <!RW>NOP oder 0..3

 <!PW>rSendIt kann sein    : <!RW>STORE | <!RW>SEND     oder 0..1
>>
<<
128.131.2.2
PCF8574.Word|Word
--
<!DEF>
procedure <!TW>PCF8574.Word (sPCFName : string; rBits, rSendIt : real [, rVerify : real [, rConfigure : real ]]);
<!TXT>
Auf dem PCF8574-Baustein mit dem Namen <!PW>sPCFName wird das in <!PW>rBits genannte Bitmuster ausgegeben.

Wenn <!PW>rSendIt = <!RW>Send, dann werden die Daten zur Karte gesendet, sonst zwischen gespeichert. <!PW>rVerify (false/true) legts fest, ob der Status der Ausgnge ber die Eingnge zurckgelesen und kontrolliert werden soll. <!PW>rConfigure (false/true) kennzeichnet, dass vor dem Schreiben der Ausgnge noch die Konfiguration der Ein-/Ausgnge erfolgen soll. Der Default-Wert der letzten beiden Parameter ist false.

 <!PW>rSendIt kann sein    : <!RW>STORE | <!RW>SEND     oder 0..1
>>
<<
128.131.2.3
PCF8574.BitsEx|BitsEx
--
<!DEF>
procedure <!TW>PCF8574.BitsEx (rGroup : real; sCommand : string [, rVerify : real [, rConfigure : real ]]);
<!TXT>
Makrokommando : Setzt/lscht Bits auf PCF8574-Chips und wartet

 <!PW>rGroup whlt eine Aktionsgruppe aus (0..9)
 
 <!PW>sCommand hat folgende Form:
<!CODE>
<!SW>Adresse[+<!SW>Adresse...],<!SW>Aktion[,<!SW>Aktion...][;<!SW>Adresse[+<!SW>Adresse...],<!SW>Aktion[,<!SW>Aktion...]...]
<!TXT>

 <!SW>Adresse ist ein Bitmuster auf einem PCF8574 Chip.
Mehrere Adresskonstanten konnen mit + verknpft werden.

 <b><!SW>Adresse' kann in 2 Formen angegeben werden:
<h5>1. Als Bitmuster</h5>
<!CODE>
<!SW>PCFName<font color=#ff0000><b>$</b></font><!SW>Bitmuster
<!TXT>
 <!SW>PCFName ist der Name eines PCF8574Chips wie in I2CBusses definiert
 <!SW>Bitmuster ist das gesamte Bitmuster in Hex-Schreibweise
  Beispiel : <!CW>PCF1$03 - die unteren beiden Bits von Baustein PCF1
<h5>2. ber den Bit-Index</h5>
<!CODE>
<!SW>PCFName<font color=#ff0000><b>.</b></font><!SW>Bit[<font color=#ff0000><b>.</b></font><!SW>Bit ...]
<!TXT>
 <!SW>PCFName</b> ist der Name eines PCF8574Chips wie in I2CBusses definiert
 <!SW>Bit</b> ist eine Ziffer von 0 bis 7. Einzelne Bitziffern werden durch Punkte getrennt.
  Beispiel : <!CW>PCF1.0.1 - die unteren beiden Bits von Baustein PCF1

<!SW>Aktion' hat folgenden Aufbau (n ist jeweils die Gruppennummer 0..9 oder 'x') :
<!STBL>
<!>nS <!>Setzt die Bits<!>
<!>nR <!>Setzt die Bits zurck<!>
<!>nDz<!>Wartezeit von z Millisekunden<!>
<!ETBL>

 <!SW>n gibt die Gruppe an. Es werden nur solche Aktionen ausgefhrt, deren Gruppe durch den Parameter <!PW>rGroup ausgewhlt ist. 'x' statt einer Ziffer passt immer!

<ul indent=12>
<li>Wird durch <!PW>rGroup keine Aktion aktiviert, so wird nichts gemacht.</li>
<li>Sind keine Aktionen angegeben, so wird nichts gemacht.</li>
<li>Ist <!PW>sCommand leer, so passiert nichts.</li>
<li>In <!PW>sCommand knnen mehrere Adressen+Aktionen angegeben werden (durch ';' getrennt)</li>
</ul>

<!PW>rVerify (false/true) legts fest, ob der Status der Ausgnge ber die Eingnge zurckgelesen und kontrolliert werden soll. <!PW>rConfigure (false/true) kennzeichnet, dass vor dem Schreiben der Ausgnge noch die Konfiguration der Ein-/Ausgnge erfolgen soll. Der Default-Wert der letzten beiden Parameter ist false.
Beispiel
<!CODE>
PCF8574.BitsEx (1, 'PCF1$A+PCF2.7,1r,9s');

Die '1' aktiviert Gruppe 1.
Die Bestandteile von sCommand im einzelnen
'PCF1$A+PCF2.7' sind zwei Adressen:
  'PCF1$A' -> Bit 3 und Bit 1 von Baustein PCF1
  'PCF2.7' -> Bit 7 von Baustein PCF2
'1r' wenn Gruppe 1 aktiv, dann Bits rcksetzen
'9s' wenn Gruppe 9 aktiv, dann Bits setzen

Da Gruppe 1 aktiv ist, werden die Bits gelscht
<!TXT>
>>
<<
128.131.2.4
PCF8574.Send|Send
--
<!DEF>
procedure <!TW>PCF8574.Send (sPCFName : string [, rVerify : real [, rConfigure : real ]]);
<!TXT>
Sendet evtl. zwischengespeicherte Daten des Bausteins <!PW>sPCFName. <!PW>rVerify (false/true) legts fest, ob der Status der Ausgnge ber die Eingnge zurckgelesen und kontrolliert werden soll. <!PW>rConfigure (false/true) kennzeichnet, dass vor dem Schreiben der Ausgnge noch die Konfiguration der Ein-/Ausgnge erfolgen soll. Der Default-Wert der letzten beiden Parameter ist false.
>>

<<
128.131.2.5
PCF8574.Pin|Pin
--
Das PCF8574.Pin - Objekt...
>>
<<
128.131.2.5.1
PCF8574.Pin.Info|Info
--
Das PCF8574.Pin.Info - Objekt...
>>
<<
128.131.2.5.1.1
PCF8574.Pin.Info.Set|Set
--
<!DEF>
procedure <!TW>PCF8574.Pin.Info.Set (sPCFName : string, rPinNr : real, sPinInfo : string);
<!TXT>
Setzt den Info-Text <!PW>sPinInfo zu einem Pin <!PW>rPinNr des Bausteins <!PW>sPCFName.
>>
