Elektronik

I2C Grundlagen

Für die bastelnden Vereinskollegen habe ich nützliche Informationen zum I2C Bus gesammelt. Meine eigenen Erfahrungen mit meinem I2C-Modul Zoo habe ich in einen zweiten Artikel hier verfrachtet.

Zum Nachlesen:

Probleme aus der Praxis:

  • Manche I2C Devices erfordern 5v, andere laufen an 3.3V (akzeptieren aber auch 5V), andere sind nicht 5V-tolerant. Man lese immer das Datenblatt genau!
  • Je nach Pegel ist der Einsatz eines Level Shifters nötig. Verschiedene Lösungen sind möglich (s.unten).
  • Fertig aufgebaute Module enthalten häufig schon die benötigten Pullup-Widerstände. Dies kann zu Problemen führen. Manchmal gibt es auftrennbare Lötbrücken zu den Pullups..
  • Man behalte die Buskapazität bei langen Leitungen im Auge. Bei Bedarf kontrolliere man die Signalform mit einem Oszilloskop.
  • Softwareseitig variiert die Ansteuerung (I2C in Hardware oder in SW realisiert). Dies hat einen Einfluss auf die maximale Busgeschwindigkeit.
  • Bei vermuteten logischen Problem hilft ein Bus Pirate oder auf höherer Ebene das geniale, aber wenig bekannte Realterm (Adapter nötig).

Ein schönes Trivial-Problem aus der Praxis: mit einem ESP8266 Board konnte ich ein BlinkM I2C Modul nicht ansprechen. Allerdings fand ein anderer I2C Scanner das Modul…Warum? In seinem Code wurde der SDA/SCL Pin gar nicht explizit gesetzt (Wire-begin()). Laut Doku beim ESP wäre der default SDA = D1 = GPIO5 und SCL = D2 = GPIO4 so anzugeben: Wire.begin(2,1). In meinem Code stand das so, da ich Ports immer explizit festlege (keine Annahmen, sondern die Voraussetzungen immer ausschreiben).
Lösung: es ist ein Dokumentationsfehler der Wire Library für ESP: in der Wire.begin Anweisung muss die GPIO Nummer stehen, also Wire.begin(4,5). Man merkt das daran, dass man mit Wire.begin(2,1) komische Zeichen im Arduino IDE Serial Monitor hat, Java Fehler…

Level Shifting


Update 20170717

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert