Viss par Arduino I2C autobusu

Arduino I2C autobuss

ar Arduino var izveidot lielu skaitu projektu kā jūs redzējāt, ja lasījāt Hwlibre, programmējot mikrokontrolleru vienkāršā veidā. Bet starp šīs plates analogajiem un digitālajiem savienojumiem hardware libre, ir daži, kas daudziem iesācējiem vēl nav zināmi, piemēram, patiesais PWM savienojumu potenciāls, SPI, seriālā porta RX un TX tapas vai pati I2C kopne. Tāpēc ar šo ierakstu varēsiet vismaz uzzināt visu nepieciešamo par I2C.

ar I2C kopne varat sazināties un izmantot daudzas trešo pušu ierīces, kurām ir šāda veida protokols, lai sazinātos ar Arduino dēli. Pateicoties šim Philips izgudrojumam, starp tiem varat savienot akselerometrus, displejus, skaitītājus, kompasus un daudzas citas integrētās shēmas.

Kas ir I2C?

I2C attiecas uz savstarpēji integrētu shēmu, tas ir, savstarpēji integrēta shēma. Tā ir sērijveida datu sakaru kopne, kuru 1982. gadā izstrādāja kompānija Philips Semiconductors, kas šodien ir atbrīvojusies no šīs sadaļas - NXP Semiconductors. Sākumā tas tika izveidots šī zīmola televizoriem, lai vienkāršā veidā sazinātos ar vairākām iekšējām mikroshēmām. Bet kopš 1990. gada I2C ir izplatījies un to izmanto daudzi ražotāji.

Pašlaik to izmanto desmitiem mikroshēmu ražotāju vairākām funkcijām. Arduino dēļu mikrokontrolleru radītājs Atmels licencēšanas apsvērumu dēļ ieviesa TWI (Two Wired Interface) apzīmējumu, lai gan tas ir identisks I2C. Bet 2006. gadā sākotnējā patenta derīguma termiņš beidzās un uz to vairs neattiecas autortiesības, tāpēc termins I2C ir izmantots atkārtoti (tikai logotips joprojām tiek aizsargāts, bet tā ieviešana vai termina lietošana nav ierobežota).

I2C kopnes tehniskā informācija

I2C autobuss

El I2C autobuss ir kļuvis par nozares standartu, un Arduino to ir ieviesis saziņai ar perifērijas ierīcēm, kurām tas nepieciešams. Tā darbībai nepieciešamas tikai divas līnijas vai kabeļi, viens pulksteņa signālam (CLK) un otrs sērijveida datu (SDA) nosūtīšanai. Tas ir izdevīgi salīdzinājumā ar citiem sakariem salīdzinājumā ar SPI kopni, lai gan tā darbība ir nedaudz sarežģītāka nepieciešamo papildu shēmu dēļ.

Šajā autobusā katrai tai pievienotajai ierīcei ir adrese izmanto, lai piekļūtu šīm ierīcēm atsevišķi. Šo adresi nosaka aparatūra, modificējot pēdējos 3 bitus, izmantojot džemperus vai pārslēdzot DIP, lai gan to var izdarīt arī programmatūra. Katrai ierīcei būs unikāla adrese, lai gan vairākām no tām var būt viena adrese, un, lai izvairītos no konfliktiem vai, ja iespējams, mainītu to, iespējams, būs jāizmanto sekundārā kopne.

Turklāt I2C kopnei ir a Master-Slave tipa arhitektūra, tas ir, saimnieks-vergs. Tas nozīmē, ka tad, kad sakaru sāk galvenā ierīce, tā varēs nosūtīt vai saņemt datus no saviem vergiem. Vergi nevarēs sākt saziņu, to var izdarīt tikai kapteinis, un arī vergi nevar tieši sarunāties savā starpā bez saimnieka iejaukšanās.

Ja jums ir vairāki skolotāji autobusā, tikai viens var vienlaikus darboties kā skolotājs. Bet tas nav tā vērts, jo skolotāja maiņa prasa lielu sarežģītību, tāpēc tā nav bieža parādība.

Paturiet prātā, ka galvenais nodrošina pulksteņa signālu, lai sinhronizētu visas kopnes ierīces. Tas novērš nepieciešamību, lai katram vergam būtu savs pulkstenis.

I2C kopnes protokols paredz arī pievilkšanas rezistoru izmantošanu barošanas sprieguma līnijās (Vcc), lai gan šie rezistori parasti netiek izmantoti kopā ar Arduino pull-up, jo programmēt bibliotēkas kā vads aktivizē iekšējos ar vērtību 20-30 k. Dažiem projektiem tas var būt pārāk mīksts, tāpēc signāla augšupejošās malas būs lēnākas, tāpēc var izmantot mazāku ātrumu un īsākus sakaru attālumus. Lai labotu, iespējams, jums būs jāiestata ārējie pievilkšanas rezistori no 1k līdz 4k7.

