з Arduino можа ствараць вялікую колькасць праектаў як вы бачылі, калі вы чыталі Hwlibre, праграмаванне мікракантролера простым спосабам. Але сярод аналагавых і лічбавых злучэнняў гэтай бясплатнай апаратнай платы ёсць некаторыя, якія па-ранейшаму невядомыя многім пачаткоўцам, напрыклад сапраўдны патэнцыял ШІМ-злучэнняў, SPI, штыфты RX і TX паслядоўнага порта альбо уласная шына I2C. Такім чынам, з дапамогай гэтага запісу вы зможаце ведаць усё, што трэба ад I2C.
з аўтобус I2C Для сувязі з платай Arduino можна падключаць і выкарыстоўваць мноства старонніх прылад, якія маюць гэты тып пратакола. Паміж імі вы можаце падключыць акселерометры, дысплеі, лічыльнік, компасы і шмат іншых інтэгральных мікрасхем дзякуючы гэтаму вынаходству Philips.
Індэкс
Што такое I2C?
I2C адносіцца да інтэгральнай мікрасхемы, гэта значыць, інтэгральная схема. Гэта паслядоўная шына для перадачы дадзеных, распрацаваная ў 1982 годзе кампаніяй Philips Semiconductors, якая сёння з'яўляецца NXP Semiconductors пасля пазбаўлення ад гэтага раздзела. Спачатку ён быў створаны для тэлевізараў гэтай маркі для простай сувязі некалькіх унутраных мікрасхем. Але з 1990 года I2C распаўсюдзіўся і выкарыстоўваецца многімі вытворцамі.
У цяперашні час выкарыстоўваецца дзясяткамі вытворцаў чыпаў для некалькіх функцый. Atmel, стваральнік мікракантролераў для плат Arduino, прадставіў пазначэнне TWI (два правадныя інтэрфейсы) для мэт ліцэнзавання, хоць яно ідэнтычна I2C. Але ў 2006 г. тэрмін дзеяння першапачатковага патэнта скончыўся і больш не падлягае абароне аўтарскіх правоў, таму тэрмін I2C быў выкарыстаны паўторна (толькі лагатып працягвае абараняцца, але яго прымяненне і выкарыстанне гэтага тэрміна не абмяжоўваецца).
Тэхнічныя дэталі шыны I2C
El Аўтобус I2C стаў галіновым стандартам, і Arduino ўкараніў яго для сувязі з перыферыйнымі прыладамі, якія ў гэтым маюць патрэбу. Для яго працы патрэбныя толькі дзве лініі або кабелі, адзін для сігналу такта (CLK), а другі для адпраўкі паслядоўных дадзеных (SDA). Гэта выгадна ў параўнанні з іншымі камунікацыямі ў параўнанні з шынай SPI, хоць яго праца некалькі больш складаная з-за неабходных дадатковых схем.
У гэтым аўтобусе кожная падлучаная да яго прылада мае адрас выкарыстоўваецца для індывідуальнага доступу да гэтых прылад. Гэты адрас фіксуецца апаратным забеспячэннем, змяняючы апошнія 3 біты праз перамычкі альбо DIP-пераключальнікі, хоць гэта можна зрабіць і з дапамогай праграмнага забеспячэння. Кожная прылада будзе мець унікальны адрас, хаця некалькі з іх могуць мець адзін і той жа адрас, і можа спатрэбіцца выкарыстанне другаснай шыны, каб пазбегнуць канфліктаў альбо змяніць яго, калі гэта магчыма.
Акрамя таго, шына I2C мае Архітэктура тыпу Master-Slave, гэта значыць, гаспадар-раб. Гэта азначае, што калі сувязь запускаецца галоўнай прыладай, яна зможа адпраўляць або атрымліваць дадзеныя ад сваіх рабоў. Рабы не змогуць пачаць сувязь, толькі гаспадар можа зрабіць гэта, і рабы не могуць непасрэдна размаўляць адзін з адным без умяшання гаспадара.
Калі ў вас ёсць некалькі выкладчыкаў у аўтобусе, выкладчыкам адначасова можа выступаць толькі адзін. Але гэта не варта, бо змена настаўніка патрабуе вялікай складанасці, таму яна не частая.
Майце на ўвазе, што master падае сігнал тактавай сінхранізацыі ўсіх прылад на шыне. Гэта пазбаўляе ад неабходнасці мець у кожнага раба свае гадзіннікі.
Пратакол шыны I2C таксама прадугледжвае выкарыстанне падцягвальных рэзістараў у лініях напружання харчавання (Vcc), хоць гэтыя рэзістары звычайна не выкарыстоўваюцца з Arduino падцягванне, таму што бібліятэкі праграмавання як Wire актывуе ўнутраныя са значэннямі 20-30 k. Гэта можа быць занадта мяккім для некаторых праектаў, таму растуць краю сігналу будуць больш павольнымі, таму можна выкарыстоўваць больш нізкую хуткасць і меншую адлегласць сувязі. Каб выправіць гэта, вам можа спатрэбіцца ўсталяваць знешнія падцягвальныя рэзістары ад 1k да 4k7.
Сігнал
La камунікацыйная рамка з якіх сігнал шыны I2C складаецца з бітаў або станаў (тых, якія выкарыстоўваюцца ў Arduino, бо стандарт I2C дазваляе іншыя):
- 8 біт, з іх 7 адрас падпарадкаванай прылады, да якой вы хочаце атрымаць доступ, каб адпраўляць ці атрымліваць з яе дадзеныя. З 7 біт можна стварыць да 128 розных адрасоў, таму тэарэтычна можна атрымаць доступ да 128 прылад, але можна атрымаць доступ толькі да 112, бо 16 зарэзерваваны для спецыяльнага выкарыстання. І дадатковы біт, які паказвае, калі вы хочаце адправіць альбо атрымаць Інфармацыя пра вядомыя прылады.
- Існуе таксама біт праверкі, калі ён не актыўны, сувязь будзе несапраўднай.
- Тады байты дадзеных што яны хочуць паслаць альбо атрымаць ад рабоў. Кожны байт, як вядома, складаецца з 8 бітаў. Звярніце ўвагу, што для кожнага 8-бітнага альбо 1 байта адпраўленых або атрыманых дадзеных патрабуюцца дадатковыя 18 біт праверкі, адрасы і г.д., што азначае, што хуткасць шыны вельмі абмежаваная.
- Апошні кавалак праверка камунікацыі.
Акрамя таго, тактавая частата для частата перадач складае 100 МГц, хоць існуе больш хуткі рэжым на 400 МГц.
Перавагі і недахопы шыны I2C
Лас- перавагі гук:
- Прастата выкарыстоўваючы толькі два радкі.
- Мае механізмы, каб даведацца, ці паступіў сігнал у параўнанні з іншымі пратаколамі сувязі.
Лас- недахопы гук:
- Хуткасць даволі нізкая перадача.
- Гэта не поўны дуплекс, гэта значыць, вы не можаце адначасова адпраўляць і атрымліваць.
- Не выкарыстоўвае парытэт як і любы іншы тып механізму праверкі, каб даведацца, ці правільныя атрыманыя біты дадзеных.
I2C на Arduino
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); }
Будзьце першым, каб каментаваць