Sve o Arduino I2C autobusu

Arduino I2C autobus

con Arduino može stvoriti veliki broj projekata kao što ste vidjeli ako ste čitali Hwlibre, programiranje mikrokontrolera na jednostavan način. Ali između analognih i digitalnih veza ove ploče hardware libre, postoje neki koji su još uvijek pomalo nepoznati mnogim početnicima, kao što je pravi potencijal PWM konekcija, SPI, RX i TX pinova serijskog porta ili sama I2C magistrala. Stoga ćete sa ovim unosom moći barem znati sve što vam treba o I2C.

con autobus I2C možete povezati i koristiti mnoge uređaje treće strane koji imaju ovu vrstu protokola za komunikaciju s Arduino pločom. Između njih možete povezati akcelerometre, displeje, brojač, kompase i još mnogo integrisanih krugova zahvaljujući ovom izumu kompanije Philips.

Šta je I2C?

I2C se odnosi na međusobno integrirani krug, odnosno inter-integrirani krug. Riječ je o serijskoj magistrali za komunikaciju podataka koju je 1982. godine razvila kompanija Philips Semiconductors, a koja je danas NXP Semiconductors nakon što se riješila ovog odjeljka. U početku je stvoren za televizore ove marke kako bi na jednostavan način komunicirali nekoliko internih čipova. Ali od 1990. godine I2C se širi i koriste ga mnogi proizvođači.

Trenutno ih koriste desetine proizvođača čipova za više funkcija. Atmel, tvorac mikrokontrolera za Arduino ploče, uveo je oznaku TWI (dvožično sučelje) u svrhu licenciranja, iako je identična I2C. No, 2006. godine originalnom je patentu istekao rok trajanja i više nije predmet autorskih prava, pa je pojam I2C ponovo upotrijebljen (samo logotip je i dalje zaštićen, ali njegova primjena ili upotreba pojma nisu ograničeni).

Tehnički detalji sabirnice I2C

I2C autobus

El I2C sabirnica postala je industrijski standard, a Arduino ga je implementirao za komunikaciju s perifernim uređajima kojima je to potrebno. Za rad su mu potrebne samo dvije linije ili kablovi, jedan za signal sata (CLK), a drugi za slanje serijskih podataka (SDA). Ovo je povoljno u usporedbi s ostalim komunikacijama u usporedbi sa SPI sabirnicom, iako je njegov rad nešto složeniji zbog potrebnih dodatnih sklopova.

U ovom autobusu svaki uređaj povezan s njim ima adresu koristi se za pojedinačni pristup ovim uređajima. Ova adresa je fiksirana hardverom, modificirajući zadnja 3 bita kroz kratkospojnike ili preklopne DIP-ove, iako to može učiniti i softver. Svaki će uređaj imati jedinstvenu adresu, iako nekoliko njih može imati istu adresu i možda će biti potrebno koristiti sekundarnu magistralu kako bi se izbjegli sukobi ili ako je moguće promijenite.

Pored toga, I2C sabirnica ima i Arhitektura tipa Master-Slave, odnosno gospodar-rob. To znači da će, kada glavni uređaj započne komunikaciju, moći slati ili primati podatke od svojih podređenih uređaja. Robovi neće moći inicirati komunikaciju, samo gospodar to može učiniti, a robovi ne mogu direktno razgovarati jedni s drugima bez intervencije gospodara.

Ako imate nekoliko nastavnika u autobusu, samo će jedan moći istovremeno da se ponaša kao nastavnik. Ali to ne vrijedi, jer promjena učitelja zahtijeva visoku složenost, pa nije česta.

Imajte na umu da master daje signal takta za sinhronizaciju svih uređaja na magistrali. To eliminira potrebu da svaki rob ima svoj sat.

I2C protokol sabirnice također predviđa upotrebu pull-up otpornika u vodovima napona napajanja (Vcc), iako se ti otpornici obično ne koriste sa Arduinom povlačenje jer programske biblioteke kao što žica aktivira interne sa vrijednostima 20-30 k. Ovo može biti premekano za neke projekte, stoga će rastuće ivice signala biti sporije, pa se mogu koristiti niže brzine i kraće komunikacijske udaljenosti. Da biste to ispravili, možda ćete trebati postaviti vanjske pull-up otpornike od 1k do 4k7.

Signal

I2C signal

La komunikacijski okvir od kojih se signal sabirnice I2C sastoji od bitova ili stanja (onih koja se koriste u Arduinu, budući da I2C standard dopušta druge):

  • 8 bitova, od toga 7 adresu slave uređaja kojem želite pristupiti za slanje ili primanje podataka s njega. Sa 7 bitova može se stvoriti do 128 različitih adresa, tako da se teoretski može pristupiti 128 uređajima, ali može se pristupiti samo 112, jer je 16 rezervirano za posebne namjene. I dodatni bit koji označava ako želite poslati ili primiti informacije o pomoćnom uređaju.
  • Takođe postoji bit provjere valjanosti, ako nije aktivan, komunikacija neće biti važeća.
  • Zatim bajtovi podataka koje robovi žele poslati ili primiti. Kao što znate, svaki bajt se sastoji od 8 bitova. Imajte na umu da je za svaki 8-bitni ili 1 bajt poslanih ili primljenih podataka potrebno dodatnih 18 bitova provjere valjanosti, adrese itd., Što znači da je sabirnica vrlo ograničena u brzini.
  • Posljednji dio validacija komunikacije.

Pored toga, frekvencija takta za mjenjač je standardno 100 MHz, iako postoji brži način rada na 400 MHz.

Prednosti i nedostaci I2C sabirnice

u prednosti To su:

  • Jednostavnost korištenjem samo dvije linije.
  • Ima mehanizmi da se zna je li signal stigao u odnosu na druge komunikacijske protokole.

u nedostaci To su:

  • Brzina prilično nizak prenos.
  • To nije puni dupleks, odnosno ne možete istovremeno slati i primati.
  • Ne koristi paritet niti bilo koji drugi tip mehanizma za provjeru da bi se znalo jesu li primljeni bitovi podataka ispravni.

I2C na Arduinu

Arduino I2C autobus

En Arduino, ovisno o modelu, pinovi koji se mogu omogućiti za upotrebu ove I2C sabirnice se razlikuju. Na primjer:

  • Arduino UNO, Nano, MiniPro: A4 se koristi za SDA (podaci), a A5 za SCK (sat).
  • arduino mega: pin 20 za SDA i 21 za SCK.

Zapamtite da da biste ga koristili, morate iskoristite biblioteku žica.h za vaše Arduino IDE kodove, iako postoje i drugi I2C y i2cdevlib. Možete pročitati dokumente ovih biblioteka ili naše članke o projektima koji vas zanimaju kako biste dobili kodove kako bi se to moglo programirati.

Kako znati adresu uređaja da biste je koristili sa I2C?

Samo još jedno upozorenje, a to je da kada kupujete IC od evropskih, japanskih ili američkih proizvođača, vi naznačite pravac koju biste trebali koristiti za uređaj. S druge strane, Kinezi to ponekad ne detaljno opisuju ili nije tačno, pa neće uspjeti. To se lako može riješiti skenerom adresa da biste znali u kojem smjeru biste trebali da se obratite na skici.

La arduino zajednica je stvorio ovo kod za skeniranje adrese i identifikaciju Na jednostavan način. Iako vam ovdje pokazujem kod:

#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);
}


Budite prvi koji komentarišete

Ostavite komentar

Vaša e-mail adresa neće biti objavljena. Obavezna polja su označena sa *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obavezi.
  5. Pohrana podataka: Baza podataka koju hostuje Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.