Vse o avtobusu Arduino I2C

Avtobus Arduino I2C

z Arduino lahko ustvari veliko število projektov kot ste videli, če ste prebrali Hwlibre, programiranje mikrokrmilnika na preprost način. Toda med analognimi in digitalnimi povezavami te plošče hardware libre, obstajajo nekateri, ki so mnogim začetnikom še vedno nekoliko neznani, na primer resnični potencial povezav PWM, SPI, zatiči RX in TX serijskih vrat ali samo vodilo I2C. Zato boste s tem vnosom lahko izvedeli vsaj vse, kar potrebujete o I2C.

z vodilo I2C za komunikacijo z ploščo Arduino lahko povežete in uporabljate številne naprave drugih proizvajalcev, ki imajo to vrsto protokola. Med njimi lahko po zaslugi tega Philipsovega izuma povežete merilnike pospeška, prikazovalnike, števec, kompase in še veliko več integriranih vezij.

Kaj je I2C?

I2C se nanaša na vmesno integrirano vezje, to je medintegrirano vezje. Gre za serijsko podatkovno komunikacijsko vodilo, ki ga je leta 1982 razvilo podjetje Philips Semiconductors, ki je danes NXP Semiconductors, potem ko se je rešilo tega poglavja. Sprva je bil ustvarjen za televizorje te blagovne znamke, da na preprost način komunicirajo z več notranjimi čipi. Toda od leta 1990 se I2C širi in ga uporabljajo številni proizvajalci.

Trenutno jih uporablja več deset proizvajalcev čipov za več funkcij. Atmel, ustvarjalec mikrokrmilnikov za plošče Arduino, je za namene licenciranja uvedel oznako TWI (Two Wired Interface), čeprav je enaka I2C. Toda leta 2006 je prvotni patent potekel in ni več predmet avtorskih pravic, zato je bil izraz I2C ponovno uporabljen (zaščiten je le še logotip, vendar njegovo izvajanje ali uporaba izraza ni omejena).

Tehnične podrobnosti vodila I2C

I2C vodilo

El Bus I2C je postal industrijski standard in Arduino ga je uvedel za komunikacijo z zunanjimi napravami, ki jo potrebujejo. Za svoje delovanje potrebujeta le dve liniji ali kable, enega za taktni signal (CLK) in drugega za pošiljanje serijskih podatkov (SDA). To je ugodno v primerjavi z drugimi komunikacijami v primerjavi z vodilom SPI, čeprav je njegovo delovanje nekoliko bolj zapleteno zaradi potrebnih dodatnih vezij.

Na tem avtobusu vsaka z njo povezana naprava ima naslov za posamezen dostop do teh naprav. Ta naslov določi strojna oprema, pri čemer zadnje 3 bite spreminja s pomočjo mostičkov ali stikalnih DIP-ov, čeprav lahko to naredi tudi programska oprema. Vsaka naprava bo imela edinstven naslov, čeprav jih ima lahko več enak naslov, zato bo morda treba uporabiti sekundarno vodilo, da se izognete konfliktom ali ga po možnosti spremenite.

Poleg tega ima vodilo I2C še Arhitektura tipa Master-Slave, to je mojster-suženj. To pomeni, da bo lahko, ko komunikacijo zažene glavna naprava, lahko pošiljala ali prejemala podatke od svojih podrejenih. Sužnji ne bodo mogli začeti komunikacije, to lahko stori samo poveljnik, sužnji pa se ne morejo neposredno pogovarjati brez poveljnikovega posredovanja.

Če imate nekaj učiteljev na avtobusu, le eden bo lahko hkrati učitelj. Vendar se to ne splača, saj zamenjava učitelja zahteva veliko zapletenost, zato ni pogosta.

Upoštevajte, da master daje signal ure za sinhronizacijo vseh naprav na vodilu. To odpravlja potrebo, da ima vsak suženj svojo uro.

Protokol vodila I2C predvideva tudi uporabo vlečnih uporov v napajalnih vodih (Vcc), čeprav se ti upori običajno ne uporabljajo z Arduino pull-up, ker knjižnice za programiranje saj Wire aktivira notranjost z vrednostmi 20-30 k. Za nekatere projekte je to lahko premehko, zato bodo naraščajoči robovi signala počasnejši, zato lahko uporabimo nižje hitrosti in krajše komunikacijske razdalje. Če želite to popraviti, boste morda morali nastaviti zunanje vlečne upore od 1k do 4k7.

