У цій статті ми розглянемо, що таке інтерфейс I2C (ай-ту-сі, і-два-це), у чому його особливості і як з ним працювати.

Интерфейс i2c

Вам знадобиться

  • – Arduino;
  • – цифровий потенціометр AD5171;
  • – світлодіод;
  • – резистор на 220 Ом;
  • – 2 резистора на 4,7 кОм;
  • – з’єднувальні дроти.

Інструкція

1. Послідовний протокол обміну даними IIC (також званий I2C – Inter-Integrated Circuits, межмикросхемное з’єднання) використовує для передачі даних дві двонаправлені лінії зв’язку, які називаються шина послідовних даних SDA (Serial Data) і шина тактирования SCL (Serial Clock). Також є дві лінії для харчування. Шини SDA і SCL підтягуються до шини живлення через резистори. В мережі є хоча б одне провідне пристрій (Master), яке робить передачу даних і генерує сигнали синхронізації. В мережі також є ведені пристрої (Slave), які передають дані по запиту ведучого. У кожного веденого пристрою є унікальний адресу, за якою ведучий і звертається до нього. Адреса пристрою вказується в паспорті (datasheet). До однієї шині I2C може бути підключено до 127 пристроїв, у тому числі кілька провідних. До шині можна підключати пристрої в процесі роботи, тобто вона підтримує “гаряче підключення”.

Схема подключения по интерфейсу I2C

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)Arduino Leonardo – 2 (SDA), 3 (SCL)Arduino Due – 20 (SDA), 21 (SCL), SDA1, SCL1

Соответствие выводов Arduino шинам SDA и SCL

3. Для полегшення обміну даними з пристроями по шині I2C для Arduino написана стандартна бібліотека “Wire”. Вона має наступні функції:begin(address) – ініціалізація бібліотеки і підключення до шини I2C; якщо не зазначено адресу, то приєднане пристрій вважається провідним; використовується 7-бітна адресація;requestFrom() – використовується провідним пристроєм для запиту певної кількості байтів від веденого;beginTransmission(address) – початок передачі даних до веденого пристрою за певною адресою;endTransmission() – припинення передачі даних веденому;write() – запис даних від веденого у відповідь на запит;available() – повертає кількість байт інформації, доступних для прийому від веденого;read() – читання байта, переданого від веденого провідному або від провідного веденому;onReceive() – вказує на функцію, яка повинна бути викликана, коли ведений пристрій отримає передачу від ведучого;onRequest() – вказує на функцію, яка повинна бути викликана, коли провідне пристрій отримає передачу від веденого.

4. Давайте подивимося, як працювати з шиною I2C з допомогою Arduino. Спочатку зберемо схему, як на малюнку. Будемо управляти яскравістю світлодіода, використовуючи цифровий 64-позиційний потенціометр AD5171, який підключається до шини I2C. Адреса, за якою ми будемо звертатися до потенциометру – 0x2c (44 у десятковій системі).

Схема управления светодиодом с помощью цифрового потенциометра и Arduino

5. Тепер відкриємо з прикладів бібліотеки “Wire” скетч: Файл -> Зразки -> Wire -> digital_potentiometer. Завантажимо його в пам’ять Arduino. Включимо. Ви бачите, яскравість світлодіода циклічно наростає, а потім різко гасне. При цьому ми управляємо потенціометром з допомогою Arduino по шині I2C.

Скетч управления цифровым потенциометром по шине I2C

НАПИСАТИ ВІДПОВІДЬ

Please enter your comment!
Please enter your name here