USB > I2C- Bus Modul

USB > I2C- Bus Modul
Info
Das USB > I2C-Bus Modul stellt eine Verbindung zwischen einen PC und dem I2C-Bus her.
Über ein Terminal Programm können nun Daten zum I2C-Bus gesendet und vom I2C-Bus
empfangen werden. Des Weiteren steht auch noch ein „virtueller Portexpander“ zur
Verfügung, der sich so ähnlich wie ein PGF8574 verhält. Damit lassen sich die Ports vom
virtuellen Portexpander als digitale Ein- und Ausgänge verwenden.
Befehle in der Übersicht
Mit Hilfe von Buchstaben werden verschiedene Befehle eingeleitet, die zur Steuerung des
I2C-Buses nötig sind. Hierbei ist auch auf Groß- und Kleinschreibung zu achten. Nach jedem
Befehl muss ein Leerzeichen eingegeben werden, damit die Befehle und Daten auch eindeutig
zugewiesen werden können.
Befehle
S
ohne Zeichen
R
r
E
P
p
i
Beschreibung
Startet den I2C-Bus
Daten senden
Daten einlesen ACK senden
Daten einlesen NACK senden
Stoppt den I2C-Bus
Pausenzeit in 10x ms (max. 1 Stunde)
Pausenzeit in 1x ms (max. 500ms)
invertiert ein zu sendendes Byte
S-Befehl
Das „S“ leitet den Start des I2C-Buses ein. Dieser Befehl muss mit einer I2C-Bus Adresse
kombiniert werden. Beispiel: „S112“ Es wird nun der I2C-Bus geöffnet und die Adresse 112
(dezimal) angesprochen.
ohne Zeichen / i-Befehl
Daten die über den I2C-Bus gesendet werden bekommen kein Vorzeichen. Die Zahlenwerte
können zwischen 0 und 255 liegen (Größe eines Bytes). Beispiel: „77“ Die 77 (dezimal) wird
als ASCII Code direkt zum Modul übertragen. Möchte man eine Zahl invertieren, weil z.B.
auch die Hardware invertiert wurde, dann wir der Zahl ein kleines „i“ voran gestellt. Beispiel:
„i77“ Es wir nun nicht mehr die Zahl 77 gesendet, sondern die Zahl 178. Damit lassen sich
die einzelnen Bits eines Bytes also problemlos invertieren (umdrehen).
R-Befehl / r-Befehl
Mit dem „R“ werden Daten vom I2C-Bus eingelesen. Verwendet man ein großes „R“, dann
wird ein ACK zum Slave gesendet, welches signalisiert dass das einlesen der Daten
erfolgreich war. Verwendet man ein kleines „r“, dann wir kein ACK übertragen, woraufhin
der Slave das Ende des Daten Einlesens erkennt. Nach Verwendung eines kleinen „r“ muss
der I2C-Bus mir „E“ geschlossen werden.
E-Befehl
Mit dem „E“ wird der I2C-Bus geschlossen. Erst nach dem schließen kann wieder eine neue
I2C-Bus Adresse angesprochen werden.
P-Befehl / p-Befehl
Das „P“ steht für eine Pause. Dieser Befehl kann verwendet werden wenn der I2C-Bus
geöffnet oder geschlossen ist. Das große „P“ steht für eine Paus X * 10ms. Beispiel: „P100“
Mit P100 wird also 1000ms (1 Sekunde) gewartet. Die maximal größte Zahl die hier mit
übergeben werden darf ist ein Word (65535) und damit lassen sich Pausenzeiten von ca. 1
Stunde realisieren. Das kleine „p“ steht für eine Paus X * 1ms. Beispiel: „p5“ Mit p5 wird
eine Pausenzeit von 5ms realisiert.
Befehle
T1
T2
T3
T4
T5
T6
T7
T8
T10
T11
T12
T13
T14
T15
T16
T17
T18
Beschreibung
I2C-Bus Geschwindigkeit 50KHz
I2C-Bus Geschwindigkeit 100KHz
I2C-Bus Geschwindigkeit 150KHz
I2C-Bus Geschwindigkeit 200KHz
I2C-Bus Geschwindigkeit 250KHz
I2C-Bus Geschwindigkeit 300KHz
I2C-Bus Geschwindigkeit 350KHz
I2C-Bus Geschwindigkeit 400KHz
1200 Baud einstellen
2400 Baud einstellen
4800 Baud einstellen
9600 Baud einstellen
14400 Baud einstellen
19200 Baud einstellen
28800 Baud einstellen
38400 Baud einstellen
76800 Baud einstellen
T1 bis T8 Befehle
Mit „T1“ bis „T8“ lässt sich die I2C-Bus Geschwindigkeit einstellen. Hierbei ist allerdings zu
beachten dass durch die Übertragung vom PC auch ein wenig Zeit vergeht, daher stimmen die
Geschwindigkeiten nicht 100%-tig. Die Einstellungen werden im EEprom gespeichert, sie
müssen also nur einmal eingestellt werden. Die Einstellungen lassen sich nur vornehmen
wenn der I2C-Bus geschlossen ist.
T10 bis T18 Befehle
Mit „T10“ bis „T18“ lässt sich die Baudrate der RS232 einstellen
(Übertragungsgeschwindigkeit vom USB-Port). Die eingestellte Baudrate muss mit der
Baudrate vom Terminal Programm übereinstimmen, ansonsten wird hier nur Müll im
Terminal Programm angezeigt. Der Default Wert ist hier 38400 Baud. Die Einstellungen
werden im EEprom gespeichert, sie müssen also nur einmal eingestellt werden. Die
Einstellungen lassen sich nur vornehmen wenn der I2C-Bus geschlossen ist.
Befehle
B1
B2
B3
B4
B5
B6
B7
B8
B10
B11
Beschreibung
User Befehl1
User Befehl2
User Befehl3
User Befehl4
User Befehl5
User Befehl6
User Befehl7
User Befehl8
Info und Einstellungen einlesen
I2C-Bus durchsuchen
B1 bis B8 Befehle
Hier wird im EEprom Speicherplatz für „User-Befehle“ bereit gestellt. Ein User Befehl darf
maximal 62 Byte lang sein. Welche Daten hier gespeichert werden ist im Prinzip egal, es
macht aber nur Sinn auch Befehle und Zahlen zu verwenden die das USB>I2C-Bus Modul
auch erkennt. Sollten die 62 Bytes für eine Befehlskette nicht ausreichen, dann kann auch auf
einen anderen User Befehl verwiesen werden. Beispiel:
User-Befehl1: S144 238 E P50 S144 34 E S144 170 S145 r E B2
User-Befehl2: S144 168 S145 r E S144 169 S145 r E
Wird nun „B1“ aufgerufen, dann wird der Inhalt von „User-Befehl1“ abgearbeitet und
anschließend der Inhalt von „User-Befehl2“. Zu beachten ist hierbei dass die „B“ Befehle nur
aufgerufen werden können wenn der I2C-Bus geschlossen ist. Die User Befehle müssen auch
nur einmal eingerichtet werden, nach einem Neustart stehen sie auch wieder zur Verfügung.
B10-Befehl
Mit „B10“ können die Einstellungen vom USB>I2C-Bus Modul ausgelesen werden. Es
werden auch die Speicherzellen der User Befehle angezeigt.
B11-Befehl
Mit „B11“ kann der I2C-Bus durchsucht werden. Es werden anschließend alle I2C-Bus
Adressen angezeigt die gefunden wurden. Auch wenn keine I2C-Bus Bausteine angeschlossen
sind, wird die Adresse 2 (dezimal) gefunden. Hierbei handelt es sich um die Adresse des
„virtuellen Portexpanders“.
Befehle
X1
X2
X3
X4
X5
X6
X7
X8
X20
X21
Beschreibung
User Befehl1 erstellen
User Befehl2 erstellen
User Befehl3 erstellen
User Befehl4 erstellen
User Befehl5 erstellen
User Befehl6 erstellen
User Befehl7 erstellen
User Befehl8 erstellen
Reset, Hardware neu starten
Default Werte laden
X1 bis X8 Befehle
Mit den „X1“ bis „X8“ Befehlen werden die Speicherzellen für die „User-Befehle“ 1 bis 8
beschrieben. Beispiel: „X1 S2 255 E“ Hier wird nun die Befehlskette „S2 255 E“ im UserBefehl1 gespeichert. Mit „B1“ kann das die Befehlskette wieder aufgerufen und abgearbeitet
werden.
X20-Befehl
Mit „X20“ läst sich das USB>I2C-Bus Modul resetten bzw. neu starten. Der Befehl kann
aufgerufen werden wenn der I2C-Bus geöffnet oder geschlossen ist. Sollte ein
Programmfehler auftreten, dann resettet sich das Modul aber auch von alleine.
HINWEIS
Der Befehl hat keine Auswirkung auf eine Pause, sprich ein Pausenabbruch kann damit nicht
eingeleitet werden. Auch „User-Befehle“ lassen sich mit dem Befehl nicht unterbrechen.
X21-Befehl
Mit „X21“ können die Default Einstellungen geladen werden. Hierbei werden auch alle User
Befehle gelöscht.
Der virtuelle Portexpander
Der virtuelle Portexpander verhält sich ähnlich wie ein PCF8574 Portexpander. Hier stehen
insgesamt 8 Ports zur Verfügung, die als digitale Ein- und Ausgänge verwendet werden
können. Die Ports arbeiten „Open Drain“, sprich sie schalten nur nach Masse. Die 5V Plus
werden also nur über die internen Pull-Up Widerstände bereit gestellt, wodurch die Ports
nicht nach Plus schalten können (entspricht dem PCF8574). Eine gemischte Beschaltung als
Ein- und Ausgänge könnte z.B. so aussehen.
Aus kompatibilitäts- Gründen ist die Schreibadresse „2“ und die Leseadresse „3“. Es spielt
aber keine Rolle welche Adresse verwendet wird, auf beide Adressen kann lesend und
schreibend zugegriffen werden. Da die Hardware Beschaltung invertiert aufgebaut wurde
(siehe Bild), ist es auch sinnvoll invertiert auf den Portexpander zu zugreifen. Sollen alle
LEDs ausgeschaltet werden, dann sieht der Befehl so aus: „S2 i0 E“ (alternativ ohne
Invertierung: „S2 255 E“). Und sollen alle ELDs eingeschaltet werden, dann sieht der Befehl
so aus: „S2 i255 E“ (alternativ ohne Invertierung „S2 0 E“). Möchte man nun ermitteln
welche Ports „geschaltet“ wurden, dann sieht der Befehl so aus: „S3 r E“. Da hier nur ein
Byte ausgelesen wird muss ein kleines „r“ verwendet werden. Sollen die Portzustände
mehrmals hintereinander, mit einem Zeitabstand von 1 Sekunde eingelesen werden, dann
sieht der Befehl so aus: „S3 R P100 R P100 r E“ Es werden nun dreimal hintereinander die
Portzustände eingelesen, mit einen Zeitabstand von 1 Sekunde. Die Werte werden dann im
Terminal Programm angezeigt.
Beispiele
Schaltet alle Ports eines PCF8574 an Adresse 112 (dezimal) auf High.
S112 255 E
Schaltet nur Port1 eines PCF8574 an Adresse 112 auf High, die anderen Ports auf Low.
S112 1 E
Liest die Ports eines PCF8574 an Adresse 112 ein.
S112 255 S113 r E
Temperatur eines DS1621 an Adresse 144 einlesen (Temperatur, Counter und Slope).
S144 238 E P50 S144 34 E S144 170 S145 r E S144 168 S145 r E S144 169 S145 r E
Schreibt in Speicherzelle 5 eines 24C256 EEproms die Zahl 77 (I2C-Bus Adresse: 160).
S160 0 5 77 E
Liest Speicherzelle 5 eines 24C256 EEproms an Adresse 160 aus.
S160 0 5 S161 r E
Liest Speicherzelle 5, 6, 7, 8 und 9 eines 24C256 EEproms an Adresse 160 aus.
S160 0 5 S161 R R R R r E
Lizenz
Das USB>I2C-Bus Modul ist Freeware und darf für die private Nutzung uneingeschränkt
eingesetzt werden. Dass Kopierrecht bleibt aber auf Seiten des Autors.
Haftung
Das USB>I2C-Bus Modul wurde ausführlich getestet, es kann aber leider nicht sichergestellt
werden dass auch alles Fehlerfrei funktioniert. Der Autor dieses Moduls übernimmt keinerlei
Haftung für Personen oder Sachschäden, die durch die direkte oder indirekte Nutzung dieses
Moduls entstehen sollten. Der Benutzer dieses Moduls erklärt sich hiermit einverstanden die
Gewährleistungsbeschränkung an zu erkennen, anderenfalls darf dieses Modul nicht
verwendet werden. Die Nutzung dieses Moduls geschieht ausdrücklich auf eigene Gefahr.
Autor
© 2010 Jens Gürtler
Fehlermeldungen und Verbesserungsvorschläge bitte an: [email protected]