:Revision=3
:html
<<
128.119
I2C-Objekt|I2C
$NoSort
--
Das IP-Objekt <!RW>I2C dient dem Zugriff auf eine IC-Schnittstelle
(Inter-IC-Connection).

Der Zugriff wird ber eine IC-Schnittstelle abgewickelt, die definiert sein muss und ber ihren Namen angesprochen wird.
>>

<<
128.119.1
Funktionen des I2C-Objekts|Funktionen
--
>>
<<
128.119.1.1
I2C.Execute|Execute
--
<!DEF>
function <!TW>I2C.Execute (sName, sCommand : string) : string;
<!TXT>
Fhrt die im String <!PW>sCommand codierten Befehle auf der IC Schnittstelle <!PW>sName aus.

Das Kommando <!PW>sCommand wird von links nach rechts abgearbeitet. Es darf aus folgenden Zeichen bestehen (Gro-/Kleinschreibung macht keinen Unterschied):
<!STBL>
<!+>Zeichen<!+>Aktion<!>
<!c>S<!>erzeugt eine Startbedingung<!>
<!c>P<!>erzeugt eine Stoppbedingung<!>
<!c>00 .. FF<!>Byte senden<!>
<!c>K<!>Ack auf zuletzt geendetes Byte lesen<!>
<!c>Q<!>Byte Lesen mit Ack<!>
<!c>R<!>Byte Lesen ohne Ack<!>
<!c>L<!>setzt SDA auf high<!>
<!c>M<!>setzt SDA auf low<!>
<!c>N<!>liefert den Zustand von SDA<!>
<!c>G<!>setzt SCL auf high<!>
<!c>H<!>setzt SCL auf low<!>
<tr><td colspan=2>alle anderen Zeichen werden ignoriert<!>
<!ETBL>

Die als Reaktion auf K,N,Q und R gelesenen Werte werden als Ergebnisstring zurckgeliefert - Bitwerte als - oder +, Bytes im Hexformat (00..FF).

Beispiel:

Im Befehl:
<!CODE>
sData:=I2C.Execute ('I2C_MCD', 'SA000SA1QQQQQQQRP');
<!TXT>
bewirkt das Kommando folgendes:
<!CODE>
S  - Startbedingung erzeugen
A0 - Byte A0 senden (Adressierung des IC-Bausteines - Schreibzugriff)
00 - Byte 00 senden (zweiter Teil der Adresse)
S  - Startbedingung erzeugen
A1 - Byte A1 senden (Adressierung des IC-Bausteines - Lesezugriff)
Q  - Byte lesen mit Ack (insgesamt 7 mal)
R  - Byte lesen ohne Ack - signalisiert Ende des Lesens
P  - Stoppbedingung erzeugen
<!TXT>
Die Executefunktion liest also 8 Byte vom IC Baustein ein.
>>
<<
128.119.1.2
I2C.Read|Read
--
<!DEF>
function <!TW>I2C.Read (sName : string [; rAck : real]) : real;
<!TXT>
Liest ein Byte vom IC Bus ein. Zuvor muss am Bus mit geeigneten Befehlen ein Baustein adressiert und in des Lesemodus gebracht worden sein. Wenn <!PW>rAck nicht angegeben oder true (default) ist, wird ein gelesenens Byte mit einem Acknowledge besttigt. Ist rAck mit false angegeben, wird ein negatives Acknowledge gesendet.
>>
<<
128.119.1.3
I2C.Ack|Ack
--
<!DEF>
function <!TW>I2C.Ack (sName : string) : real;
<!TXT>
Liefert den Wert des zuletzt eingelesenen Ack-Flags, also die Antwort auf das zuletzt ausgegebe Byte.
>>
<<
128.119.2
Prozeduren des I2C-Objekts|Prozeduren
--
>>
<<
128.119.2.1
I2C.Start|Start
--
<!DEF>
procedure <!TW>I2C.Start (sName : string);
<!TXT>
Erzeugt eine Startbedingung auf dem IC Bus <!PW>sName.
>>
<<
128.119.2.2
I2C.Stop|Stop
--
<!DEF>
procedure <!TW>I2C.Stop (sName : string);
<!TXT>
Erzeugt eine Stoppbedingung auf dem IC Bus <!PW>sName.
>>
<<
128.119.2.7
I2C.Set|Set
--
<!DEF>
procedure <!TW>I2C.Set  (sName : string; rLine : real; <!RW>High|<!RW>Low);
<!TXT>
Setzt auf dem IC Bus <!PW>sName die ausgewhlte Leitung <!PW>rLine (1=SDA, 2=SCL) auf den angegebenen Pegel.

Mit diesem Befehl knnen besondere, nicht dem normalen IC Protokoll entsprechende Zustnde erzeugt werden.

Fr normale Kommunikation ist dieser Befehl nicht ntig.
>>
<<
128.119.2.10
I2C.Send|Send
--
<!DEF>
procedure <!TW>I2C.Send (sName : string; vData : vector);
<!TXT>
Sendet die Bytes im Vektor <!PW>vData auf den IC Bus <!PW>sName.
>>
<<
128.119.2.11
I2C.Reset|Reset
--
<!DEF>
procedure <!TW>I2C.Reset;
<!TXT>
Fhrt einen vollstndigen Reset des IC Busses aus und setzt dabei alles auf die Anfangseinstellungen zurck.
>>
<<
128.119.4
I2C Bus Definition|Definition
--
IC Busse werden in einer eigenen Datei <!CW>(%SYS%\I2CBusses.Dat) definiert. Ist diese Datei nicht vorhanden, so wird ein Default Bus ber die ME3000 Karte intern definiert.

Jede (nichtleere) Zeile der Datei definiert einen I2C Bus. Die Anzahl definierter Busse ist nicht beschrnkt.

Kommentarzeilen knnen mit // oder { eingeleitet werden und enden jeweils am Zeilenende

Die Zeilen haben folgende Aufbau:
<!CODE>
<b><!SW>BusName <!SW>BusTyp (<!SW>BusDaten) <!SW>Info</b>
<!TXT>

Die einzelnen Elemente werden durch Leerzeichen oder Tabulatoren getrennt, mssen aber unbedingt in einer Zeile stehen.

 <b><!SW>BusName</b> ist der im Interpreter zum Ansprechen des Busses verwendete Name. Er muss eindeutig sein und sollte den Regeln fr IP-Bezeichner entsprechen. Es wird nicht zwischen Gro- und Kleinschreibung unterschieden.

 <b><!SW>BusTyp</b> legt die Art des Busses (seine Hardware) fest. Es muss einer der im programm definierten IC Bustypen sein. Siehe weiter unten.

 <b><!SW>BusDaten</b> legen die verwendete Hardware und weitere Optionen fest. welche Eintrge in Busdaten gltig sind, hngt vom BusTyp ab. Werden keine Daten bentigt, muss eine leere Klammer () angegeben werden.

 <b><!SW>Info</b> ist eine optionale Beschreibung des Busses. Sie wird im Programm nicht weiter verwendet.
>>

<<
128.119.4.1
BusTyp I2CviaME3000|I2CviaME3000
--
Der Bustyp <!SW>I2CviaME3000 realisiert einen IC Bus ber die digital IO Leitungen der ME3000 Karte.

Es werden 2 Ausgabe-Leitungen fr SCL und SDA-out und eine Eingabe-Leitung fr SDA-in verwendet. ber eine externe Beschaltung mssen SDA-out und SDA-in verknpft werden.

Mgliche Eintrge in Daten:
<!STBL>
<!+>Name<!+>Erlaubt<!+>Default<!+>Bedeutung<!>
<!c>SDAIn<!>A0..A15<!>A13<!>Leitung, die fr das Zurcklesen von SDA benutzt wird<!>
<!c>SDAOut<!>B0..B15<!>B13<!>Leitung, die fr die Ausgabe von SDA benutzt wird<!>
<!c>SCLOut<!>B0..B15<!>B14<!>Leitung, die fr die Ausgabe von SCL benutzt wird<!>
<!ETBL>

Die als Default gesetzten Werte sind Leitungen des MCD-Busses, die fr IC-Zwecke doppelt benutzt werden.

Dieser IC-Bus dient der Steuerung der internen IC-Funktionen. Fr externe Anwendung im Prfgert sollte daher auf jeden Fall ein IC-Bus mit abweichenden Leitungen definiert werden.

