In diesem Artikel werden wir uns ansehen, was eine I2C-Schnittstelle (ay-tu-si, i-two-tse) ist, welche Funktionen sie hat und wie man damit arbeitet.
Es ist notwendig
- -Arduino;
- - digitales Potentiometer AD5171;
- - Leuchtdiode;
- - 220 Ohm Widerstand;
- - 2 Widerstände für 4,7 kOhm;
- - Anschlussdrähte.
Anleitung
Schritt 1
Das serielle IIC-Kommunikationsprotokoll (auch I2C - Inter-Integrated Circuits genannt) verwendet zwei bidirektionale Kommunikationsleitungen, um Daten zu übertragen, den SDA-Bus (Serial Data) und den SCL-Bus (Serial Clock). Es gibt auch zwei Stromleitungen. Die SDA- und SCL-Busse werden über Widerstände mit dem Power-Bus verbunden.
Es gibt mindestens einen Master im Netzwerk, der die Datenübertragung initiiert und Synchronisationssignale erzeugt. Das Netzwerk hat auch Slaves, die auf Anfrage des Masters Daten übertragen. Jedes Slave-Gerät hat eine eindeutige Adresse, unter der es vom Master adressiert wird. Die Geräteadresse ist im Passport (Datenblatt) angegeben. An einen I2C-Bus können bis zu 127 Geräte angeschlossen werden, darunter auch mehrere Master. Geräte können im laufenden Betrieb an den Bus angeschlossen werden, d.h. es unterstützt Hot-Plugging.
Schritt 2
Arduino verwendet zwei Ports, um an der I2C-Schnittstelle zu arbeiten. In Arduino UNO und Arduino Nano entspricht der analoge Port A4 beispielsweise SDA, der analoge Port A5 entspricht SCL.
Für andere Board-Modelle:
Arduino Pro und Pro Mini - A4 (SDA), A5 (SCL)
Arduino Mega - 20 (SDA), 21 (SCL)
Arduino Leonardo - 2 (SDA), 3 (SCL)
Arduino Due - 20 (SDA), 21 (SCL), SDA1, SCL1
Schritt 3
Um den Datenaustausch mit Geräten über den I2C-Bus zu erleichtern, wurde für den Arduino eine Standardbibliothek "Wire" geschrieben. Es hat folgende Funktionen:
begin (Adresse) - Initialisierung der Bibliothek und Verbindung zum I2C-Bus; wird keine Adresse angegeben, gilt das angeschlossene Gerät als Master; 7-Bit-Adressierung wird verwendet;
requestFrom () - wird vom Master verwendet, um eine bestimmte Anzahl von Bytes vom Slave anzufordern;
beginTransmission (Adresse) - der Beginn der Datenübertragung zum Slave-Gerät an einer bestimmten Adresse;
endTransmission () - Beendigung der Datenübertragung zum Slave;
write() – Schreiben von Daten vom Slave als Reaktion auf eine Anfrage;
available() - gibt die Anzahl von Informationsbytes zurück, die zum Empfangen vom Slave verfügbar sind;
read() - ein vom Slave zum Master oder vom Master zum Slave übertragenes Byte lesen;
onReceive () - gibt die Funktion an, die aufgerufen werden soll, wenn der Slave eine Übertragung vom Master empfängt;
onRequest () - Gibt eine Funktion an, die aufgerufen werden soll, wenn der Master eine Übertragung vom Slave erhält.
Schritt 4
Sehen wir uns an, wie Sie mit Arduino mit dem I2C-Bus arbeiten.
Zuerst bauen wir die Schaltung zusammen, wie in der Abbildung gezeigt. Wir werden die Helligkeit der LED mit dem digitalen 64-Positionen-Potentiometer AD5171 steuern, das mit dem I2C-Bus verbunden ist. Die Adresse, unter der wir uns auf das Potentiometer beziehen, ist 0x2c (44 in Dezimal).
Schritt 5
Öffnen wir nun eine Skizze aus den Beispielen der Bibliothek "Wire":
Datei -> Samples -> Wire -> digital_potentiometer. Laden wir es in den Arduino-Speicher. Lass es uns einschalten.
Sie sehen, die Helligkeit der LED steigt zyklisch an und erlischt dann plötzlich. In diesem Fall steuern wir das Potentiometer mit dem Arduino über den I2C-Bus.