În acest articol vom analiza ce este o interfață I2C (ay-tu-si, i-two-tse), care sunt caracteristicile sale și cum să lucrați cu ea.
Este necesar
- - Arduino;
- - potențiometru digital AD5171;
- - Dioda electro luminiscenta;
- - rezistor de 220 ohm;
- - 2 rezistențe pentru 4,7 kOhm;
- - conectarea firelor.
Instrucțiuni
Pasul 1
Protocolul de comunicație serial IIC (numit și I2C - Circuite inter-integrate) utilizează două linii de comunicații bidirecționale pentru a transfera date, numite magistrala SDA (Serial Data) și magistrala SCL (Serial Clock). Există, de asemenea, două linii electrice. Autobuzele SDA și SCL sunt trase până la magistrala de alimentare prin rezistențe.
Există cel puțin un Master în rețea care inițiază transmisia de date și generează semnale de sincronizare. Rețeaua are și sclavi care transmit date la cererea masterului. Fiecare dispozitiv sclav are o adresă unică la care se adresează comandantul. Adresa dispozitivului este indicată în pașaport (fișă tehnică). Până la 127 de dispozitive pot fi conectate la o singură magistrală I2C, inclusiv mai multe master-uri. Dispozitivele pot fi conectate la magistrală în timpul funcționării, adică acceptă conectarea la cald.
Pasul 2
Arduino folosește două porturi pentru a lucra pe interfața I2C. De exemplu, în Arduino UNO și Arduino Nano, portul analog A4 corespunde SDA, portul analog A5 corespunde SCL.
Pentru alte modele de bord:
Arduino Pro și 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
Pasul 3
Pentru a facilita schimbul de date cu dispozitive prin intermediul magistralei I2C, pentru Arduino a fost scrisă o bibliotecă standard „Wire”. Are următoarele funcții:
begin (adresa) - inițializarea bibliotecii și conexiunea la magistrala I2C; dacă nu este specificată nicio adresă, atunci dispozitivul conectat este considerat master; Se utilizează adresarea pe 7 biți;
requestFrom () - folosit de comandant pentru a solicita un anumit număr de octeți de la sclav;
beginTransmission (adresa) - începutul transferului de date către dispozitivul slave la o anumită adresă;
endTransmission () - încetarea transmiterii datelor către sclav;
write () - scrierea datelor de la sclav ca răspuns la o cerere;
available () - returnează numărul de octeți de informații disponibile pentru primirea de la sclav;
read () - citiți un octet transferat de la sclav la stăpân sau de la stăpân la sclav;
onReceive () - indică funcția care trebuie apelată atunci când sclavul primește o transmisie de la master;
onRequest () - Indică o funcție care trebuie apelată atunci când comandantul primește o transmisie de la sclav.
Pasul 4
Să vedem cum să funcționăm cu autobuzul I2C folosind Arduino.
În primul rând, vom asambla circuitul, așa cum se arată în figură. Vom controla luminozitatea LED-ului folosind potentiometrul digital AD5171 pe 64 de poziții, care se conectează la magistrala I2C. Adresa la care ne vom referi la potențiometru este 0x2c (44 în zecimal).
Pasul 5
Acum să deschidem o schiță din exemplele bibliotecii „Sârmă”:
Fișier -> Eșantioane -> Sârmă -> digital_potentiometru. Să-l încărcăm în memoria Arduino. Să-l pornim.
Vedeți, luminozitatea LED-ului crește ciclic și apoi se stinge brusc. În acest caz, controlăm potențiometrul folosind Arduino prin intermediul magistralei I2C.