Ամեն ինչ Arduino I2C ավտոբուսի մասին

Arduino I2C ավտոբուս

հետ Arduino- ն կարող է ստեղծել մեծ թվով նախագծեր ինչպես տեսաք, եթե կարդաք Hwlibre, միկրոկառավարիչի ծրագրավորում պարզ եղանակով, Բայց այս անվճար ապարատային տախտակի անալոգային և թվային միացումների շարքում կան այնպիսիք, որոնք դեռևս փոքր-ինչ անհայտ են շատ սկսնակների համար, ինչպիսիք են PWM միացումների իրական ներուժը, SPI- ը, սերիական պորտի RX և TX կապիչները կամ սեփական I2C ավտոբուս: Հետևաբար, այս գրառումով դուք կարող եք գոնե իմանալ այն ամենը, ինչ ձեզ հարկավոր է I2C- ից:

հետ I2C ավտոբուսը Դուք կարող եք միացնել և օգտագործել բազմաթիվ երրորդ կողմի սարքեր, որոնք ունեն այս տեսակի արձանագրություն `Arduino տախտակի հետ հաղորդակցվելու համար: Դրանց միջեւ դուք կարող եք միացնել արագացուցիչները, ցուցադրիչները, հաշվիչը, կողմնացույցները և շատ այլ ինտեգրալային շղթաներ ՝ շնորհիվ այս Philips գյուտի:

Ի՞նչ է I2C- ն:

I2C- ը վերաբերում է Ինտեգրացված Շղթային, այսինքն, ինտեգրված միացում: Դա սերիական տվյալների հաղորդակցման ավտոբուս է, որը մշակվել է 1982 թ.-ին Philips Semiconductors ընկերության կողմից, որն այսօր NXP Կիսահաղորդիչներ է այս բաժնից ազատվելուց հետո: Սկզբում այն ​​ստեղծվել էր այս ապրանքանիշի հեռուստատեսությունների համար ՝ մի քանի ներքին չիպսեր պարզ կերպով հաղորդակցելու համար: Բայց 1990 թվականից ի վեր I2C– ը տարածվեց և օգտագործվում է շատ արտադրողների կողմից:

Ներկայումս օգտագործվում են տասնյակ չիպսագործներ բազմաթիվ գործառույթների համար: Arduino- ի տախտակների միկրոկոնտրոլերների ստեղծող Atmel- ը լիցենզավորման նպատակով ներկայացրեց TWI (Two Wired Interface) անվանումը, չնայած այն նույնական է I2C- ին: Բայց 2006 թ. Սկզբնական արտոնագիրը սպառվել է և այլևս հեղինակային իրավունքի ենթակա չէ, ուստի I2C տերմինը կրկին օգտագործվել է (միայն լոգոն շարունակում է պաշտպանվել, սակայն դրա կիրառումը կամ տերմինի օգտագործումը չի սահմանափակվում):

I2C ավտոբուսի տեխնիկական մանրամասները

I2C ավտոբուս

El I2C ավտոբուսը դարձել է արդյունաբերության ստանդարտ, և Arduino- ն այն իրագործել է դրա կարիքն ունեցող ծայրամասերի հետ հաղորդակցվելու համար: Իր գործունեության համար անհրաժեշտ են ընդամենը երկու գծեր կամ մալուխ, մեկը ժամացույցի ազդանշանի համար (CLK), իսկ մյուսը `սերիական տվյալներ ուղարկելու համար (SDA): Սա ձեռնտու է SPI ավտոբուսի համեմատ այլ հաղորդակցությունների համեմատ, չնայած դրա աշխատանքը մի փոքր ավելի բարդ է `պահանջվող լրացուցիչ սխեմաների պատճառով:

Այս ավտոբուսում դրան միացված յուրաքանչյուր սարք ունի հասցե օգտագործվում է այս սարքերին անհատապես մուտք գործելու համար: Այս հասցեն ամրագրվում է ապարատային համակարգի միջոցով ՝ վերջին 3 բիթերը փոփոխելով թռիչքների միջոցով կամ փոխելով DIP- ները, չնայած դա կարող է կատարվել նաև ծրագրային ապահովման միջոցով: Յուրաքանչյուր սարք ունենալու է յուրահատուկ հասցե, չնայած նրանցից մի քանիսը կարող են ունենալ նույն հասցեն, և հնարավոր է անհրաժեշտ լինի օգտագործել երկրորդական ավտոբուս ՝ բախումներից խուսափելու կամ հնարավորության դեպքում այն ​​փոխելու համար:

Բացի այդ, I2C ավտոբուսը ունի ա Վարպետ-ստրուկ տիպի ճարտարապետություն, այսինքն ՝ տեր-ստրուկ: Սա նշանակում է, որ երբ կապը սկսվում է հիմնական սարքի միջոցով, այն կկարողանա իր ստրուկներից տվյալներ ուղարկել կամ ստանալ: Ստրուկները չեն կարողանա հաղորդակցություն սկսել, միայն տերը կարող է, և ոչ էլ ստրուկները չեն կարող միմյանց հետ ուղղակի խոսել առանց տիրոջ միջամտության:

Եթե ​​ունեք մի քանի ուսուցիչ ավտոբուսում, միայն մեկը կկարողանա միաժամանակ հանդես գալ որպես ուսուցիչ: Բայց դա չարժե, քանի որ ուսուցչի փոփոխությունը պահանջում է բարձր բարդություն, ուստի այն հաճախակի չէ:

Հիշեք, որ վարպետը տրամադրում է ժամացույցի ազդանշան `ավտոբուսի բոլոր սարքերը համաժամեցնելու համար, Դա վերացնում է յուրաքանչյուր ստրուկի սեփական ժամացույց ունենալու անհրաժեշտությունը:

