I denne artikkelen vil vi se på hva et I2C-grensesnitt (ay-tu-si, i-two-tse) er, hva er dets funksjoner og hvordan du kan jobbe med det.
Det er nødvendig
- - Arduino;
- - digitalt potensiometer AD5171;
- - Lysdiode;
- - 220 ohm motstand;
- - 2 motstander for 4,7 kOhm;
- - tilkobling av ledninger.
Bruksanvisning
Trinn 1
IIC seriell kommunikasjonsprotokoll (også kalt I2C - Inter-Integrated Circuits) bruker to toveiskommunikasjonslinjer for å overføre data, kalt SDA (Serial Data) -bussen og SCL (Serial Clock) -bussen. Det er også to kraftledninger. SDA- og SCL-bussene blir trukket opp til kraftbussen gjennom motstander.
Det er minst en master i nettverket som starter dataoverføring og genererer synkroniseringssignaler. Nettverket har også slaver som overfører data på forespørsel fra mesteren. Hver slaveenhet har en unik adresse som mesteren adresserer den til. Enhetsadressen er angitt i passet (datablad). Opptil 127 enheter kan kobles til en I2C-buss, inkludert flere mestere. Enheter kan kobles til bussen under drift, dvs. den støtter varm plugging.
Steg 2
Arduino bruker to porter for å jobbe på I2C-grensesnittet. For eksempel, i Arduino UNO og Arduino Nano tilsvarer analog port A4 SDA, analog port A5 tilsvarer SCL.
For andre brettmodeller:
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
Trinn 3
For å lette utveksling av data med enheter via I2C-bussen, er det skrevet et standard "Wire" -bibliotek for Arduino. Den har følgende funksjoner:
start (adresse) - initialisering av biblioteket og tilkobling til I2C-bussen; hvis ingen adresse er spesifisert, blir den tilkoblede enheten regnet som master; 7-bit adressering brukes;
requestFrom () - brukes av mesteren til å be om et visst antall byte fra slaven;
beginTransmission (adresse) - begynnelsen av dataoverføring til slaveenheten på en bestemt adresse;
endTransmission () - avslutning av dataoverføring til slaven;
skriv () - skrive data fra slaven som svar på en forespørsel;
tilgjengelig () - returnerer antall byte med informasjon tilgjengelig for mottak fra slaven;
les () - les en byte overført fra slave til master eller fra master til slave;
onReceive () - indikerer funksjonen som skal kalles når slaven mottar en overføring fra mesteren;
onRequest () - Indikerer en funksjon som skal kalles når masteren mottar en overføring fra slaven.
Trinn 4
La oss se hvordan vi kan jobbe med I2C-bussen ved hjelp av Arduino.
Først vil vi montere kretsen, som vist på figuren. Vi vil kontrollere lysstyrken på LED-en ved hjelp av AD5171 64-posisjons digitale potensiometer, som kobles til I2C-bussen. Adressen der vi vil referere til potensiometeret er 0x2c (44 i desimal).
Trinn 5
La oss nå åpne en skisse fra "Wire" -bibliotekeksemplene:
Fil -> Prøver -> Ledning -> digital_potentiometer. La oss laste den inn i Arduino-minnet. La oss slå den på.
Ser du, lysstyrken på LED-en stiger syklisk, og slukker så plutselig. I dette tilfellet styrer vi potensiometeret ved hjelp av Arduino via I2C-bussen.