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]
© Copyright 2024 ExpyDoc