Arduino I2C автобус жөнүндө

Arduino I2C автобус

менен Arduino көптөгөн долбоорлорду түзө алат Hwlibreди окуганыңызды көргөнүңүздөй, микроконтроллерди жөнөкөй жол менен программалоо. Бирок бул бекер жабдык тактасынын аналогдук жана санариптик байланыштарынын арасында дагы деле болсо көптөгөн жаңы башталуучуларга белгисиз болгон айрымдары бар, мисалы, PWM байланыштарынын чыныгы мүмкүнчүлүктөрү, SPI, сериялык портунун RX жана TX пиндери, же өзүнүн I2C автобусу. Демек, бул жазуу менен сиз жок дегенде I2Cден керектүү нерселердин бардыгын биле аласыз.

менен I2C автобус Arduino тактасы менен байланышуу үчүн ушул типтеги протоколго ээ болгон үчүнчү жактын көптөгөн шаймандарын туташтырып, колдонсоңуз болот. Алардын ортосунда сиз ушул Philips ойлоп табуусунун аркасында акселерометрлерди, дисплейлерди, эсептегичтерди, компастарды жана башка интегралдык схемаларды туташтыра аласыз.

I2C деген эмне?

I2C аралык интегралдык микросхеманы билдирет, башкача айтканда, интегралдык схема. Бул 1982-жылы Philips Semiconductors компаниясы тарабынан иштелип чыккан сериялык маалыматтарды берүүчү автобус, бүгүнкү күндө бул бөлүмдөн кутулгандан кийин NXP Semiconductors болуп саналат. Алгач ал ушул бренддеги телевизорлор үчүн, бир нече ички чиптерди жөнөкөй жол менен байланыштыруу үчүн түзүлгөн. Бирок 1990-жылдан бери I2C тарады жана көптөгөн өндүрүүчүлөр колдонушат.

Учурда ондогон чип чыгаруучулар колдонушат бир нече функциялар үчүн. Arduino тактасынын микроконтроллерлеринин жаратуучусу Atmel, I2C менен бирдей болсо дагы, лицензия берүү себептери боюнча TWI (Two Wired Interface) белгисин киргизген. Бирок 2006-жылы баштапкы патенттин мөөнөтү бүтүп, автордук укукка ээ болбой калгандыктан, I2C термини кайрадан колдонулган (логотип гана корголуп жатат, бирок анын колдонулушуна же колдонулушуна чектөө коюлган жок).

I2C автобустун техникалык деталдары

I2C автобус

El I2C автобус индустриялык стандарт болуп калды жана Arduino аны ишке ашырды ага муктаж перифериялык түзүлүштөр менен байланыш үчүн. Анын иштеши үчүн эки гана линия же кабель керек, бири саат сигналы (CLK) үчүн, экинчиси сериялык маалыматтарды жөнөтүү үчүн (SDA). Бул SPI автобусуна салыштырмалуу башка коммуникацияга салыштырмалуу пайдалуу, бирок кошумча схемалар талап кылынгандыктан, анын иштеши бир аз татаал.

Бул автобуста ага туташкан ар бир түзмөктүн дареги бар бул шаймандарга өз-өзүнчө жетүү үчүн колдонулат. Бул дарек жабдык менен белгиленет, акыркы 3 битти секиргичтердин жардамы менен же DIP которуштургучу аркылуу өзгөртүлөт, бирок аны программалык камсыздоо менен дагы жасаса болот. Ар бир түзмөктүн уникалдуу дареги болот, бирок алардын бир нечесинин дареги бирдей болуп, жаңжалдарды болтурбоо же мүмкүн болсо, аны өзгөртүү үчүн кошумча автобусту колдонуу керек.

Мындан тышкары, I2C автобусунда а Master-Slave типиндеги архитектура, башкача айтканда, кожоюн-кул. Бул байланыш мастер-прибор аркылуу баштаганда, ал өз кулдарынан маалыматтарды жөнөтүп же ала алат дегенди билдирет. Кулдар байланышты баштай алышпайт, кожоюн гана аны жасай алат жана кулдар кожоюндун кийлигишүүсүз бири-бири менен түз сүйлөшө алышпайт.

Эгер бар автобуста бир нече мугалимдер, бир эле учурда бир эле учурда мугалимдин милдетин аткара алат. Бирок буга татыктуу эмес, анткени мугалимдин алмашуусу чоң татаалдыкты талап кылат, андыктан көп боло бербейт.

Экенин унутпаңыз master автобустагы бардык шаймандарды синхрондоштуруу үчүн саат сигналын берет. Ошентип, ар бир кулдун өз кол сааты болушу керек.

