Sa artikulong ito titingnan natin kung ano ang isang interface ng I2C (ay-tu-si, i-two-tse), ano ang mga tampok nito at kung paano ito gagana.
Kailangan iyon
- - Arduino;
- - digital potentiometer AD5171;
- - Light-emitting diode;
- - 220 ohm risistor;
- - 2 resistors para sa 4.7 kOhm;
- - pagkonekta ng mga wire.
Panuto
Hakbang 1
Ang IIC serial komunikasyon na protokol (tinatawag din na I2C - Inter-Integrated Circuits) ay gumagamit ng dalawang linya ng komunikasyon para sa paglipat ng data, na tinatawag na bus ng SDA (Serial Data) at ang SCL (Serial Clock) bus. Mayroon ding dalawang linya ng kuryente. Ang mga bus ng SDA at SCL ay hinila hanggang sa power bus sa pamamagitan ng mga resistors.
Mayroong hindi bababa sa isang Master sa network na nagpasimula ng paghahatid ng data at bumubuo ng mga signal ng pagsabay. Ang network ay mayroon ding mga alipin na nagpapadala ng data sa kahilingan ng master. Ang bawat aparato ng alipin ay may natatanging address kung saan ito tinutugunan ng master. Ang address ng aparato ay ipinahiwatig sa pasaporte (datasheet). Hanggang sa 127 mga aparato ay maaaring konektado sa isang bus na I2C, kabilang ang maraming mga master. Ang mga aparato ay maaaring konektado sa bus sa panahon ng pagpapatakbo, ibig sabihin sinusuportahan nito ang mainit na pag-plug.
Hakbang 2
Gumagamit ang Arduino ng dalawang port upang magtrabaho sa interface ng I2C. Halimbawa, sa Arduino UNO at Arduino Nano, ang analog port A4 ay tumutugma sa SDA, ang analog port A5 ay tumutugma sa SCL.
Para sa iba pang mga modelo ng board:
Arduino Pro at Pro Mini - A4 (SDA), A5 (SCL)
Arduino Mega - 20 (SDA), 21 (SCL)
Arduino Leonardo - 2 (SDA), 3 (SCL)
Dahil sa Arduino - 20 (SDA), 21 (SCL), SDA1, SCL1
Hakbang 3
Upang mapadali ang pagpapalitan ng data sa mga aparato sa pamamagitan ng I2C bus, isang pamantayang "Wire" na aklatan ang isinulat para sa Arduino. Mayroon itong mga sumusunod na pagpapaandar:
simulan (address) - pagsisimula ng silid-aklatan at koneksyon sa I2C bus; kung walang tinukoy na address, ang nakakonektang aparato ay itinuturing na master; 7-bit addressing ang ginamit;
requestFrom () - ginamit ng master upang humiling ng isang tiyak na bilang ng mga byte mula sa alipin;
startTransmission (address) - ang simula ng paglipat ng data sa aparato ng alipin sa isang tukoy na address;
endTransmission () - pagwawakas ng paghahatid ng data sa alipin;
sumulat () - pagsulat ng data mula sa alipin bilang tugon sa isang kahilingan;
magagamit () - ibabalik ang bilang ng mga byte ng impormasyon na magagamit para sa pagtanggap mula sa alipin;
basahin () - basahin ang isang byte na inilipat mula sa alipin sa panginoon o mula sa panginoon sa alipin;
onReceive () - ipinapahiwatig ang pagpapaandar na tatawagin kapag ang alipin ay tumatanggap ng isang paghahatid mula sa master;
onRequest () - Nagpapahiwatig ng isang pagpapaandar na tatawagin kapag ang master ay tumatanggap ng isang paghahatid mula sa alipin.
Hakbang 4
Tingnan natin kung paano magtrabaho kasama ang I2C bus gamit ang Arduino.
Una, tipunin namin ang circuit, tulad ng ipinakita sa figure. Kami ay makokontrol ang liwanag ng LED gamit ang AD5171 64-posisyon digital potentiometer, na kumokonekta sa I2C bus. Ang address kung saan kami ay mag-refer sa potentiometer ay 0x2c (44 sa decimal).
Hakbang 5
Ngayon buksan natin ang isang sketch mula sa mga halimbawa ng library na "Wire":
File -> Mga Sample -> Wire -> digital_potentiometer. I-load natin ito sa memorya ng Arduino. Buksan natin ito.
Kita mo, ang ningning ng LED ay tumataas nang paikot, at pagkatapos ay biglang namatay. Sa kasong ito, kinokontrol namin ang potensyomiter gamit ang Arduino sa pamamagitan ng I2C bus.