Все про шину Arduino I2C

Шина Arduino I2C

з Arduino може створювати велику кількість проектів як ви бачили, читаючи Hwlibre, програмування мікроконтролера простим способом. Але між аналоговим і цифровим підключенням цієї плати hardware libre, є деякі, які все ще дещо невідомі багатьом початківцям, як-от справжній потенціал з’єднань ШІМ, SPI, штифтів RX і TX послідовного порту або самої шини I2C. Таким чином, з цим записом ви зможете принаймні знати все, що вам потрібно про I2C.

з шина I2C Ви можете підключати та використовувати багато сторонніх пристроїв, які мають цей тип протоколу, для зв’язку з платою Arduino. Між ними ви можете підключити акселерометри, дисплеї, лічильник, компаси та багато інших інтегральних схем завдяки цьому винаходу Philips.

Що таке I2C?

I2C відноситься до інтегральної схеми, тобто міжінтегральна схема. Це послідовна шина передачі даних, розроблена в 1982 році компанією Philips Semiconductors, яка сьогодні є NXP Semiconductors після позбавлення від цього розділу. Спочатку він був створений для телевізорів цього бренду для простого зв'язку декількох внутрішніх мікросхем. Але з 1990 року I2C поширився і використовується багатьма виробниками.

В даний час використовується десятками виробників чіпів для декількох функцій. Atmel, творець мікроконтролерів для плат Arduino, представив позначення TWI (Two Wired Interface) для ліцензування, хоча воно ідентичне I2C. Але в 2006 році термін дії оригінального патенту закінчився і більше не є об’єктом авторського права, тому термін I2C був використаний повторно (лише логотип продовжує захищатись, але його застосування або використання цього терміну не обмежено).

Технічні деталі шини I2C

Шина I2C

El Шина I2C стала галузевим стандартом, і Arduino це впровадив для зв'язку з периферійними пристроями, які цього потребують. Для його роботи потрібні лише дві лінії або кабелі, один для тактового сигналу (CLK), а інший для надсилання послідовних даних (SDA). Це вигідно порівняно з іншими комунікаціями порівняно з шиною SPI, хоча його робота дещо складніша через необхідну додаткову схему.

На цьому автобусі кожен підключений до нього пристрій має адресу використовується для індивідуального доступу до цих пристроїв. Ця адреса фіксується апаратним забезпеченням, модифікуючи останні 3 біти за допомогою перемичок або перемикачів DIP, хоча це також можна зробити за допомогою програмного забезпечення. Кожен пристрій матиме унікальну адресу, хоча кілька з них можуть мати однакову адресу, і може знадобитися використовувати вторинну шину, щоб уникнути конфліктів або змінити її, якщо це можливо.

Крім того, шина I2C має Архітектура типу Master-Slave, тобто господар-раб. Це означає, що коли зв'язок починається головним пристроєм, він зможе надсилати або отримувати дані від своїх підлеглих. Раби не зможуть ініціювати спілкування, лише господар може це зробити, і раби не можуть безпосередньо розмовляти між собою без втручання господаря.

Якщо у вас є кілька вчителів в автобусі, викладачем одночасно може виступати лише один. Але це не варто, оскільки зміна вчителя вимагає великої складності, тому вона нечаста.

Майте на увазі, що master подає тактовий сигнал для синхронізації всіх пристроїв на шині. Це позбавляє потреби кожного раба мати свій власний годинник.

Протокол шини I2C також передбачає використання підтягуючих резисторів у лініях напруги живлення (Vcc), хоча ці резистори зазвичай не використовуються з Arduino підтягування, оскільки бібліотеки програмування оскільки Дріт активує внутрішні зі значеннями 20-30 к. Це може бути занадто м'яким для деяких проектів, тому висхідні краї сигналу будуть повільнішими, тому можна використовувати менші швидкості та менші відстані зв'язку. Щоб виправити це, вам може знадобитися встановити зовнішні підтягуючі резистори від 1k до 4k7.

Сигнал

Сигнал I2C