I2C автобус протоколунда, ошондой эле, Arduino менен бул каршылыктар колдонулбайт, бирок, чыңалуу чыңалуу линияларында (Vcc) тартылуу резисторлору колдонулат программалоо китепканалары, анткени тартуу анткени Wire 20-30 к маанисиндеги ички активдештирет. Бул кээ бир долбоорлор үчүн өтө эле жумшак болушу мүмкүн, андыктан сигналдын жогорулаган чектери жайыраак болот, андыктан төмөнкү ылдамдыкты жана байланыштын кыска аралыктарын колдонсо болот. Түзөтүү үчүн, тышкы тартма резисторду 1к ден 4к7ге чейин орнотушуңуз керек.

сигнал

I2C сигналы

 

La байланыш алкагы анын ичинен I2C автобус сигналы биттерден же абалдардан турат (Arduinoдо колдонулат, анткени I2C стандарты башкаларга мүмкүнчүлүк берет):

  • 8 бит, алардын 7си дарек андан маалыматтарды жөнөтүү же алуу үчүн сиз каалаган кул шайманынын. 7 бит менен 128ге чейин ар кандай даректерди түзсө болот, ошондуктан теориялык жактан 128 түзмөктү колдонсо болот, бирок 112ге гана кирүүгө болот, анткени 16сы атайын колдонууга сакталган. Жана сиз кааласаңыз көрсөтүүчү кошумча бит жөнөтүү же алуу кул түзмөгү жөнүндө маалымат.
  • да бар текшерүү бит, эгер ал активдүү болбосо, анда байланыш жарактуу болбойт.
  • Андан кийин берилмелер байттары алар жиберүүнү же кулдар тарабынан алууну каалашат. Ар бир байт, сиз билгендей, 8-биттен турат. Жөнөтүлгөн же алынган ар бир 8-бит же 1 байт маалымат үчүн кошумча 18 бит текшерүү, дарек ж.б. талап кылынарын эске алыңыз, бул автобустун ылдамдыгы өтө чектелүү экендигин билдирет.
  • Акыркы бит жарактуулугун текшерүү байланыштын.

Мындан тышкары, үчүн саат жыштыгы берүүлөрү стандарттуу 100 МГц, бирок 400 МГц ылдамыраак режим бар.

I2C автобустун артыкчылыктары жана кемчиликтери

The артыкчылык Алар төмөнкүлөр:

  • жөнөкөйлүк эки гана сапты колдонуу менен.
  • Бул бар сигнал келип түшкөнүн билүү механизмдери башка байланыш протоколдоруна салыштырмалуу.

The кемчиликтери Алар төмөнкүлөр:

  • ылдамдык өтө төмөн берүү.
  • Бул толук дуплекс эмес, башкача айтканда, сиз бир эле убакта жөнөтө жана ала албайсыз.
  • Паритетти колдонбойт Ошондой эле алынган маалымат биттеринин туура экендигин билүү үчүн текшерүү механизминин башка түрү.

 

 

Arduino боюнча I2C

Arduino I2C автобус

En Arduino, моделине жараша, ушул I2C автобусту колдонууга мүмкүн болгон түйрөөч ар кандай. Мисалы:

  • Arduino UNO, Нано, Mini Pro: A4 SDA үчүн (маалыматтар) жана A5 SCK үчүн (саат) колдонулат.
  • Ардуино Мега: SDA үчүн 20-пин жана SCK үчүн 21-пин.

Аны колдонуу үчүн сөзсүз керек экендигин унутпаңыз китепканадан пайдалануу Wire.h сыяктуу Arduino IDE коддору үчүн, бирок башкалар бар I2C y I2Cdevlib. Сиз бул китепканалардын документтерин же кандайча программалангандыгын билүү үчүн сизди кызыктырган долбоорлор боюнча макалаларыбызды окуй аласыз.

Түзмөктүн дарегин I2C менен колдонуу үчүн аны кантип билсе болот?

Акыркы бир эскертүү, сиз Европалык, Жапониялык же Америкалык өндүрүүчүлөрдөн IC сатып алсаңыз, сиз багытын көрсөтүү сиз шайман үчүн колдонушуңуз керек. Экинчи жагынан, кытайлар кээде аны деталдаштырышпайт же туура эмес, ошондуктан ал иштебей калат. Эскизде кайсы багытты караш керектигин билүү үчүн, аны дарек сканери менен оңой эле чечсе болот.

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. Укуктар: Каалаган убакта маалыматыңызды чектеп, калыбына келтирип жана жок кыла аласыз.