Signāls

I2C signāls

La komunikācijas rāmis no kuriem I2C kopnes signāls sastāv no bitiem vai stāvokļiem (tie, kurus izmanto Arduino, jo I2C standarts ļauj citiem):

  • 8 biti, no tiem 7 no adrese vergu ierīces, kurai vēlaties piekļūt, lai no tās nosūtītu vai saņemtu datus. Ar 7 bitiem var izveidot līdz pat 128 dažādām adresēm, tāpēc teorētiski varētu piekļūt 128 ierīcēm, bet piekļūt var tikai 112, jo 16 ir rezervētas īpašām vajadzībām. Un papildu bits, kas norāda, ja vēlaties nosūtīt vai saņemt informācija par vergu ierīcēm.
  • Ir arī validācijas bits, ja tā nav aktīva, saziņa nebūs derīga.
  • Tad datu baiti ka viņi vēlas nosūtīt vai saņemt no vergiem. Katrs baits, kā jūs zināt, sastāv no 8 bitiem. Ņemiet vērā, ka par katru nosūtīto vai saņemto 8 bitu vai 1 baitu datu ir nepieciešami papildu 18 biti validācijas, adreses utt., Kas nozīmē, ka kopnes ātrums ir ļoti ierobežots.
  • Pēdējais mazliet validācija komunikācijas.

Turklāt pulksteņa frekvence pārraides ātrums ir 100 Mhz standartā, lai gan ir ātrāks režīms pie 400 Mhz.

I2C kopnes priekšrocības un trūkumi

the priekšrocība skaņa:

  • Vienkāršība izmantojot tikai divas līnijas.
  • Tam ir mehānismi, lai uzzinātu, vai signāls ir ieradies salīdzinājumā ar citiem sakaru protokoliem.

the trūkumi skaņa:

  • Ātrums diezgan zema pārraide.
  • Tas nav pilns duplekss, tas ir, jūs nevarat nosūtīt un saņemt vienlaicīgi.
  • Nelieto paritāti ne arī cita veida pārbaudes mehānismu, lai uzzinātu, vai saņemtie datu biti ir pareizi.

I2C uz Arduino

Arduino I2C autobuss

En Arduino, atkarībā no modeļa, tapas, kuras var iespējot, lai izmantotu šo I2C kopni, atšķiras. Piemēram:

  • Arduino UNO, Nano, MiniPro: A4 tiek izmantots SDA (dati) un A5 - SCK (pulkstenis).
  • Mega Arduino: tapa 20 SDA un 21 SCK.

Atcerieties, ka, lai to izmantotu, jums tas ir jādara izmantot bibliotēku Vads.h jūsu Arduino IDE kodiem, lai gan ir arī citi līdzīgi I2C y i2cdevlib. Jūs varat izlasīt šo bibliotēku dokumentus vai mūsu rakstus par projektiem, kas jūs interesē, lai iegūtu kodu, kā tas tiktu ieprogrammēts.

Kā uzzināt ierīces adresi, lai to izmantotu ar I2C?

Tikai pēdējais brīdinājums, un tas ir tas, ka, pērkot IC no Eiropas, Japānas vai Amerikas ražotājiem, jūs norādīt virzienu jums vajadzētu izmantot ierīcei. No otras puses, ķīnieši to dažreiz neskaidro vai arī tas nav pareizi, tāpēc tas nedarbosies. To var viegli atrisināt ar adrešu skeneri, lai uzzinātu, uz kuru virzienu jums vajadzētu atsaukties skicē.

La arduino kopiena to ir izveidojis kodu, lai skenētu adresi un to identificētu Vienkāršā veidā. Lai gan es jums parādīju kodu tieši šeit:

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


Esi pirmais, kas komentārus

Atstājiet savu komentāru

Jūsu e-pasta adrese netiks publicēta. Obligātie lauki ir atzīmēti ar *

*

*

  1. Atbildīgais par datiem: Migels Ángels Gatóns
  2. Datu mērķis: SPAM kontrole, komentāru pārvaldība.
  3. Legitimācija: jūsu piekrišana
  4. Datu paziņošana: Dati netiks paziņoti trešām personām, izņemot juridiskus pienākumus.
  5. Datu glabāšana: datu bāze, ko mitina Occentus Networks (ES)
  6. Tiesības: jebkurā laikā varat ierobežot, atjaunot un dzēst savu informāciju.