Интерфейс I2C и Arduino

Интерфейс I2C и Arduino
Интерфейс I2C и Arduino
Anonim

В тази статия ще разгледаме какво представлява интерфейсът 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 шината.

Препоръчано: