I den här artikeln kommer vi att titta på vad ett I2C-gränssnitt (ay-tu-si, i-two-tse) är, vad är dess funktioner och hur man arbetar med det.
Det är nödvändigt
- - Arduino;
- - digital potentiometer AD5171;
- - Ljusdiod;
- - 220 ohm motstånd;
- - 2 motstånd för 4,7 kOhm;
- - anslutande ledningar.
Instruktioner
Steg 1
IIC-seriekommunikationsprotokollet (även kallat I2C - interintegrerade kretsar) använder två dubbelriktade kommunikationslinjer för att överföra data, kallad SDA (Serial Data) -bussen och SCL (Serial Clock) -bussen. Det finns också två kraftledningar. SDA- och SCL-bussarna dras upp till kraftbussen genom motstånd.
Det finns minst en master i nätverket som initierar dataöverföring och genererar synkroniseringssignaler. Nätverket har också slavar som överför data på befälhavarens begäran. Varje slavenhet har en unik adress där mastern adresserar den. Enhetsadressen anges i passet (datablad). Upp till 127 enheter kan anslutas till en I2C-buss, inklusive flera mastrar. Enheter kan anslutas till bussen under drift, dvs. den stöder hot plugging.
Steg 2
Arduino använder två portar för att arbeta på I2C-gränssnittet. Till exempel, i Arduino UNO och Arduino Nano motsvarar analog port A4 SDA, analog port A5 motsvarar SCL.
För andra kortmodeller:
Arduino Pro och 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
Steg 3
För att underlätta utbyte av data med enheter via I2C-bussen har ett standard "Wire" -bibliotek skrivits för Arduino. Den har följande funktioner:
start (adress) - initialisering av biblioteket och anslutning till I2C-bussen; om ingen adress anges, anses den anslutna enheten vara master; 7-bitars adressering används;
requestFrom () - används av mastern för att begära ett visst antal byte från slaven;
beginTransmission (adress) - början av dataöverföring till slavenheten vid en specifik adress;
endTransmission () - avslutning av dataöverföring till slaven;
skriv () - skriva data från slaven som svar på en begäran;
tillgänglig () - returnerar antalet byte med information tillgänglig för mottagning från slaven;
läs () - läs en byte överförd från slaven till befälhavaren eller från befälhavaren till slaven;
onReceive () - indikerar funktionen som ska anropas när slaven tar emot en sändning från mastern;
onRequest () - Indikerar en funktion som ska anropas när mastern tar emot en överföring från slaven.
Steg 4
Låt oss se hur man arbetar med I2C-bussen med Arduino.
Först kommer vi att montera kretsen, som visas i figuren. Vi kommer att styra ljusstyrkan på lysdioden med hjälp av AD5171 64-position digital potentiometer, som ansluts till I2C-bussen. Adressen till vilken vi kommer att hänvisa till potentiometern är 0x2c (44 i decimal).
Steg 5
Låt oss nu öppna en skiss från biblioteksexemplen "Wire":
File -> Prover -> Wire -> digital_potentiometer. Låt oss ladda det i Arduino-minnet. Låt oss sätta på den.
Du förstår, lysdioden på lysdioden stiger cykliskt och slocknar sedan plötsligt. I det här fallet styr vi potentiometern med hjälp av Arduino via I2C-bussen.