Інтерфейс I2C і Arduino

У цій статті ми розглянемо, що таке інтерфейс 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

 

Related posts

 
 

Leave a Reply

Ваш e-mail не будет опубликован. Обязательные поля помечены *

http://poradumo.com.ua/158931-interfeis-i2c-i-arduino/