La кадр спілкування з яких сигнал шини I2C складається з бітів або станів (тих, що використовуються в Arduino, оскільки стандарт I2C дозволяє інші):

  • 8 біт, з них 7 напрямок підпорядкованого пристрою, до якого ви хочете отримати доступ, щоб надіслати або отримати з нього дані. Завдяки 7 бітам можна створити до 128 різних адрес, щоб теоретично можна було отримати доступ до 128 пристроїв, але отримати доступ лише до 112, оскільки 16 зарезервовано для спеціального використання. І додатковий біт, який вказує, якщо ви хочете відправити або отримати інформація про підлеглий пристрій.
  • Існує також біт перевірки, якщо воно не активне, спілкування буде недійсним.
  • Тоді байти даних що вони хочуть відправити або отримати рабами. Як відомо, кожен байт складається з 8 бітів. Зверніть увагу, що для кожного 8-бітного або 1 байта даних, що надсилаються або отримуються, потрібно додатково 18 біт перевірки, адреси тощо, що означає, що шина дуже обмежена у швидкості.
  • Останній шматочок перевірка спілкування.

Крім того, тактова частота для частота передачі - 100 МГц, хоча існує швидший режим на 400 МГц.

Переваги та недоліки шини I2C

The перевага звук:

  • Простота використовуючи лише два рядки.
  • Це є механізми, щоб дізнатись, чи надійшов сигнал порівняно з іншими протоколами зв'язку.

The Недоліки звук:

  • Швидкість досить низька передача.
  • Це не повний дуплекс, тобто ви не можете одночасно надсилати та отримувати.
  • Не використовує паритет ні будь-який інший тип механізму перевірки, щоб дізнатись, чи правильно отримані біти даних.

I2C на Arduino

Шина Arduino I2C

En Arduino, залежно від моделі, шпильки, які можна ввімкнути для використання цієї шини I2C, різняться. Наприклад:

  • Arduino UNO, Nano, MiniPro: A4 використовується для SDA (дані), а A5 - для SCK (годинник).
  • arduino мега: контакт 20 для SDA і 21 для SCK.

Пам'ятайте, що для його використання ви повинні користуватися бібліотекою Дріт.ч для ваших кодів IDE Arduino, хоча є й інші подібні I2C y i2cdevlib. Ви можете прочитати документи цих бібліотек або наші статті про проекти, які вас цікавлять, щоб отримати коди того, як це буде запрограмовано.

Як дізнатися адресу пристрою, щоб використовувати його з I2C?

Останнє останнє попередження, і це те, що коли ви купуєте мікросхеми у європейських, японських або американських виробників, ви вказати напрямок що слід використовувати для пристрою. З іншого боку, китайці іноді не деталізують це або це неправильно, тому це не спрацює. Це легко вирішити за допомогою адресного сканера, щоб знати, в якому напрямку слід звертатись на своєму ескізі.

La спільнота arduino створив це код для сканування адреси та її ідентифікації По-простому. Хоча я показую вам код прямо тут:

#include "Wire.h"
 
extern "C" { 
    #include "utility/twi.h"
}
 
void scanI2CBus(byte from_addr, byte to_addr, void(*callback)(byte address, byte result) ) 
{
  byte rc;
  byte data = 0;
  for( byte addr = from_addr; addr <= to_addr; addr++ ) {
    rc = twi_writeTo(addr, &data, 0, 1, 0);
    callback( addr, rc );
  }
}
 
void scanFunc( byte addr, byte result ) {
  Serial.print("addr: ");
  Serial.print(addr,DEC);
  Serial.print( (result==0) ? " Encontrado!":"       ");
  Serial.print( (addr%4) ? "\t":"\n");
}
 
 
const byte start_address = 8;
const byte end_address = 119;
 
void setup()
{
    Wire.begin();
 
    Serial.begin(9600);
    Serial.print("Escaneando bus I2C...");
    scanI2CBus( start_address, end_address, scanFunc );
    Serial.println("\nTerminado");
}
 
void loop() 
{
    delay(1000);
}


Будьте першим, щоб коментувати

Залиште свій коментар

Ваша електронна адреса не буде опублікований. Обов'язкові для заповнення поля позначені *

*

*

  1. Відповідальний за дані: Мігель Анхель Гатон
  2. Призначення даних: Контроль спаму, управління коментарями.
  3. Легітимація: Ваша згода
  4. Передача даних: Дані не передаватимуться третім особам, за винятком юридичних зобов’язань.
  5. Зберігання даних: База даних, розміщена в мережі Occentus Networks (ЄС)
  6. Права: Ви можете будь-коли обмежити, відновити та видалити свою інформацію.