In hierdie artikel gaan ons kyk na wat 'n I2C-koppelvlak (ay-tu-si, i-two-tse) is, wat die kenmerke daarvan is en hoe om daarmee te werk.
Dit is nodig
- - Arduino;
- - digitale potensiometer AD5171;
- - Liguitstralende diode;
- - 220 ohm weerstand;
- - 2 weerstande vir 4,7 kOhm;
- - verbindingsdrade.
Instruksies
Stap 1
Die IIC-seriële kommunikasieprotokol (ook I2C genoem - Inter-Integrated Circuits) gebruik twee tweerigtingkommunikasielyne om data oor te dra, genaamd die SDA (Serial Data) -bus en die SCL (Serial Clock) -bus. Daar is ook twee kraglyne. Die SDA- en SCL-busse word deur weerstande na die kragbus getrek.
Daar is minstens een meester in die netwerk wat data-oordrag inisieer en sinchronisasie-seine genereer. Die netwerk het ook slawe wat data oordra op versoek van die meester. Elke slaaftoestel het 'n unieke adres waarop die meester dit aanspreek. Die toesteladres word in die paspoort (datablad) aangedui. Tot 127 toestelle kan op een I2C-bus gekoppel word, waaronder verskeie meesters. Toestelle kan tydens die werking aan die bus gekoppel word, d.w.s. dit ondersteun hot plug.
Stap 2
Arduino gebruik twee poorte om aan die I2C-koppelvlak te werk. Byvoorbeeld, in Arduino UNO en Arduino Nano, kom analoogpoort A4 ooreen met SDA, analoogpoort A5 stem ooreen met SCL.
Vir ander bordmodelle:
Arduino Pro en 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
Stap 3
Om die uitruil van data met toestelle via die I2C-bus te vergemaklik, is 'n standaard "Wire" -biblioteek vir die Arduino geskryf. Dit het die volgende funksies:
begin (adres) - inisialisering van die biblioteek en verbinding met die I2C-bus; as geen adres gespesifiseer word nie, word die gekoppelde toestel as die meester beskou; 7-bis adres word gebruik;
requestFrom () - word deur die meester gebruik om 'n sekere aantal bytes van die slaaf aan te vra;
beginTransmissie (adres) - die begin van data-oordrag na die slaafapparaat op 'n spesifieke adres;
endTransmission () - beëindiging van data-oordrag na die slaaf;
skryf () - skryf data van die slaaf in antwoord op 'n versoek;
beskikbaar () - gee die aantal grepe inligting wat beskikbaar is vir ontvangs van die slaaf;
lees () - lees 'n byte wat oorgedra is van die slaaf na die meester of van die meester na die slaaf;
onReceive () - dui die funksie aan wat genoem moet word wanneer die slaaf 'n uitsending van die meester ontvang;
onRequest () - Dui aan dat 'n funksie geroep moet word wanneer die meester 'n uitsending van die slaaf ontvang.
Stap 4
Kom ons kyk hoe ons met die I2C-bus kan werk met Arduino.
Eerstens sal ons die stroombaan saamstel, soos getoon in die figuur. Ons sal die helderheid van die LED beheer met behulp van die AD5171 digitale potensiometer met 64 posisies, wat verbind word met die I2C-bus. Die adres waarna ons na die potensiometer gaan verwys, is 0x2c (44 in desimaal).
Stap 5
Laat ons nou 'n skets oopmaak uit die voorbeelde van die "Wire" -biblioteek:
Lêer -> Monsters -> Draad -> digitale_potentiometer. Kom ons laai dit in die Arduino-geheue. Laat ons dit aanskakel.
U sien, die helderheid van die LED styg siklies en gaan dan skielik uit. In hierdie geval beheer ons die potensiometer met behulp van die Arduino via die I2C-bus.