Sve o Arduino I2C autobusu

Arduino I2C sabirnica

s Arduino može stvoriti velik 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 veza, SPI, RX i TX pinova serijskog porta ili same I2C sabirnice. Stoga ćete s ovim unosom moći barem znati sve što trebate o I2C-u.

s sabirnica 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, zaslone, brojač, kompase i mnogo više integriranih krugova zahvaljujući ovom izumu tvrtke Philips.

Što je I2C?

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

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

Tehnički detalji sabirnice I2C

I2C sabirnica

El I2C sabirnica postala je industrijski standard, a Arduino ga je implementirao za komunikaciju s perifernim uređajima koji to trebaju. Za rad su mu potrebne samo dvije linije ili kabeli, jedan za signal sata (CLK), a drugi za slanje serijskih podataka (SDA). To je povoljno u usporedbi s drugim 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 tim uređajima. Ova je adresa fiksirana hardverom, mijenjajuć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 sabirnicu kako bi se izbjegli sukobi ili ako je moguće promijenite.

Uz to, 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 robova. Robovi neće moći započeti komunikaciju, to može učiniti samo gospodar, a robovi ne mogu izravno međusobno razgovarati bez gospodarove intervencije.

Ako imate nekoliko učitelja u autobusu, samo će jedan moći istovremeno djelovati kao učitelj. Ali to se ne isplati, jer promjena učitelja zahtijeva visoku složenost, pa nije česta.

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

I2C protokol sabirnice također predviđa upotrebu pull-up otpornika u vodovima opskrbnog napona (Vcc), iako se ti otpornici obično ne koriste s Arduinom povlačenje jer programske knjižnice jer Wire aktivira unutarnje s vrijednostima 20-30 k. To može biti premekano za neke projekte, stoga će rastući rubovi signala biti sporiji, pa se mogu koristiti niže brzine i kraće komunikacijske udaljenosti. Da biste to ispravili, možda ćete trebati postaviti vanjske pull-up otpore s 1k na 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 adresa podređenog 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, budući da je 16 rezervirano za posebne namjene. I dodatni bit koji označava ako želite poslati ili primiti informacije o podređenom uređaju.
  • Tu je također bit provjere valjanosti, ako nije aktivan, komunikacija neće biti valjana.
  • Onda bajtova podataka da ih žele poslati ili primiti robovi. Kao što znate, svaki se bajt sastoji od 8-bitnih. 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 potvrđivanje komunikacije.

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

Prednosti i nedostaci I2C sabirnice

Las prednost zvuk:

  • jednostavnost korištenjem samo dva retka.
  • Ima mehanizmi da se zna je li signal stigao u usporedbi s ostalim komunikacijskim protokolima.

Las nedostaci zvuk:

  • Ubrzati prilično nizak prijenos.
  • Nije puni dupleks, odnosno ne možete istovremeno slati i primati.
  • Ne koristi paritet niti bilo koji drugi tip mehanizma provjere da bi se znalo jesu li primljeni bitovi podataka točni.

I2C na Arduinu

Arduino I2C sabirnica

En Arduino, ovisno o modelu, igle koje se mogu omogućiti za upotrebu ove I2C sabirnice variraju. 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 iskoristiti knjižnicu Žica.h za vaše Arduino IDE kodove, iako postoje i drugi poput I2C y i2cdevlib. Možete pročitati dokumente ovih knjižnica 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 s I2C?

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

La arduino zajednica je stvorio ovo kod za skeniranje adrese i njezinu 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 će komentirati

Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  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 obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.