Der I2C Bus ist ein 2-Draht Bus mit den Leitungen SCL (clock) und SDA (data). Er wird auf Platinen zwischen zwei Geräten / ICs verwendet. Die Hersteller der ICs geben die I2C Bus Adresse vor, manchmal können die unteren Bits angepasst werden, da theoretisch nur 128 Adressen zu Verfügung stehen und zwei ICs auf der selben Adresse liegen könnten.
Der Bus hat einen Master (hier der Arduino) und bis zu 112 Slaves (verschiedene ICs mit unterschiedlichen Adressen).
Hier die I2C Beschreibung bei Wikipedia.
Beim Arduino wird die Library Wire.h für die I2C Befehle eingebunden.
Der TWI Bus ist identisch mit dem standard I2C Bus.
Ein einfaches Arduino Programm scannt alle Adressen im I2C Bus und gibt die verwendeten Adressen aus.
// I²C Scanner aus dem Arduino.cc forum // Netzfund, unbekannter Autor. // Sucht I2C Geräte an den Adressen 0...127 und gibt bei gefundenen Geräten die Adresse aus. // // Matthias Busse 22.9.2018 Version 1.0 #include <Wire.h> void setup() { Wire.begin(); Serial.begin(38400); while (!Serial); Serial.println("\nI2C Scanner"); } void loop() { byte error, address; int nDevices; Serial.println("scannen..."); nDevices = 0; for(address = 1; address < 127; address++ ) { // Der i2c Scanner nimmt den Rückgabewert von Write.endTransmisstion um zu schauen ob ein Gerät auf dieser Adresse antwortet. Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) { Serial.print("I2C Geraet gefunden an Adresse 0x"); if (address<16) Serial.print("0"); Serial.println(address,HEX); nDevices++; } else if (error==4) { Serial.print("Unbekannter Fehler an Addresse 0x"); if (address<16) Serial.print("0"); Serial.println(address,HEX); } } if (nDevices == 0) Serial.println("Kein I2C Geraet gefunden\n"); else Serial.println("fertig\n"); delay(5000); // 5 Sekunden warten bis zum nächsten durchlauf }
Und hier die Ausgabe
I2C Scanner scannen... I2C Geraet gefunden an Adresse 0x68 fertig
von Matthias Busse