Sinnvolle Bereiche fr
<ul indent=13>
<li>SDAIn : A0..A11</li>
<li>SDAout : B0..B7</li>
<li>SCLOut : B0..B7</li>
</ul>

Beispiel fr eine Busdefinition:
<!CODE>
//-------------------------------------------------------------------
// BusName   Typ          Daten                          Info
//-------------------------------------------------------------------
I2C_ME       I2CviaME3000 (SDAIn=A7;SDAOut=B7;SCLOut=B6)
<!TXT>
>>

<<
128.119.4.2
BusTyp I2CviaRS232|I2CviaRS232
--
Der Bustyp <!SW>I2CviaRS232 realisiert einen IC Bus ber die Handshake-Leitungen einer RS232-Schnittstelle.

Es wird folgende Pinzuordnung benutzt:
<!STBL>
<!+>RS232-Pin<!+>IC Funktion<!>
<!c>RTS<!>SDA-out<!>
<!c>CTS<!>SDA-in<!>
<!c>DTR<!>SCL-out<!>
<!ETBL>
<!REM>
Es ist im Moment nicht mglich, die Zuordnung zu ndern.
<!TXT>

Mgliche Eintrge in Daten:
<!STBL>
<!+>Name<!+>Erlaubt<!+>Default<!+>Bedeutung</b><!>
<!c>Port<!>1, 2, 3...<!>-<!>Nummer des verwendeten Com-Ports.<br><b>Muss angegeben sein, kein Default!</b><!>
<!c>Invert<!>false, true<!>true<!>Auf true setzen, wenn Leitungen extern durch Max232 o.. invertiert werden<!>
<!ETBL>

Der Port kann ohne Probleme auch fr Kommunikation benutzt werden, der IC-Bus beeinflusst lediglich die Handshakesignale. Der Port muss nicht als einer der SerPorts definiert sein, kann aber. Es ist auch unerheblich, ob der Port vom RS232-Objekt bereits geffnet wurde oder nicht.

Aus Performancegrnden (Zuteilung und Rckgabe des Ports) sollte ber diesen Porttyp auf jeden Fall der Befehl Execute einer befehlsweisen Programmierung vorgezogen werden, also statt:
<!CODE>
vData:=[];
I2C.Start ('I2CCom');
I2C.Send  ('I2CCom', [$A0, $00]);
I2C.Start ('I2CCom');
I2C.Send ('I2CCom', [$A1]);
for i:=1 to 8 do begin
  vData:=vData+I2CBus.Read ('I2CCom', i<8);
end;
I2C.Stop ('I2CCom');
<!TXT>
besser:
<!CODE>
vData:=HexToBVect(I2CBus.Execute ('I2C', 'SA000SA1QQQQQQQRP'));
<!TXT>

Fr beste Performance sollte ein 'normaler' RS232 Port auf diesem COM-Port definiert und geffnet sein, da die IC Routinen in diesem Fall das Handle des RS232 Ports benutzen und nicht fr jeden Zugriff ein eigenes Handle bei Windows anfordern mssen.

Beispiel fr eine Busdefinition:
<!CODE>
//-------------------------------------------------------------------
// BusName   Typ         Daten                  Info
//-------------------------------------------------------------------
I2C_Adapter  I2CviaRS232 (Port=1; Invert=true)  IC ber RS232 Port 1
<!TXT>
>>
<<
128.119.4.3
Bustypen, die ein SerIO Modul verwenden|I2C via SerIO
--
Module, die ber eine serielle Schnittstelle und den SerIO Bus angesprochen werden, also z.B.
<ul indent=13>
<li>MechIO Module</li>
<li>AdapterCPU Module</li>
<li>IMeasX4 Module, etc.</li>
</UL>
knnen als Schnittstelle zu einem IC Bus benutzt werden.

Fr einen erfolgreichen Zugriff auf einen solchen IC Bus mssen folgende Systeme aktiviert und betriebsbereit sein:
<ul indent=13>
<li>die seriellen Schnittstellen global</li>
<li>die serielle Schnittstelle des SerIO Busses des Moduls</li>
<li>die Modul-Klasse global </li>
<li>das Modul, das als Gateway benutzt wird</li>
</ul>
 <i>anders gesagt, das Gateway-Modul muss ansprechbar sein.</i>

