| Als USB-Baustein wurde der 2005FT232R USB UART von Future Technology Devices International kurz FTDI verwendet. Der Chip ist zwar etwas teuerer fügt sich aber in alle Betriebssysteme sicher und zuverlässig ein. |
Treiber für alle möglichen Betriebssysteme (von Windows 98 bis Windows Server 2008) finden Sie auf der Treiberseite des Chipherstellers unter: [Link von eBay entfernt]
Ist der Treiber installiert finden Sie in der Systemsteuerung einen virtuellen COM-Port also eine simulierte RS232-Schnittstelle. Über diese werden die Steuerbefehle zum I2C-Bus gesendet und die Antworten empfangen.
Mit einem Jumpern auf der Platine kann die Terminierung der I2C-Signale im Modem erfolgen. Falls Sie bei längeren Leitungen am Ende terminieren möchten, können Sie den Jumper entfernen oder die die Terminierung per Steuerbefehl abschalten. Die drei Leuchtdioden zeigen den aktuellen Signalpegel an. Dies hat sich bei der Softwareerstellung als ungemein nützlich erwiesen.
Die Spannung für die I2C-Bausteine wird absichtlich nicht vom USB-Bus abgezapft damit der PC oder die Schnittstellenkarte keinen Schaden nimmt. Sie benötigen also ein 5V Netzteil das entweder an der Klemmleiste ST2 angeschlossen oder mit einem Hohlstecker (Außendurchmesser 5,5 mm Stiftdurchmesser 2 mm Pluspol innen) angesteckt werden kann.
Das Bild zeigt das fertig zusammengebauten USB-I2C-Modem mit Gehäuse und Netzteil. Gehäuse und Netzteil sind im Bausatz nicht enthalten, können jedoch per Mail oder Onlineshop dazu bestellt werden.
Steuerbefehle / Kommandos
Das I2C-USB-Modem empfängt und sendet die Kommandos über einen virtuellen COM-Port mit folgenden Einstellungen:
- 115200 Baud
- no Parity
- 8 Zeichenbits
- 1 Stoppbit
Nachdem das Modem ein Kommando vollständig empfangen hat wird es auf den I2C-Bus angewendet. Anschließend wird vom Modem eine Antwort generiert und zum PC zurückgeschickt.
Diese Protokoll ist wie folgt aufgebaut:
- der Befehl
- die Anzahl der Bytes im Datenblock (maximal 128)
- der Datenblock selbst und
- das Ende-Zeichen (EOT= END OF TRANSMISSION).
VERSION
| Mit diesem Befehl lässt sich die aktuelle Firmware-Version ermitteln. Der Antwort-Frame enthält 3 Byte Nutzdaten, welche die Version der Firmware enthalten. |
MODEM-CALL
| Dieser Befehl hat die Aufgabe das Modem „anzustoßen“. Somit lässt sich ganz einfach feststellen ob das Modem noch mit dem PC verbunden ist oder ob es Probleme mit der USB-Verbindung gibt. |
PULLUP
| Der I2C-Bus braucht an einer Stelle im Netz eine Terminierung nach +5V. Dies wird in der Regel mit Widerständen gemacht. Bei der Kommunikation ziehen die Busteilnehmer diese High-Pegel auf Masse. Es gibt Anwendungen wo nicht am Master terminiert werden soll. Dann können die Pull-Up-Widerstände mit diesem Befehl abgeschaltet werden können. |
I2C-SPEED
| Mit diesem Befehl kann die Taktgeschwindigkeit am I2C-Bus zwischen 40 Hz und 350 kHz eingestellt werden. |
I2C-SET
| Mit diesem Befehl können zu Testzwecken die Signale INT , SCL und SDA einzeln auf High oder Low gesetzt werden. |
I2C-GET
| Mit I2C-Get wird der aktuelle Zustand der Signale INT , SCL und SDA abgefragt
|
I2C-DATA
| Mit diesem Befehl können Sie Daten von einem I2C-Slave empfangen, oder Daten an einen I2C-Slave senden. Ob Daten gesendet oder empfangen werden sollen erkennt das Modem an dem R/W-Bit in der Adresse. Ist das R/W-Bit (Bit 0) „Low“, werden Daten geschrieben. Ist das R/W-Bit „High“, werden Daten gelesen.
|
| |
Beispiel Daten lesen: Um Daten von einem I2C-Slave zu lesen wird im Datenblock erst die Adresse abgelegt und dann die gewünschte Anzahl der zu lesenden Bytes angegeben. Im Normalfall hat die Slave-Adresse eines I2C-Slaves nur 7 (bzw. 8) Bit. Da aber immer mehr IC´s mit 10 Bit breiter Adresse auf den Markt kommen wurde die Adresse in Byte aufgeteilt. Ist das MSB null, so interpretiert das Modem die übermittelte Adresse als eine 7 Bit Adresse. Stehen Daten im MSB, so wird ein 10 Bit breiter Adresszugriff generiert.
Im nachfolgenden Beispiel werden 5 Bytes von einem I2C-Slave an Adresse 161 gelesen.
Beispiel Daten schreiben:
Um I2C-Daten an einen Slave zu senden wird im Datenblock erst die Adresse abgelegt und dann die zu sendenden Daten hinterher geschoben.
Im nachfolgenden Beispiel werden 3 Bytes an einem I2C-Slave an Adresse 172 geschrieben.