I denne artikel vil vi se på, hvad en I2C-grænseflade (ay-tu-si, i-two-tse) er, hvad er dens funktioner, og hvordan man arbejder med den.
Er det nødvendigt
- - Arduino;
- - digitalt potentiometer AD5171;
- - Lysdiode;
- - 220 ohm modstand;
- - 2 modstande til 4,7 kOhm;
- - tilslutning af ledninger.
Instruktioner
Trin 1
IIC seriel kommunikationsprotokol (også kaldet I2C - Inter-Integrated Circuits) bruger to tovejskommunikationslinjer til at overføre data, kaldet SDA (Serial Data) bus og SCL (Serial Clock) bus. Der er også to kraftledninger. SDA- og SCL-busserne trækkes op til motorbussen gennem modstande.
Der er mindst en master i netværket, der starter datatransmission og genererer synkroniseringssignaler. Netværket har også slaver, der transmitterer data efter masterens anmodning. Hver slaveenhed har en unik adresse, hvor masteren adresserer den. Enhedsadressen er angivet i pas (datablad). Op til 127 enheder kan tilsluttes til en I2C-bus, inklusive flere mastere. Enheder kan forbindes til bussen under drift, dvs. det understøtter hot plugging.
Trin 2
Arduino bruger to porte til at arbejde på I2C-grænsefladen. For eksempel i Arduino UNO og Arduino Nano svarer analog port A4 til SDA, analog port A5 svarer til SCL.
Til andre kortmodeller:
Arduino Pro og 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
Trin 3
For at lette udveksling af data med enheder via I2C-bussen er der blevet skrevet et standard "Wire" -bibliotek til Arduino. Den har følgende funktioner:
start (adresse) - initialisering af biblioteket og forbindelse til I2C-bussen; hvis der ikke er angivet en adresse, betragtes den tilsluttede enhed som master; 7-bit adressering bruges;
requestFrom () - bruges af masteren til at anmode om et bestemt antal bytes fra slave;
beginTransmission (adresse) - begyndelsen af dataoverførsel til slaveenheden på en bestemt adresse;
endTransmission () - afslutning af dataoverførsel til slaven;
skriv () - skrivning af data fra slaven som svar på en anmodning;
tilgængelig () - returnerer antallet af byte med information tilgængelig til modtagelse fra slaven;
læse () - læse en byte overført fra slave til master eller fra master til slave;
onReceive () - angiver den funktion, der skal kaldes, når slaven modtager en transmission fra mesteren;
onRequest () - Angiver en funktion, der skal kaldes, når masteren modtager en transmission fra slaven.
Trin 4
Lad os se, hvordan vi arbejder med I2C-bussen ved hjælp af Arduino.
Først samler vi kredsløbet som vist i figuren. Vi styrer lysstyrken på LED'en ved hjælp af det digitale potentiometer AD5171 64-position, der forbinder til I2C-bussen. Den adresse, hvor vi vil henvise til potentiometeret, er 0x2c (44 i decimal).
Trin 5
Lad os nu åbne en skitse fra bibliotekseksemplerne "Wire":
File -> Prøver -> Wire -> digital_potentiometer. Lad os indlæse det i Arduino-hukommelse. Lad os tænde det.
Ser du, lysdioden på LED stiger cyklisk og slukker pludselig. I dette tilfælde styrer vi potentiometeret ved hjælp af Arduino via I2C-bussen.