- Ce este protocolul de comunicare I2C?
- Cum funcționează comunicarea I2C?
- Unde se utilizează comunicarea I2C?
- I2C în MSP430: Controlarea potențiometrului digital AD5171
MSP430 este o platformă puternică furnizată de Texas Instruments pentru proiecte încorporate, caracterul său versatil a făcut să găsească căi în multe aplicații și faza este încă în desfășurare. Dacă ați urmărit tutorialele noastre MSP430, ați fi observat că am acoperit deja o gamă largă de tutoriale pe acest microcontroler începând de la elementele de bază. De acum, am acoperit elementele de bază în care putem intra în lucruri mai interesante, cum ar fi portalul de comunicare.
În vastul sistem de aplicații încorporate, niciun microcontroler nu poate efectua toate activitățile singur. La un moment dat, trebuie să comunice cu alte dispozitive pentru a partaja informații, există multe tipuri diferite de protocoale de comunicații pentru a partaja aceste informații, dar cele mai utilizate sunt USART, IIC, SPI și CAN. Fiecare protocol de comunicare are propriul avantaj și dezavantaj. Să ne concentrăm pe partea I2C pentru moment, deoarece asta vom învăța în acest tutorial.
Ce este protocolul de comunicare I2C?
Termenul IIC înseamnă „ Circuite integrate integrate ”. În mod normal este notat ca I2C sau I pătrat C sau chiar ca protocol de interfață cu 2 fire (TWI) în unele locuri, dar totul înseamnă același lucru. I2C este un protocol de comunicație sincron, ceea ce înseamnă că ambele dispozitive care partajează informațiile trebuie să partajeze un semnal de ceas comun. Are doar două fire pentru a partaja informații, dintre care unul este utilizat pentru semnalul cock și celălalt este utilizat pentru trimiterea și primirea de date.
Cum funcționează comunicarea I2C?
Comunicarea I2C a fost introdusă pentru prima dată de Phillips. Așa cum am spus mai devreme, are două fire, aceste două fire vor fi conectate pe două dispozitive. Aici un dispozitiv este numit master și celălalt este numit slave. Comunicarea ar trebui și va avea loc întotdeauna între doi un Maestru și un Sclav. Avantajul comunicației I2C este că mai mult de un sclav poate fi conectat la un Master.
Comunicarea completă are loc prin intermediul acestor două fire și anume Serial Clock (SCL) și Serial Data (SDA).
Serial Clock (SCL): Partajează semnalul de ceas generat de master cu sclavul
Serial Data (SDA): Trimite datele către și de la Master și slave.
În orice moment, numai comandantul va putea iniția comunicarea. Deoarece există mai mult de un sclav în autobuz, comandantul trebuie să se refere la fiecare sclav folosind o adresă diferită. Când este adresat, numai sclavul cu acea adresă particulară va răspunde cu informațiile în timp ce ceilalți continuă să renunțe. Astfel putem folosi același autobuz pentru a comunica cu mai multe dispozitive.
La nivelurile de tensiune de I2C nu sunt predefinite. Comunicarea I2C este flexibilă, înseamnă că dispozitivul care este alimentat de 5V volt, poate folosi 5v pentru I2C, iar dispozitivele de 3,3v pot folosi 3v pentru comunicarea I2C. Dar dacă două dispozitive care funcționează cu tensiuni diferite, trebuie să comunice folosind I2C? O magistrală I2C de 5V nu poate fi conectată cu dispozitivul de 3.3V. În acest caz, schimbătoarele de tensiune sunt utilizate pentru a se potrivi nivelurilor de tensiune dintre două autobuze I2C.
Există câteva seturi de condiții care încadrează o tranzacție. Inițializarea transmisiei începe cu o margine descendentă a SDA, care este definită ca starea „START” în diagrama de mai jos, în care masterul lasă SCL înalt în timp ce setează SDA scăzut.
După cum se arată în diagrama de mai sus, Marginea descendentă a SDA este declanșatorul hardware pentru starea START. După aceasta, toate dispozitivele din același autobuz intră în modul de ascultare.
În același mod, marginea ascendentă a SDA oprește transmisia, care este prezentată ca stare „STOP” în diagrama de mai sus, unde masterul lasă SCL înalt și eliberează și SDA pentru a merge HIGH. Deci, marginea ascendentă a SDA oprește transmisia.
Bitul R / W indică direcția de transmisie a următoarelor octeți, dacă este HIGH înseamnă că sclavul va transmite și dacă este scăzut înseamnă că masterul va transmite.
Fiecare bit este transmis pe fiecare ciclu de ceas, deci este nevoie de 8 cicluri de ceas pentru a transmite un octet. După fiecare octet trimis sau primit, al nouălea ciclu de ceas este ținut pentru ACK / NACK (confirmat / nerecunoscut). Acest bit ACK este generat fie de slave, fie de master, în funcție de situație. Pentru bitul ACK, SDA este setat la scăzut de către master sau slave la cel de-al 9- lea ciclu de ceas. Deci, este scăzut, considerat ACK altfel NACK.
Unde se utilizează comunicarea I2C?
Comunicarea I2C este utilizată numai pentru comunicarea pe distanțe scurte. Cu siguranță, este sigur într-o anumită măsură, deoarece are un impuls de ceas sincronizat pentru a-l face inteligent. Acest protocol este utilizat în principal pentru a comunica cu senzori sau alte dispozitive care trebuie să trimită informații unui master. Este foarte la îndemână atunci când un microcontroler trebuie să comunice cu multe alte module slave folosind un minim de numai fire. Dacă sunteți în căutarea unei comunicații pe termen lung, ar trebui să încercați RS232 și dacă căutați o comunicare mai fiabilă, ar trebui să încercați protocolul SPI
I2C în MSP430: Controlarea potențiometrului digital AD5171
Energia IDE este unul dintre cele mai ușoare programe pentru programarea MSP430. Este la fel ca Arduino IDE. Puteți afla mai multe despre Noțiuni introductive despre MSP430 folosind Energia IDE aici.
Deci, pentru a utiliza I2C în Energia IDE trebuie să includem doar fișierul header wire.h. Declarația pin (SDA și SCL) se află în biblioteca de fire, deci nu trebuie să declarăm în funcția de configurare .
Exemple de exemple pot fi găsite în meniul Exemplu al IDE. Unul dintre exemple este explicat mai jos:
Acest exemplu arată cum să controlați un potențiometru digital AD5171 Analog Devices care comunică prin protocolul serial sincron I2C. Folosind biblioteca I2C Wire MSP, oala digitală va trece prin 64 de niveluri de rezistență, decolorând un LED.
În primul rând, vom include biblioteca responsabilă pentru comunicația i2c, adică biblioteca fir
#include
În funcția de configurare , vom iniția biblioteca de fire prin funcția.begin () .
void setup () { Wire.begin (); }
Apoi inițializați un val variabil pentru a stoca valorile potențiometrului
octet val = 0;
În funcția de buclă , vom începe transmisia către dispozitivul i2c slave (în acest caz IC potențiometru digital) specificând adresa dispozitivului care este dată în foaia tehnică a IC.
bucla void () { Wire.beginTransmission (44); // transmite dispozitivului # 44 (0x2c)
Ulterior, octeți de coadă, adică date pe care doriți să le trimiteți la IC pentru transmisie cu funcția write () .
Wire.write (octet (0x00)); // trimite octet de instrucțiune Wire.write (val); // trimite octetul valorii potențiometrului
Apoi transmite-le apelând endTransmission () .
Wire.endTransmission (); // opri transmiterea val ++; // valoare increment dacă (val == 64) {// dacă a atins poziția 64 (max) val = 0; // reporniți de la cea mai mică valoare } întârziere (500); }