Das Inter-Integrated Circuit-Busprotokoll – kurz: I²C – wurde 1992 in der Version 1.0 spezifiziert. Entwickelt von Philips hatte es sich bereits in den 80er Jahren als serielles Protokoll für den Datenaustausch zwischen IC-gesteuerten Komponenten elektronischer Schaltungen bewährt – und war zu einem de facto-Standard geworden. Das Protokoll ist simpel: Ein „Master“ kann über den Bus bis zu 127 unterschiedliche „Slave“-Devices einzeln adressieren, ihnen Befehle zusenden und Daten abfragen. Den Takt legt der Master über eine Taktleitung fest und sendet bzw. empfängt über eine Datenleitung; zwei weitere Leitungen dienen der Stromversorgung der „Slaves“. Die ursprüngliche Übertragungsgeschwindigkeit lag bei 100 kBit/s (Standard Mode); sie wurde in Weiterentwicklungen des Protokolls um die Geschwindigkeiten 400 kBit/s (Fast Mode, v1.0 1992), 3,4 MBit/s (High Speed Mode, v2.0 1998), 1 MBit/s (Fast Mode Plus, v3.0 2007) und 5 MBit/s (Ultra Fast Mode, v4.0 2012) erweitert.
Inzwischen gibt es eine kaum noch überschaubare Anzahl von Sensoren und Aktoren, die über das I²C-Protokoll angesprochen werden können.
Seit der Version 3.1.3 unterstützt auch ROBO Pro im Zusammenspiel mit der Firmware des TX(T) das I²C-Protokoll im Standard Mode und Fast Mode. Dabei fungiert der TX(T) als „Master“, die an den EXT 2-Ausgang angeschlossenen Sensoren und Aktoren als „Slaves“. Leider arbeiten I²C-Devices mit zwei unterschiedlichen Betriebsspannungen (5V und 3,3V) – und der TX unterstützt Vcc = 5V, während der TXT mit Vcc = 3,3V arbeitet. Daher lassen sich nur solche Sensoren ohne Spannungswandler an beiden Controllern betreiben, die beide Betriebsspannungen unterstützen (zum Glück ein größerer Teil).
Dafür ist die Programmierung von I²C-Sensoren unter ROBO Pro ein Kinderspiel. Zwei Befehle (Level 4) aus der Befehlsgruppe „Senden, Empfangen“ genügen: Der I²C-Lese- und der I²C-Schreibbefehl.

Bei beiden Befehlen wird das „Slave“-Device über die 7-Bit-Geräteadresse angesprochen. Dann kann beim Lesebefehl als „Unteradresse“ ein 8 oder 16 bit langer Wert als Adresse oder Befehl übergeben werden; anschließend wird ein Byte oder ein 16 bit Wort gelesen, das das Device sendet. Lässt man den Bus „offen“, können mit weiteren Befehlen weitere Bytes oder Worte empfangen werden. Als Geschwindigkeit können – je nach Fähigkeit des Sensors oder Aktors – 100 oder 400 kBit/s gewählt werden.

Der Schreibbefehl funktioniert entsprechend. Dabei kann der Wert, der an das Device geschickt werden soll, als Parameter übergeben werden („Dateneingang“).
Eine ausführliche Einführung in das I²C-Protokoll und die Programmierung unter ROBO Pro findet sich in ft:pedia 3/2012 (S. 32-37).
Dabei muss man sich in ROBO Pro nicht einmal mit den I²C-Befehlen beschäftigen, wenn man einen I²C-Sensor nutzen möchte: Die Treiber in der I²C-Treiberbibliothek „abstrahieren“ von dieser Ebene und stellen „High-Level“-Kommandos zur Verfügung. Treiber für weitere 27 I²C-Sensoren finden sich in meinem Github-Account.
(Weiter zu Teil 9: Oszillograf)
kommentieren