User manual

39 40
Der I2C Bus ist eine serielle Schnittstelle, die mit zwei Leitungen auskommt. Der Taktleitung SCL und der
Datenleitung SDA. Die Leitungen arbeiten bidirektional, man unterscheidet zwischen Master und Slave. Der
NANO ist in unserem Fall der Master und die anderen Bricks sind Slaves. Die Bausteine werden über I2C Adres-
sen angesprochen, 128 sind pro Bus möglich. Dabei können einzelne Bausteine auch mehrere Adressen bele-
gen. Manche Bausteine haben auf der Rückseite kleine DIL-Schalter, so daß man die Adressbereiche umschalten
kann, wenn mehrere Bausteine am gleichen Bus verwendet werden.
Der Bus kann im Prinzip mit unterschiedlichen Geschwindigkeiten betrieben werden:
Standard Mode (Sm) 0.1MBit/sec
Fast Mode (Fm) 0.4MBit/sec
High Speed Mode (HS-mode) 1.0MBit/Sec
Ultra Fast-Mode (UFm) 5.0Mbit/Sec.
Viele Microcontroller können nur die ersten beide Modi (zum Beispiel die CPU des Arduino Nano) und manch-
mal noch den dritten Mode handeln. Das gleiche gilt für die Peripheriebausteine. Die Modi müssen natürlich
zusammenpassen. Der Master, also meist der Microcontroller, gibt dabei den Takt vor, dazu dient die Leitung
SCL (Serial Clock). Über SDA (Serial Data) werden die eigentlichen Daten übertragen.
6. I2C BUS
6.1 I2C Bus Aufbau Prinzip und Befehle
Gerät 1
Gerät 2 Gerät n
V+
...
SCL
SDA
Man kann maximal 128 Geräte an den Bus anschließen, wenn jedes der Geräte nur eine Adresse belegt, sonst
entsprechend weniger. Hier mit Gerät 1 bis n angedeutet. Die Geräte sind alle über zwei Leitungen verbunden.
Zwei Widerstände zur Versorgungsspannung (Arduino meist 5V manchmal auch 3.3V), der Wert liegt im Kilo-
ohmbereich. Die Widerstände sind bei uns schon im Nano-Brick eingebaut.
Auszug aus Atmel 328 Datenblatt
Auszug aus Atmel 328 Datenblatt
Auszug aus Atmel 328 Datenblatt
Der Takt gibt dabei immer an, wann stabile Daten anliegen, oben im
Diagramm sieht man, dass dies immer beim High-Pegel der Fall ist.
Der Empfänger kann dort die Daten abtasten und auswerten. Der
Master gibt dabei den Takt vor, er legt dann entweder selbst Daten
an oder erwartet sie an den entsprechenden Abfragepunkten.
Im oberen Diagramm sieht man einen Datentransfer zerlegt in Master, Transmitter und Receiver als Sender
und Empfänger. Der Master gibt den Takt vor. Wichtig ist die Synchronisation. Der Empfänger (egal ob Master
oder Slave) sendet am Schluss jedes Datenpakets ein ACK-Signal, indem er die Leitung auf Low zieht. Da dies
ein Wire OR ist, reicht es wenn ein Slave antwortet. Oben zeigt sich das SDA-Signal als Gesamtheit, also so wie
es auf der SDA-Leitung anliegt.
Hier das Beispiel einer gesamten Datenübertragung. Zunächst wird ein Paket mit der Adresse gesendet. Die
Adresse besteht aus 7 Bits. Der Empfänger vergleicht dies dann mit seiner internen Adresse. Es kommt noch ein
weiteres mit R/W benanntes Bit hinzu. Es deniert ob ein Schreib oder Lesezyklus vom Slave gestartet werden
soll. Stimmt die Adresse überein, so antwortet der Slave mit ACK, legt die Leitung an der entsprechend vorge-
sehenen Stelle auf einen Low Pegel, bei uns 0V. Danach kann der Datentransfer beginnen. Am Schluss wird ein
Stop-Zyklus eingeleitet. Dazu wird der Takt auf High gesetzt (wegen der Low-Activen Logik nicht mehr akti-
viert), und dann die SDA Leitung freigegeben. Nun kann auch ein anderen Master, falls man mehrere auf dem
Bus hat, den Zyklus neu starten. Die Leitungen SDA und SCL sind beide auf High, das bedeutet dass der I2C Bus
frei verwendbar ist.
Der Bus ist einfach nutzbar, dazu stellt die Arduino Bibliothek mehrere Befehle bereit, die wir im folgenden
verwenden werden, um I2C Bausteine an den Nano-Brick anzuschließen.