- Què és el protocol de comunicació I2C?
- Com funciona la comunicació I2C?
- On utilitzar la comunicació I2C?
- I2C a MSP430: control del potenciòmetre digital AD5171
MSP430 és una potent plataforma subministrada per Texas Instruments per a projectes incrustats, la seva versatilitat ha permès trobar vies per a moltes aplicacions i la fase encara continua. Si heu seguit els nostres tutorials MSP430, hauríeu notat que ja hem cobert una àmplia gamma de tutorials sobre aquest microcontrolador a partir dels fonaments bàsics. Des d’ara, hem tractat els conceptes bàsics que ens permeten aprofundir en coses més interessants, com ara el portal de comunicació.
En el vast sistema d'aplicacions incrustades, cap microcontrolador pot realitzar totes les activitats per si mateix. En algun moment del temps ha de comunicar-se amb altres dispositius per compartir informació, hi ha molts tipus diferents de protocols de comunicació per compartir aquesta informació, però els més utilitzats són USART, IIC, SPI i CAN. Cada protocol de comunicació té el seu propi avantatge i desavantatge. Centrem-nos en la part I2C per ara, ja que això és el que aprendrem en aquest tutorial.
Què és el protocol de comunicació I2C?
El terme IIC significa " Circuits integrats inter ". Normalment es denomina I2C o I al quadrat C o fins i tot com a protocol d'interfície de dos fils (TWI) en alguns llocs, però tot significa el mateix. I2C és un protocol de comunicació síncrona que significa que tots dos dispositius que comparteixen la informació han de compartir un senyal de rellotge comú. Només té dos cables per compartir informació, dels quals un s'utilitza per al senyal del gall i l'altre s'utilitza per enviar i rebre dades.
Com funciona la comunicació I2C?
Phillips va introduir per primera vegada la comunicació I2C. Com s'ha dit anteriorment, té dos cables, aquests dos cables es connectaran a través de dos dispositius. Aquí un dispositiu s’anomena mestre i l’altre es diu esclau. La comunicació s'ha de produir i es produirà sempre entre dos Mestres i Esclaus. L’avantatge de la comunicació I2C és que es pot connectar més d’un esclau a un mestre.

La comunicació completa es realitza a través d'aquests dos cables, a saber, el rellotge en sèrie (SCL) i les dades en sèrie (SDA).
Rellotge en sèrie (SCL): comparteix el senyal de rellotge generat pel mestre amb l’esclau
Dades de sèrie (SDA): envia les dades entre i des del mestre fins a l'esclau.
En qualsevol moment, només el mestre podrà iniciar la comunicació. Com que hi ha més d’un esclau al bus, el mestre ha de referir-se a cada esclau amb una adreça diferent. Quan s'adreça només l'esclau amb aquesta adreça en particular respondrà amb la informació mentre els altres continuen deixant de fumar. D’aquesta manera podem utilitzar el mateix bus per comunicar-nos amb diversos dispositius.
Els nivells de tensió de l'I2C no estan predefinits. La comunicació I2C és flexible, és a dir, el dispositiu que funciona amb 5 V de potència, pot utilitzar 5 V per a I2C i els dispositius de 3,3 V poden utilitzar 3 V per a la comunicació I2C. Però, i si dos dispositius que funcionen amb tensions diferents, necessiten comunicar-se mitjançant I2C? No es pot connectar un bus I2C de 5V amb un dispositiu de 3,3V. En aquest cas, els variadors de tensió s’utilitzen per fer coincidir els nivells de tensió entre dos busos I2C.
Hi ha un conjunt de condicions que emmarquen una transacció. La inicialització de la transmissió comença amb una vora descendent de SDA, que es defineix com a condició "START" al diagrama següent, on el mestre deixa SCL alt mentre posa SDA baix.

Com es mostra al diagrama anterior, La vora descendent de SDA és el disparador de maquinari per a la condició START. Després d'això, tots els dispositius del mateix bus passen al mode d'escolta.
De la mateixa manera, la vora ascendent de SDA atura la transmissió que es mostra com a condició "STOP" al diagrama superior, on el mestre deixa SCL alt i també allibera SDA per passar a HIGH. De manera que la vora ascendent de SDA atura la transmissió.

El bit R / W indica la direcció de transmissió dels següents bytes, si és ALTA significa que l’esclau transmetrà i si és baix significa que transmetrà el mestre.
Cada bit es transmet en cada cicle de rellotge, de manera que es necessiten 8 cicles de rellotge per transmetre un byte. Després de cada byte enviat o rebut, es manté el novè cicle de rellotge per a l'ACK / NACK (reconegut / no reconegut). Aquest bit ACK el genera l'esclau o el mestre en funció de la situació. Per ACK va mossegar, SDA s'estableix en baix pel mestre o esclau en 9 º cicle de rellotge. Per tant, és baix, es considera ACK en cas contrari.

On utilitzar la comunicació I2C?
La comunicació I2C només s’utilitza per a comunicacions a curta distància. Sens dubte, és fiable fins a un cert punt, ja que té un pols de rellotge sincronitzat per fer-lo intel·ligent. Aquest protocol s’utilitza principalment per comunicar-se amb sensors o altres dispositius que han d’enviar informació a un mestre. És molt útil quan un microcontrolador ha de comunicar-se amb molts altres mòduls esclaus mitjançant un mínim de només cables. Si busqueu una comunicació de llarg abast, proveu RS232 i si busqueu una comunicació més fiable, proveu el protocol SPI.
I2C a MSP430: control del potenciòmetre digital AD5171
Energia IDE és un dels programes més fàcils de programar el nostre MSP430. És el mateix que Arduino IDE. Podeu obtenir més informació sobre Com començar a utilitzar MSP430 amb Energia IDE aquí.
Per tant, per utilitzar I2C a Energia IDE només hem d’incloure el fitxer de capçalera wire.h. La declaració de pins (SDA i SCL) es troba dins de la biblioteca de cables, de manera que no necessitem declarar en funció de configuració .
Es poden trobar exemples de mostra al menú Exemple de l'IDE. A continuació s’explica un dels exemples:
Aquest exemple mostra com controlar un Potenciómetre digital Analog Devices AD5171 que es comunica mitjançant el protocol sèrie síncron I2C. Utilitzant la biblioteca de filferro I2C de MSP, l’olla digital passarà per 64 nivells de resistència, esvaint un LED.
En primer lloc, inclourem la biblioteca responsable de la comunicació i2c, és a dir, la biblioteca per cable
#incloure
A la funció de configuració , iniciarem la biblioteca de cables mitjançant la funció .begin () .
void setup () { Wire.begin (); }
A continuació, inicialitzeu un val variable per emmagatzemar els valors del potenciòmetre
byte val = 0;
En funció de bucle , iniciarem la transmissió al dispositiu esclau i2c (en aquest cas IC de potenciòmetre digital) especificant l'adreça del dispositiu que es dóna al full de dades de l'IC.
bucle buit () { Wire.beginTransmission (44); // transmet al dispositiu núm. 44 (0x2c)
Posteriorment, feu una cua de bytes, és a dir, les dades que voleu enviar a l'IC per a la seva transmissió amb la funció write () .
Wire.write (byte (0x00)); // envia el byte d'instruccions Wire.write (val); // envia un byte de valor del potenciòmetre
A continuació, transmeteu-los trucant a endTransmission () .
Wire.endTransmission (); // deixar de transmetre val ++; // valor d’increment si (val == 64) {// si s’arriba a la 64a posició (màx.) val = 0; // tornar a començar des del valor més baix } delay (500); }