Signal

I2C signal

La komunikacijski okvir od katerih je signal vodila I2C sestavljen iz bitov ali stanj (tistih, ki se uporabljajo v Arduinu, saj standard I2C omogoča druge):

  • 8 bitov, od tega 7 smeri podrejene naprave, do katere želite dostopati za pošiljanje ali prejemanje podatkov z nje. S 7 bitov je mogoče ustvariti do 128 različnih naslovov, tako da bi bilo teoretično mogoče dostopati do 128 naprav, lahko pa le do 112, saj je 16 rezerviranih za posebne namene. In dodatni bit, ki označuje, če želite pošiljanje ali prejemanje informacije o pomožni napravi.
  • Obstaja tudi bit preverjanja, če ni aktivna, komunikacija ne bo veljavna.
  • Potem bajtov podatkov ki jih hočejo sužnji poslati ali prejeti. Kot veste, je vsak bajt sestavljen iz 8-bitov. Upoštevajte, da je za vsakih 8-bitnih ali 1 bajt poslanih ali prejetih podatkov potrebnih dodatnih 18 bitov preverjanja veljavnosti, naslova itd., Kar pomeni, da je vodilo zelo omejeno.
  • Zadnji košček potrjevanje komunikacije.

Poleg tega taktna frekvenca za prenašanje je standardno 100 MHz, čeprav obstaja hitrejši način pri 400 MHz.

Prednosti in slabosti vodila I2C

The prednosti Zvok:

  • Enostavnost z uporabo samo dveh vrstic.
  • Ima mehanizme, da se ugotovi, ali je signal prispel v primerjavi z drugimi komunikacijskimi protokoli.

The slabosti Zvok:

  • Hitrost dokaj nizek prenos.
  • To ni full duplexTo pomeni, da ne morete hkrati pošiljati in prejemati.
  • Ne uporablja paritete niti kateri koli drug način preverjanja, da bi ugotovili, ali so prejeti podatkovni biti pravilni.

I2C na Arduinu

Avtobus Arduino I2C

En Arduino, odvisno od modela, zatiči, ki jih je mogoče omogočiti za uporabo tega vodila I2C, se razlikujejo. Na primer:

  • Arduino UNO, Nano, MiniPro: A4 se uporablja za SDA (podatki) in A5 za SCK (ura).
  • arduino mega: zatič 20 za SDA in 21 za SCK.

Ne pozabite, da ga morate uporabiti izkoristite knjižnico Žica.h za vaše Arduino IDE kode, čeprav obstajajo tudi druge I2C y i2cdevlib. Dokumente teh knjižnic ali naše članke o projektih, ki vas zanimajo, lahko preberete, če želite pridobiti kode, kako naj bodo programirane.

Kako vedeti naslov naprave za uporabo z I2C?

Samo še zadnje opozorilo, in to je, da ko kupujete IC od evropskih, japonskih ali ameriških proizvajalcev, vi navedite smer morate uporabiti za napravo. Po drugi strani pa Kitajci včasih tega ne navedejo podrobno ali pa ni pravilno, zato ne bo delovalo. To lahko enostavno rešite z optičnim bralnikom naslovov, če želite vedeti, v katero smer se morate sklicevati na svoji skici.

La skupnost arduino je ustvaril to kodo za skeniranje naslova in njegovo identifikacijo Na preprost način. Čeprav vam tukaj pokažem kodo:

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


Bodite prvi komentar

Pustite svoj komentar

Vaš e-naslov ne bo objavljen. Obvezna polja so označena z *

*

*

  1. Za podatke odgovoren: Miguel Ángel Gatón
  2. Namen podatkov: Nadzor neželene pošte, upravljanje komentarjev.
  3. Legitimacija: Vaše soglasje
  4. Sporočanje podatkov: Podatki se ne bodo posredovali tretjim osebam, razen po zakonski obveznosti.
  5. Shranjevanje podatkov: Zbirka podatkov, ki jo gosti Occentus Networks (EU)
  6. Pravice: Kadar koli lahko omejite, obnovite in izbrišete svoje podatke.