I²C

Lese­zeit: 2 Minu­ten

Der I²C-Bus (Inter Inte­gra­ted Cir­cuit) wur­de ursprüng­lich von Phil­ips ent­wi­ckelt, er soll­te die Kom­mu­ni­ka­ti­on mit einem Con­trol­ler (dem Ardui­no) und den ver­schie­de­nen Peri­phe­rie-Gerä­ten ermög­li­chen.
Wenn meh­re­re Peri­phe­rie-Gerä­ten ver­wen­det wer­den, kön­nen die Anschlüs­se SCL und SDA auf das Steck­brett hin­aus geführt wer­den und die Peri­phe­rie-Gerä­ten wer­den an den hori­zon­ta­len Pins angeschlossen.

Der dazu­ge­hö­ri­ge Schaltplan:

Der I²C-Bus kommt mit zwei Daten­lei­tun­gen aus:

  • die Takt­lei­tung SCL (Seri­al Clock) → A5 
  • die Daten­lei­tung SDA (Seri­al Data) → A4 

Statt A4 (SDA) und A5 (SCL) kannst du auch die mit SCL und SDA beschrif­te­ten Pins verwenden.

Jedes Bau­teil, das mit I2C ange­steu­ert wird, hat eine eige­ne Adres­se.
Die­se kannst du mit einem Pro­gramm herausfinden:

# include "Wire.h"

void setup()
{
  Wire.begin();
  Serial.begin(9600);
  delay(500);
  Serial.print("I2C Scanner");
}

void loop()
{
  byte Fehler, Adresse;
  int Geraete = 0;
  Serial.println("Starte Scanvorgang");

  for (Adresse = 1; Adresse < 127; Adresse++ )
  {
    // Übertragung starten
    Wire.beginTransmission(Adresse);

    // wenn die Übertragung beendet wird
    Fehler = Wire.endTransmission();

    if (Fehler == 0)
    {
      Serial.print("I2C Gerät gefunden - Adresse: 0x");
      if (Adresse < 16) Serial.print("0");
      Serial.print(Adresse, HEX);
      Serial.println("");
      Geraete++;
    }
  }
  if (Geraete == 0) Serial.println("Keine I2C Geräte gefunden\n");
  else Serial.println("Scanvorgang abgeschlossen");

  delay(10000);
}

  SPI-Bus  SPI-Bus 

Letzte Aktualisierung: 20. Nov 2023 @ 12:35