Da die SerIO-Module nur eine einfache Kommunikation erlaubt, sind Low-Level Zugriffe, die sich auf einzelne IC-Leitungen (SDA und SCL) beziehen, nicht mglich, bzw. liefern unsinnige Ergebnisse.

Untersttzt werden:
<ul indent=13>
<li><!RW>I2C.Start </li>
<li><!RW>I2C.Send</li>
<li><!RW>I2C.Stop </li>
</ul>

Eingeschrnkt:
<ul indent=13>
<li><!RW>I2CRead - es wird immer ein NoAck gesendet!</li>
</ul>

Nicht untersttzt:
<ul indent=13>
<li><!RW>I2C.Ack</li>
<li><!RW>I2C.Set</li>
</ul>

Sonderfall: <!RW>I2C.Execute 
<!STBL>
<!+>Zeichen<!+>Funktion<!+>untersttzt vom Modul?<!>
<!>S, P   <!>Start-/Stoppbedingung<!>funktioniert<!>
<!>00 .. FF <!>Byte senden<!>funktioniert<!>
<!>K      <!>Ack lesen<!>liefert immer '?'<!>
<!>Q, R   <!>Byte Lesen mit/ohne Ack<!>funktioniert, aber auf das letzte gelesene Byte wird immer (auch bei Q) ein NoAck erzeugt.<!>
<!>G, H   <!>setzt SCL auf high/low<!>keine Funktion<!>
<!>L, M   <!>setzt SDA auf high/low<!>keine Funktion<!>
<!>N      <!>liefert den Zustand von SDA<!>liefert '?'<!>
<!ETBL>
>>

<<
128.119.4.3.1
BusTyp I2CviaMechIO|I2CviaMechIO
--
Der Bustyp <!SW>I2CviaMechIO benutzt ein Mechanik Modul als Gateway fr den IC Bus.

 <a href="128.119.4.3">Wichtige Hinweise fr IC ber SerIO-Module</a>

Mgliche Eintrge in Daten:
<!STBL>
<!+>Name<!+>Erlaubt<!+>Default<!+>Bedeutung<!>
<!c>Modul<!>1, 2, 3 ...<!>-<!>Nummer des MechIO-Moduls in der Grundeinstellung, also nicht seine Adresse oder die Nummer des verwendeten COM-Ports.<br><b>Muss angegeben sein, kein Default!</b><!>
<!ETBL>

Beispiel fr eine Busdefinition:
<!CODE>
//-------------------------------------------------------------------
// BusName   Typ         Daten                  Info
//-------------------------------------------------------------------
I2C_MechIO  I2CviaMechIO (Modul=1)              IC ber Mechanik Modul 1
<!TXT>
>>

<<
128.119.4.3.2
BusTyp I2CViaAdapCpu|I2CViaAdapCpu
--
Der Bustyp <!SW>I2CViaAdapCpu benutzt ein Adapter-CPU Modul als Gateway fr den IC Bus.

 <a href="128.119.4.3">Wichtige Hinweise fr IC ber SerIO-Module</a>

Mgliche Eintrge in Daten:
<!STBL>
<!+>Name<!+>Erlaubt<!+>Default<!+>Bedeutung<!>
<tr align=center><td>Modul<!>1, 2, 3 ...<!>-</td><td align=left>Nummer des Adapter-CPU-Moduls in der Grundeinstellung, also nicht seine Adresse oder die Nummer des verwendeten COM-Ports.<br><b>Muss angegeben sein, kein Default!</b><!>
<!ETBL>

Beispiel fr eine Busdefinition:
<!CODE>
//-------------------------------------------------------------------
// BusName   Typ           Daten                Info
//-------------------------------------------------------------------
I2C_AdapCPU  I2CviaAdapCPU (Modul=1)            IC ber Adapter CPU Modul 1
<!TXT>
>>

<<
128.119.4.3.3
BusTyp I2CViaIMeasX4|I2CViaIMeasX4
--
Der Bustyp I2CViaIMeasX4 benutzt ein 4fach Strommessmodul (IMeasX4) als Gateway fr den IC Bus.

 <a href="128.119.4.3">Wichtige Hinweise fr IC ber SerIO-Module</a>