I2C ավտոբուսի արձանագրությունը նաև նախատեսում է ձգվող ռեզիստորների օգտագործումը մատակարարման լարման գծերում (Vcc), չնայած այդ դիմադրությունները սովորաբար չեն օգտագործվում Arduino- ի հետ քաշեք, քանի որ գրադարանները ծրագրավորում են քանի որ Wire- ն ակտիվացնում է ներքինները 20-30 կ արժեքներով: Սա կարող է չափազանց մեղմ լինել որոշ նախագծերի համար, հետևաբար ազդանշանի բարձրացող եզրերը դանդաղ կլինեն, ուստի կարող են օգտագործվել ավելի ցածր արագություններ և հաղորդակցության ավելի փոքր հեռավորություններ: Ուղղելու համար, գուցե անհրաժեշտ լինի արտաքին քաշման ռեզիստորներ սահմանել 1k- ից 4k7:

Ազդանշան

I2C ազդանշան

 

La հաղորդակցության շրջանակ որից I2C ավտոբուսի ազդանշանը բաղկացած է բիտերից կամ վիճակներից (Arduino- ում օգտագործվողները, քանի որ I2C ստանդարտը թույլ է տալիս ուրիշներին).

  • 8 բիթ, դրանցից 7-ը ուղղությունը ստրուկ սարքի, որը ցանկանում եք մուտք գործել ՝ նրանից տվյալներ ուղարկելու կամ ստանալու համար: 7 բիթով կարելի է ստեղծել մինչև 128 տարբեր հասցեներ, այնպես որ տեսականորեն կարելի է մուտք ունենալ 128 սարք, բայց միայն 112-ով կարելի է մուտք գործել, քանի որ 16-ը վերապահված են հատուկ օգտագործման համար: Եվ լրացուցիչ բիտը, որը ցույց է տալիս, եթե ցանկանում եք ուղարկել կամ ստանալ ստրուկ սարքի մասին տեղեկություններ.
  • Կա նաեւ վավերացման բիթ, եթե այն ակտիվ չէ, կապը վավեր չի լինի:
  • Հետո տվյալների բայթ որոնք պետք է ուղարկվեն կամ ստանան ստրուկները: Յուրաքանչյուր բայթ, ինչպես գիտեք, կազմված է 8 բիթից: Ուշադրություն դարձրեք, որ ուղարկված կամ ստացված յուրաքանչյուր 8-բիթանոց կամ 1 բայթ տվյալների համար պահանջվում է վավերացման, հասցեի և այլ 18 բիթ, ինչը նշանակում է, որ ավտոբուսը շատ սահմանափակ է արագությամբ:
  • Վերջնական մի մասը վավերացում հաղորդակցության.

Բացի այդ, ժամացույցի հաճախականությունը համար փոխանցման տուփը ստանդարտ 100 ՄՀց է, չնայած կա 400 ՄՀց ավելի արագ ռեժիմ:

I2C ավտոբուսի առավելություններն ու թերությունները

որ առավելություն հնչ.

  • Պարզություն օգտագործելով միայն երկու տող:
  • Այն ունի մեխանիզմները `իմանալու, արդյոք ազդանշանը եկել է համեմատ այլ հաղորդակցական արձանագրությունների հետ:

որ թերությունները հնչ.

  • Բարեմաղթել բավականին ցածր փոխանցում:
  • Դա լրիվ դուպլեքս չէ, այսինքն, դուք չեք կարող միաժամանակ ուղարկել և ստանալ:
  • Պարիտետ չի օգտագործում ոչ էլ ստուգման ցանկացած այլ տեսակի մեխանիզմ, որպեսզի իմանա ստացված տվյալների բիթերը ճիշտ են:

 

 

I2C Arduino- ի վրա

Arduino I2C ավտոբուս

En Arduino, կախված մոդելից, քորոցները, որոնք կարող են հնարավորություն ունենալ օգտագործել այս I2C ավտոբուսը, տարբեր են: Օրինակ:

  • Arduino UNO, Նանո, Մինի ՊրոA4- ն օգտագործվում է SDA- ի (տվյալների) համար և A5- ը SCK- ի (ժամացույցի) համար:
  • Արդուինո Մեգա: քորոց SDA- ի համար 20 և SCK- ի համար 21:

Հիշեք, որ այն օգտագործելու համար դուք պետք է օգտվել գրադարանից Մետաղալար. Ժ ձեր 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. Տվյալների նպատակը. Վերահսկել SPAM, մեկնաբանությունների կառավարում:
  3. Օրինականություն. Ձեր համաձայնությունը
  4. Տվյալների հաղորդագրություն. Տվյալները չեն փոխանցվի երրորդ անձանց, բացառությամբ իրավական պարտավորության:
  5. Տվյալների պահպանում. Տվյալների շտեմարան, որը հյուրընկալվում է Occentus Networks (EU) - ում
  6. Իրավունքներ. Timeանկացած պահի կարող եք սահմանափակել, վերականգնել և ջնջել ձեր տեղեկատվությունը: