- Čo je komunikačný protokol I2C?
- Ako funguje komunikácia I2C?
- Kde využiť komunikáciu I2C?
- I2C v MSP430: Ovládanie digitálneho potenciometra AD5171
MSP430 je výkonná platforma, ktorú poskytuje Texas Instruments pre vstavané projekty. Vďaka svojej všestrannej povahe je schopná hľadať cesty k mnohým aplikáciám a fáza stále pokračuje. Ak ste sledovali naše výukové programy pre MSP430, určite by ste si všimli, že sme už prebrali širokú škálu výučieb pre tento mikrokontrolér, počnúc úplnými základmi. Od tejto chvíle sme prebrali základné informácie, ktoré môžeme dostať k zaujímavejším veciam, ako je komunikačný portál.
V rozsiahlom systéme zabudovaných aplikácií nemôže žiadny mikrokontrolér vykonávať všetky činnosti sám. V určitej fáze času musí komunikovať s ostatnými zariadeniami na zdieľanie informácií, existuje mnoho rôznych typov komunikačných protokolov na zdieľanie týchto informácií, ale najpoužívanejšie sú USART, IIC, SPI a CAN. Každý komunikačný protokol má svoje vlastné výhody a nevýhody. Teraz sa zamerajme na časť I2C, pretože to sa v tomto návode naučíme.
Čo je komunikačný protokol I2C?
Pojem IIC znamená „ integrované obvody “. Normálne sa na niektorých miestach označuje ako I2C alebo I na druhú C alebo dokonca ako 2-vodičový protokol rozhrania (TWI), ale všetko to znamená to isté. I2C je synchrónny komunikačný protokol, čo znamená, že obe zariadenia, ktoré zdieľajú informácie, musia zdieľať spoločný hodinový signál. Má iba dva vodiče na zdieľanie informácií, z ktorých jeden sa používa na signál kohútika a druhý na odosielanie a prijímanie údajov.
Ako funguje komunikácia I2C?
Komunikáciu I2C prvýkrát predstavil Phillips. Ako už bolo povedané, má dva vodiče, tieto dva vodiče budú prepojené cez dve zariadenia. Tu sa jedno zariadenie nazýva hlavný a druhé zariadenie sa nazýva slave. Komunikácia by mala a vždy bude prebiehať medzi dvoma Master a Slave. Výhodou I2C komunikácie je, že k Master môže byť pripojených viac ako jeden slave.
Kompletná komunikácia prebieha prostredníctvom týchto dvoch káblov, a to Serial Clock (SCL) a Serial Data (SDA).
Serial Clock (SCL): Zdieľa hodinový signál generovaný hlavnou jednotkou s podradenou jednotkou
Serial Data (SDA): Sends the data to and from between the Master and slave.
V ktoromkoľvek okamihu bude môcť komunikáciu zahájiť iba hlavný server. Pretože v zbernici je viac ako jeden slave, musí master odkazovať na každého slave pomocou inej adresy. Ak je adresovaný iba otrok s touto konkrétnou adresou, odpovie späť informáciami, zatiaľ čo ostatní zostanú bez ukončenia. Týmto spôsobom môžeme použiť rovnakú zbernicu na komunikáciu s viacerými zariadeniami.
Tieto úrovne napätia na I2C nie sú preddefinované. Komunikácia I2C je flexibilná, to znamená, že zariadenie, ktoré je napájané 5 V, môže používať 5 V pre I2C a zariadenia 3,3 V môžu používať 3 V pre komunikáciu I2C. Čo však v prípade, keď dve zariadenia bežiace na rôzne napätia musia komunikovať pomocou I2C? 5V I2C bus nemôže byť spojený s 3,3 zariadením. V takom prípade sa na zosúladenie úrovní napätia medzi dvoma zbernicami I2C používajú meniče napätia.
Existuje niekoľko podmienok, ktoré rámcujú transakciu. Inicializácia prenosu začína klesajúcou hranou SDA, ktorá je definovaná ako podmienka „ŠTART“ v nasledujúcom diagrame, kde master ponecháva SCL vysokú pri nastavovaní nízkej SDA.
Ako je znázornené na vyššie uvedenom diagrame, Klesajúca hrana SDA je hardvérová spúšť pre podmienku START. Potom všetky zariadenia na tej istej zbernici prejdú do režimu počúvania.
Rovnakým spôsobom zastaví nábežná hrana SDA prenos, ktorý sa vo vyššie uvedenom diagrame zobrazuje ako stav „STOP“, kde hlavná jednotka ponechá SCL vysoko a tiež uvoľní SDA, aby vyšla HIGH. Nábežná hrana SDA teda zastaví prenos.
Bit R / W označuje smer vysielania nasledujúcich bajtov, ak je HIGH znamená, že slave bude vysielať a ak je nízky, znamená to, že master bude vysielať.
Každý bit sa prenáša v každom hodinovom cykle, takže prenos bajtu trvá 8 hodinových cyklov. Po každom odoslanom alebo prijatom bajte sa pre ACK / NACK drží deviaty hodinový cyklus (potvrdený / nepotvrdený). Tento bit ACK je generovaný podradeným alebo riadiacim zariadením v závislosti od situácie. Pre ACK bit, SDA je nastavená na minimum tým, master alebo slave v 9 -tého takte. Takže je nízka, považuje sa to za ACK, inak NACK.
Kde využiť komunikáciu I2C?
Komunikácia I2C sa používa iba na komunikáciu na krátke vzdialenosti. Je to do istej miery spoľahlivé, pretože má synchronizovaný hodinový impulz, aby bol inteligentný. Tento protokol sa používa hlavne na komunikáciu so senzorom alebo inými zariadeniami, ktoré musia odosielať informácie nadriadenému. Je to veľmi užitočné, keď mikrokontrolér musí komunikovať s mnohými ďalšími podradenými modulmi pomocou minimálne iba drôtov. Ak hľadáte komunikáciu na veľké vzdialenosti, mali by ste vyskúšať RS232 a ak hľadáte spoľahlivejšiu komunikáciu, vyskúšajte protokol SPI.
I2C v MSP430: Ovládanie digitálneho potenciometra AD5171
Energia IDE je jedným z najjednoduchších softvérov na programovanie nášho MSP430. Je to rovnaké ako Arduino IDE. Viac informácií o Začíname s MSP430 pomocou nástroja Energia IDE sa dozviete tu.
Aby sme teda mohli použiť I2C v Energia IDE, musíme len zahrnúť hlavičkový súbor wire.h. Deklarácia pinov (SDA a SCL) je vo vnútri knižnice drôtov, takže nemusíme deklarovať vo funkcii nastavenia .
Vzorové príklady nájdete v ponuke Príklad IDE. Jeden z príkladov je vysvetlený nižšie:
Tento príklad ukazuje, ako riadiť digitálny potenciometer Analog Devices AD5171, ktorý komunikuje prostredníctvom synchrónneho sériového protokolu I2C. Pomocou knižnice I2C Wire Library od spoločnosti MSP bude digitálny hrniec prechádzať cez 64 úrovní odporu a bude blednúť LED.
Najskôr zahrnieme knižnicu zodpovednú za komunikáciu i2c, tj drôtovú knižnicu
#include
Vo funkcii nastavenia začneme knižnicu drôtov funkciou.begin () .
void setup () { Wire.begin (); }
Potom inicializovať premenné val pre ukladanie hodnôt potenciometrom
bajt val = 0;
Vo funkcii slučky začneme prenos na podriadené zariadenie i2c (v tomto prípade digitálny potenciometer IC) zadaním adresy zariadenia, ktorá je uvedená v údajovom liste IC.
void loop () { Wire.beginTransmission (44); // prenos do zariadenia # 44 (0x2c)
Následne zoraďte bajty, tj dáta, ktoré chcete poslať IC na prenos s funkciou write () .
Wire.write (bajt (0x00)); // pošle inštrukčný bajt Wire.write (val); // odošle bajt hodnoty potenciometra
Potom ich preneste volaním endTransmission () .
Wire.endTransmission (); // zastavenie vysielania val ++; // hodnota prírastku if (val == 64) {// ak bola dosiahnutá 64. pozícia (max) val = 0; // začať od najnižšej hodnoty } oneskorenie (500); }