Mgliche Eintrge in Daten:
<!STBL>
<!+>Name<!+>Erlaubt<!+>Default<!+>Bedeutung<!>
<!c>Modul<!>1, 2, 3 ...<!>-<!>Nummer des IMeasX4-Moduls in der Grundeinstellung, also nicht seine Adresse oder die Nummer des verwendeten COM-Ports.<br><b>Muss angegeben sein, kein Default!</b><!>
<!ETBL>

Beispiel fr eine Busdefinition:
<!CODE>
//-------------------------------------------------------------------
// BusName   Typ            Daten                Info
//-------------------------------------------------------------------
I2C_IMeasX4  I2CviaIMeasX4  (Modul=1)            IC ber 4fac Strommessmodul 1
<!TXT>
>>

<<
128.119.4.3.4
BusTyp I2CviaRCMEas|I2CviaRCMEas
--
Der Bustyp <!SW>I2CviaRCMEas benutzt ein RC-Mess-Modul als Gateway fr den IC Bus.

 <a href="128.119.4.3">Wichtige Hinweise fr IC ber SerIO-Module</a>

Mgliche Eintrge in Daten:
<!STBL>
<!+>Name<!+>Erlaubt<!+>Default<!+>Bedeutung<!>
<!c>Modul<!>1, 2, 3 ...<!>-<!>Number of the RCMEas-Module in der Grundeinstellung, also nicht seine Adresse oder die Nummer des verwendeten COM-Ports.<br><b>Muss angegeben sein, kein Default!</b><!>
<!ETBL>

Beispiel fr eine Busdefinition:
<!CODE>
//-------------------------------------------------------------------
// BusName   Typ         Daten                  Info
//-------------------------------------------------------------------
I2C_RcMeasIO  I2CviaRCMEas (Modul=1)            IC ber RC MEas Modul 1
<!TXT>
>>

<<
128.119.4.3.5
BusTyp I2CviaVideoAnalyzer|I2CviaVideoAnalyzer
--
Der Bustyp <!SW>I2CviaVideoAnalyzer benutzt ein Video-Analyzer Modul als Gateway fr den IC Bus.

 <a href="128.119.4.3">Wichtige Hinweise fr IC ber SerIO-Module</a>

Mgliche Eintrge in Daten:
<!STBL>
<!+>Name<!+>Erlaubt<!+>Default<!+>Bedeutung<!>
<!c>Modul<!>1, 2, 3 ...<!>-<!>Nummer des Video-Analyzer Moduls in der Grundeinstellung, also nicht seine Adresse oder die Nummer des verwendeten COM-Ports.<br><b>Muss angegeben sein, kein Default!</b><!>
<!ETBL>

Beispiel fr eine Busdefinition:
<!CODE>
//-------------------------------------------------------------------------------
// BusName        Typ                  Daten        Info
//-------------------------------------------------------------------------------
I2C_VideoAnalyzer  I2CviaVideoAnalyzer (Modul=1)    IC ber VideoAnalyzer Modul 1
<!TXT>
>>

<<
128.119.4.3.6
BusTyp I2CviaSerIOUnknown|I2CviaSerIOUnknown
--
Der Bustyp <!SW>I2CviaSerIOUnknown benutzt ein MCD Modul als Gateway fr den IC Bus.

 <a href="128.119.4.3">Wichtige Hinweise fr IC ber SerIO-Module</a>

Mgliche Eintrge in Daten:
<!STBL>
<!+>Name<!+>Erlaubt<!+>Default<!+>Bedeutung<!>
<!c>Modul<!>1, 2, 3 ...<!>-<!>Nummer des SerIOUnknown-Moduls in der Grundeinstellung, also nicht seine Adresse oder die Nummer des verwendeten COM-Ports.<br><b>Muss angegeben sein, kein Default!</b><!>
<!ETBL>

Beispiel fr eine Busdefinition:
<!CODE>
//-----------------------------------------------------------------------------
// BusName        Typ                Daten        Info
//-----------------------------------------------------------------------------
I2C_SerIOUnknown  I2CviaSerIOUnknown (Modul=1)    IC ber SerIOUnknown Modul 1
<!TXT>
>>
