В тази статия ще разгледаме какво представлява интерфейсът I2C (ay-tu-si, i-two-tse), какви са неговите характеристики и как се работи с него.
Необходимо е
- - Arduino;
- - цифров потенциометър AD5171;
- - Светодиод;
- - резистор 220 ома;
- - 2 резистора за 4.7 kOhm;
- - свързващи проводници.
Инструкции
Етап 1
Протоколът за последователна комуникация IIC (наричан още I2C - Inter-Integrated Circuits) използва две двупосочни комуникационни линии за прехвърляне на данни, наречени SDA (Serial Data) шина и SCL (Serial Clock) шина. Има и две електропроводи. SDA и SCL шините се изтеглят към силовата шина чрез резистори.
Има поне един главен в мрежата, който инициира предаване на данни и генерира сигнали за синхронизация. Мрежата също има подчинени, които предават данни по искане на главния. Всяко подчинено устройство има уникален адрес, на който главният го адресира. Адресът на устройството е посочен в паспорта (лист с данни). Към една I2C шина могат да бъдат свързани до 127 устройства, включително няколко главни. Устройствата могат да бъдат свързани към шината по време на работа, т.е. поддържа горещо включване.
Стъпка 2
Arduino използва два порта за работа по интерфейса I2C. Например в Arduino UNO и Arduino Nano аналоговият порт A4 съответства на SDA, аналоговият порт A5 съответства на SCL.
За други модели дъски:
Arduino Pro и Pro Mini - A4 (SDA), A5 (SCL)
Arduino Mega - 20 (SDA), 21 (SCL)
Ардуино Леонардо - 2 (SDA), 3 (SCL)
Arduino Due - 20 (SDA), 21 (SCL), SDA1, SCL1
Стъпка 3
За да се улесни обменът на данни с устройства през I2C шината, за Arduino е написана стандартна библиотека "Wire". Той има следните функции:
начало (адрес) - инициализация на библиотеката и свързване към I2C шината; ако не е посочен адрес, тогава свързаното устройство се счита за главно; Използва се 7-битово адресиране;
requestFrom () - използва се от главното устройство, за да поиска определен брой байтове от подчиненото устройство;
beginTransmission (адрес) - началото на прехвърляне на данни към подчиненото устройство на определен адрес;
endTransmission () - прекратяване на предаването на данни към подчиненото;
write () - запис на данни от подчинения в отговор на заявка;
available () - връща броя байтове информация, достъпна за получаване от подчиненото устройство;
read () - чете байт, прехвърлен от подчинения към главния или от главния към подчинения;
onReceive () - показва функцията, която трябва да се извика, когато подчиненият получи предаване от главния;
onRequest () - Показва функция, която да бъде извикана, когато главното устройство получи предаване от подчиненото устройство.
Стъпка 4
Нека да видим как да работим с I2C шината, използвайки Arduino.
Първо, ще съберем веригата, както е показано на фигурата. Ще контролираме яркостта на светодиода, използвайки AD5171 64-позиционен цифров потенциометър, който се свързва към I2C шината. Адресът, на който ще се позоваваме на потенциометъра, е 0x2c (44 в десетична запетая).
Стъпка 5
Сега нека отворим скица от примерите на библиотеката "Wire":
Файл -> Проби -> Тел -> цифров_потенциометър. Нека го заредим в паметта на Arduino. Да го включим.
Виждате ли, яркостта на светодиода се повишава циклично и след това изведнъж изгасва. В този случай ние контролираме потенциометъра с помощта на Arduino през I2C шината.