Всичко за шината Arduino I2C

Автобус Arduino I2C

с Arduino може да създаде голям брой проекти както сте виждали, ако сте чели Hwlibre, програмиране на микроконтролера по прост начин. Но сред аналоговите и цифровите връзки на тази безплатна хардуерна платка има някои, които все още са малко непознати за много начинаещи, като истинския потенциал на PWM връзките, 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 шината има a Архитектура тип Master-Slave, тоест господар-роб. Това означава, че когато комуникацията е стартирана от главно устройство, то ще може да изпраща или получава данни от своите подчинени. Робите няма да могат да инициират комуникация, само майсторът може да го направи и нито робите могат да говорят помежду си директно без намесата на господаря.

Ако имате няколко учители в автобуса, само един може да действа като учител едновременно. Но не си струва, тъй като смяната на учителя изисква висока сложност, така че не е честа.

Имайте предвид, че master предоставя тактовия сигнал за синхронизиране на всички устройства в шината. Това елиминира необходимостта всеки роб да има собствен часовник.

Протоколът I2C шина също предвижда използването на изтеглящи резистори в линиите на захранващото напрежение (Vcc), въпреки че тези резистори обикновено не се използват с Arduino изтегляне, защото програмиране на библиотеки тъй като Wire активира вътрешните със стойности 20-30 k. Това може да е твърде меко за някои проекти, поради което нарастващите ръбове на сигнала ще бъдат по-бавни, така че могат да се използват по-ниски скорости и по-къси комуникационни разстояния. За да коригирате това, може да се наложи да поставите външни издърпващи резистори от 1k до 4k7.

сигнал

I2C сигнал

 

La комуникационна рамка от които I2C сигналът на шината се състои от битове или състояния (тези, използвани в Arduino, тъй като I2C стандартът позволява други):

  • 8 бита, 7 от тях адрес на подчиненото устройство, до което искате да осъществите достъп, за да изпращате или получавате данни от него. Със 7 бита могат да бъдат създадени до 128 различни адреса, така че теоретично може да се получи достъп до 128 устройства, но само 112 могат да бъдат достъпни, тъй като 16 са запазени за специални цели. И допълнителният бит, който показва дали искате изпращане или получаване информация за подчиненото устройство.
  • Също съществува бит за проверка, ако не е активен, комуникацията няма да бъде валидна.
  • Тогава байтове с данни че те искат да изпратят или получат от робите. Както знаете, всеки байт се състои от 8 бита. Имайте предвид, че за всеки 8-битов или 1 байт от изпратени или получени данни се изискват допълнителни 18 бита за проверка, адрес и т.н., което означава, че шината е много ограничена по скорост.
  • Последна част от утвърждаване на комуникацията.

В допълнение, тактовата честота за предаването е 100 Mhz стандартно, въпреки че има по-бърз режим на 400 Mhz.

Предимства и недостатъци на I2C шината

на ventajas звук:

  • простота като се използват само два реда.
  • Има механизми, за да се знае дали сигналът е пристигнал в сравнение с други комуникационни протоколи.

на desventajas звук:

  • скорост сравнително ниско предаване.
  • Това не е пълен дуплекс, тоест не можете да изпращате и получавате едновременно.
  • Не използва паритет нито какъвто и да е друг тип механизъм за проверка, за да се знае дали получените битове за данни са верни.

 

 

I2C на Arduino

Автобус Arduino I2C

En Arduino, в зависимост от модела, щифтовете, които могат да бъдат активирани за използване на тази I2C шина, варират. Например:

  • Arduino UNO, Nano, Mini Pro: A4 се използва за SDA (данни) и A5 за SCK (часовник).
  • Arduino Mega: щифт 20 за SDA и 21 за SCK.

Не забравяйте, че за да го използвате, трябва използвайте библиотеката Тел.ч за вашите Arduino IDE кодове, въпреки че има и други подобни 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. Права: По всяко време можете да ограничите, възстановите и изтриете информацията си.