- Ano ang I2C Communication Protocol?
- Paano gumagana ang I2C Communication?
- Saan gagamitin ang komunikasyon ng I2C?
- I2C sa MSP430: Pagkontrol sa AD5171 Digital Potentiometer
Ang MSP430 ay isang malakas na platform na ibinigay ng Texas Instruments para sa mga naka-embed na proyekto, ang maraming nalalaman na likas na katangian na ito ay ginawa upang makahanap ng mga paraan sa maraming mga application at ang yugto ay patuloy pa rin. Kung sinusundan mo ang aming mga tutorial sa MSP430 pagkatapos ay napansin mo na sakop na namin ang malawak na hanay ng mga tutorial sa microcontroller na ito simula sa mga pangunahing kaalaman. Mula ngayon, natakpan namin ang mga pangunahing kaalaman na maaari naming makuha sa mas kawili-wiling mga bagay tulad ng portal ng komunikasyon.
Sa malawak na sistema ng mga naka-embed na application, walang microcontroller ang maaaring gumanap ng lahat ng mga aktibidad nang mag-isa. Sa ilang yugto ng oras kailangang makipag-usap sa iba pang mga aparato upang makapagbahagi ng impormasyon, maraming iba't ibang mga uri ng mga protocol sa komunikasyon upang maibahagi ang mga impormasyong ito, ngunit ang pinaka ginagamit ay USART, IIC, SPI at CAN. Ang bawat komunikasyon protocol ay may sariling kalamangan at kawalan. Ituon natin ang bahagi ng I2C sa ngayon dahil iyan ang matututunan natin sa tutorial na ito.
Ano ang I2C Communication Protocol?
Ang term na IIC ay nangangahulugang " Inter Integrated Circuits ". Karaniwan itong tinukoy bilang I2C o In-square ko ang C o kahit na bilang 2-wire interface protocol (TWI) sa ilang mga lugar ngunit pareho ang ibig sabihin nito. Ang I2C ay isang magkasabay na protocol ng komunikasyon na nangangahulugang, kapwa ang mga aparato na nagbabahagi ng impormasyon ay dapat magbahagi ng isang karaniwang signal ng orasan. Mayroon lamang itong dalawang wires upang magbahagi ng impormasyon kung saan alin ang ginagamit para sa signal ng titi at ang iba pa ay ginagamit para sa pagpapadala at pagtanggap ng data.
Paano gumagana ang I2C Communication?
Ang komunikasyon ng I2C ay unang ipinakilala ni Phillips. Tulad ng sinabi nang mas maaga mayroon itong dalawang mga wires, ang dalawang wires na ito ay maiugnay sa dalawang mga aparato. Dito ang isang aparato ay tinawag na master at ang iba pang aparato ay tinawag bilang alipin. Ang komunikasyon ay dapat at laging magaganap sa pagitan ng dalawa isang Master at isang Alipin. Ang bentahe ng komunikasyon sa I2C ay ang higit sa isang alipin na maaaring konektado sa isang Master.
Ang kumpletong komunikasyon ay nagaganap sa pamamagitan ng dalawang wires na ito na, Serial Clock (SCL) at Serial Data (SDA).
Serial Clock (SCL): Ibinabahagi ang signal ng orasan na nabuo ng master sa alipin
Serial Data (SDA): Ipinapadala ang data papunta at mula sa pagitan ng Master at alipin.
Sa anumang naibigay na oras ang master lamang ang maaaring makapagsimula ng komunikasyon. Dahil mayroong higit sa isang alipin sa bus, kailangang sumangguni ang master sa bawat alipin na gumagamit ng ibang address. Kapag tinutugunan lamang ang alipin na may partikular na address na iyon ay tutugon kasama ang impormasyon habang ang iba naman ay patuloy na umalis. Sa ganitong paraan maaari naming magamit ang parehong bus upang makipag-usap sa maraming mga aparato.
Ang mga antas ng boltahe ng I2C ay hindi pa natukoy. Ang komunikasyon ng I2C ay may kakayahang umangkop, nangangahulugang ang aparato na pinalakas ng 5v volt, maaaring gumamit ng 5v para sa I2C at ang mga 3.3v na aparato ay maaaring gumamit ng 3v para sa komunikasyon ng I2C. Ngunit paano kung ang dalawang aparato na tumatakbo sa iba't ibang mga voltages, kailangang makipag-usap gamit ang I2C? Ang isang 5V I2C bus ay hindi maaaring konektado sa 3.3V aparato. Sa kasong ito, ginagamit ang mga boltahe na shifter upang tumugma sa mga antas ng boltahe sa pagitan ng dalawang mga bus na I2C.
Mayroong ilang mga hanay ng mga kundisyon na nag-frame ng isang transaksyon. Ang pagsisimula ng paghahatid ay nagsisimula sa isang bumabagsak na gilid ng SDA, na tinukoy bilang kundisyon na 'MAGSIMULA' sa ibaba ng diagram kung saan mataas ang iwan ng master ng SCL habang mababa ang setting ng SDA.
Tulad ng ipinakita sa diagram sa itaas sa ibaba, Ang pagbagsak ng gilid ng SDA ay ang nagpapalitaw ng hardware para sa kundisyon ng SIMULA. Pagkatapos nito ang lahat ng mga aparato sa parehong bus ay pumunta sa mode ng pakikinig.
Sa parehong pamamaraan, ang tumataas na gilid ng SDA ay tumitigil sa paghahatid na ipinapakita bilang kundisyon na 'STOP' sa diagram sa itaas, kung saan ang master ay umalis sa SCL na mataas at naglalabas din ng SDA upang pumunta sa TAAS. Kaya't ang tumataas na gilid ng SDA ay tumitigil sa paghahatid.
Ipinapahiwatig ng R / W bit ang direksyon ng paghahatid ng mga sumusunod na byte, kung ito ay TAAS nangangahulugang ang alipin ay magpapadala at kung ito ay mababa ay nangangahulugang ang master ay magpapadala.
Ang bawat bit ay ipinapadala sa bawat pag-ikot ng orasan, kaya't tumatagal ng 8 cycle ng orasan upang makapagpadala ng isang byte. Matapos ang bawat byte na ipadala o natanggap, ikasiyam na ikot ng orasan ay gaganapin para sa ACK / NACK (kinikilala / hindi kinikilala). Ang ACK bit na ito ay nabuo ng alinman sa alipin o master depende sa sitwasyon. Para sa ACK bit, ang SDA ay nakatakda sa mababang ng master o alipin sa ika- 9 na ikot ng orasan. Kaya't mababa ito ay isinasaalang-alang bilang ACK kung hindi man NACK.
Saan gagamitin ang komunikasyon ng I2C?
Ang komunikasyon ng I2C ay ginagamit lamang para sa komunikasyon sa maikling distansya. Tiyak na maaasahan ito sa isang lawak dahil mayroon itong isang naka-synchronize na pulso ng orasan upang gawin itong matalino. Pangunahing ginagamit ang protokol na ito upang makipag-ugnay sa sensor o iba pang mga aparato na kailangang magpadala ng impormasyon sa isang master. Napaka-madaling gamiting kapag ang isang microcontroller ay kailangang makipag-usap sa maraming iba pang mga module ng alipin na gumagamit ng isang minimum na mga wire lamang. Kung naghahanap ka para sa isang mahabang hanay ng komunikasyon dapat mong subukan ang RS232 at kung naghahanap ka para sa mas maaasahang komunikasyon dapat mong subukan ang SPI protocol.
I2C sa MSP430: Pagkontrol sa AD5171 Digital Potentiometer
Ang Energia IDE ay isa sa pinakamadaling software na mai-program ang aming MSP430. Kapareho ito ng Arduino IDE. Maaari kang matuto nang higit pa tungkol sa Pagsisimula sa MSP430 gamit ang Energia IDE dito.
Kaya, upang magamit ang I2C sa Energia IDE kailangan nating isama lamang ang wire.h header file. Ang deklarasyon ng pin (SDA at SCL) ay nasa loob ng wire library, kaya hindi namin kailangang ideklara sa pag- andar ng pag- setup .
Ang mga halimbawa ng halimbawa ay matatagpuan sa Halimbawa ng menu ng IDE. Ang isa sa mga halimbawa ay ipinaliwanag sa ibaba:
Ipinapakita ng halimbawang ito kung paano makontrol ang isang Analog Devices AD5171 Digital Potentiometer na nakikipag-usap sa pamamagitan ng I2C na magkasabay na serial protocol. Gamit ang I2C Wire Library ng MSP, ang digital pot ay sususok sa 64 mga antas ng paglaban, kumukupas sa isang LED.
Una, isasama namin ang library na responsable para sa i2c na komunikasyon ie wire library
# isama
Sa pag- andar ng pag- setup , sisimulan namin ang wire library sa pamamagitan ng .begin () function.
void setup () { Wire.begin (); }
Pagkatapos ay simulan ang isang variable na val upang mag-imbak ng mga halaga ng potensyomiter
byte val = 0;
Sa pagpapaandar ng loop , sisimulan namin ang paghahatid sa i2c na aparato ng alipin (sa kasong ito Digital potentiometer IC) sa pamamagitan ng pagtukoy ng address ng aparato na ibinibigay sa datasheet ng IC.
void loop () { Wire.beginTransmission (44); // transfer to device # 44 (0x2c)
Kasunod, mga pila ng byte ie data na nais mong ipadala sa IC para sa paghahatid na may function na magsulat () .
Wire.write (byte (0x00)); // nagpapadala ng pagtuturo byte Wire.write (val); // nagpapadala ng potentiometer na halaga byte
Pagkatapos ihatid ang mga ito sa pamamagitan ng pagtawag sa endTransmission () .
Wire.endTransmission (); // ihinto ang paglilipat ng val ++; // increment halaga kung (val == 64) {// kung umabot sa ika-64 na posisyon (max) val = 0; // start over mula sa pinakamababang halaga } pagkaantala (500); }