Sadayana ngeunaan beus Arduino I2C

Beus Arduino I2C

con Arduino tiasa nyiptakeun seueur proyék sakumaha anu anjeun tingali upami anjeun maca Hwlibre, program mikrokontroler dina cara saderhana. Tapi di antara sambungan analog sareng digital tina dewan perangkat keras gratis ieu, aya sababaraha anu masih teu dipikaterang ku seueur pamula, sapertos poténsi leres sambungan PWM, SPI, pin RX sareng TX port serial, atanapi sorangan beus I2C. Ku alatan éta, ku Éntri ieu sahenteuna anjeun tiasa terang sadayana anu anjeun peryogikeun tina I2C.

con beus I2C anjeun tiasa nyambung sareng nganggo seueur alat pihak katilu anu ngagaduhan jenis protokol ieu pikeun komunikasi sareng dewan Arduino. Di antara aranjeunna, anjeun tiasa nyambungkeun accelerometers, display, counter, kompas, sareng seueur deui sirkuit terintegrasi berkat penemuan Philips ieu.

Naon I2C?

I2C ngarujuk kana Sirkuit Antar-Integated, nyaéta, sirkuit antar-terpadu. Éta mangrupikeun beus komunikasi data sérial anu dikembangkeun di 1982 ku perusahaan Philips Semiconductors, anu dinten ieu nyaéta NXP Semiconductors saatos nyingkirkeun bagian ieu. Mimitina mah ieu didamel pikeun tivi dina mérek ieu, pikeun komunikasi sababaraha chip internal ku cara anu sederhana. Tapi ti saprak 1990 I2C parantos sumebar sareng dianggo ku seueur pabrik.

Ayeuna dianggo ku puluhan chipmaker pikeun sababaraha fungsi. Atmel, panyipta mikrokontroler pikeun papan Arduino, ngenalkeun sebutan TWI (Dua Wired Interface) pikeun tujuan lisénsi, sanaos idéntik sareng I2C. Tapi dina 2006, patén aslina kadaluarsana sareng henteu tunduk kana hak cipta, janten istilah I2C parantos dianggo deui (ngan logo na tetep dijaga, tapi palaksanaanna atanapi panggunaan istilah na henteu diwatesan).

Detil téknis beus I2C

Beus I2C

El Beus I2C parantos janten standar industri, sareng Arduino parantos ngalaksanakeunana pikeun komunikasi sareng périferal anu peryogi. Éta ngan ukur peryogi dua garis atanapi kabel pikeun operasi na, hiji kanggo sinyal jam (CLK) sareng anu sanés pikeun ngirim data serial (SDA). Ieu nguntungkeun dibandingkeun komunikasi anu sanés dibandingkeun sareng beus SPI, sanaos operasina rada langkung rumit kusabab sirkuit tambahan anu diperyogikeun.

Dina beus ieu unggal alat anu nyambung ka éta ngagaduhan alamat dipaké pikeun ngaksés alat ieu masing-masing. Alamat ieu dibereskeun ku perangkat keras, ngarobih 3 bit terakhir ku cara jumper atanapi switch DIPs, sanaos ogé tiasa dilakukeun ku parangkat lunak. Masing-masing alat bakal ngagaduhan alamat anu unik, sanaos sababaraha di antawisna ngagaduhan alamat anu sami sareng panginten kedah nganggo beus sékundér pikeun nyingkahan konflik atanapi ngarobihna upami tiasa.

Salaku tambahan, beus I2C gaduh Arsitéktur tipe Master-Slave, nyaéta, tuan-budak. Ieu ngandung harti yén nalika komunikasi dimimitian ku alat master, éta bakal tiasa ngirim atanapi nampi data ti budakna. Budak moal tiasa ngamimitian komunikasi, ngan ukur tuan anu tiasa ngalakukeun éta, sareng budak ogé henteu tiasa saling ngobrol langsung tanpa campur tangan tuan.

Upami Anjeun gaduh sababaraha guru dina beus, ngan ukur hiji anu tiasa janten guru sakaligus. Tapi éta henteu pantes, kumargi parobihan guru nungtut kompleksitas anu luhur, janten henteu sering.

Émut yén master nyayogikeun sinyal jam pikeun nyingkronkeun sadaya alat dina beus. Éta ngaleungitkeun kabutuhan unggal budak pikeun gaduh arloji nyalira.

Protokol beus I2C ogé ngarep-ngarep panggunaan résistansi résistansi dina garis tegangan suplai (Vcc), sanaos résistor ieu biasana henteu dianggo ku Arduino pull-up sabab perpustakaan program sabab Kawat ngaktipkeun internal sareng nilai 20-30 k. Ieu tiasa lemes teuing pikeun sababaraha proyék, janten ningkatna ujung sinyalna bakal langkung laun, janten langkung gancang sareng jarak komunikasi anu langkung pondok tiasa dianggo. Pikeun ngabenerkeun anjeun panginten kedah nempatkeun résistor tarik-éksternal tina 1k dugi ka 4k7.

Sinyal

Sinyal I2C

 

La pigura komunikasi anu sinyal beus I2C diwangun ku bit atanapi nagara (anu dianggo dina Arduino, kusabab standar I2C ngamungkinkeun anu sanés):

  • 8 bit, 7 diantarana tina alamat alat budak anu anjeun badé aksés pikeun ngirim atanapi nampi data ti éta. Kalayan 7 bit, dugi ka 128 alamat anu béda tiasa didamel, janten 128 alat sacara téoritis tiasa diaksés, tapi ngan 112 anu tiasa diaksés, kumargi 16 disayogikeun kanggo panggunaan khusus. Sareng bit tambahan anu nunjukkeun upami anjeun hoyong ngirim atanapi nampi inpormasi paranti budak.
  • Aya ogé sakedik validasi, upami henteu aktip komunikasi moal valid.
  • Teras teh bait data yén maranéhna rék ngirim atanapi nampi ku budak. Unggal bait, sakumaha anjeun terang, diwangun ku 8-bit. Catet yén pikeun unggal 8-bit atanapi 1 bait data anu dikirim atanapi ditampi, tambahan 18 bit validasi, alamat, sareng sajabana diperyogikeun, anu hartosna yén beus terbatas pisan dina kagancangan.
  • A bit ahir tina validasi tina comunication nu.

Salaku tambahan, frékuénsi jam pikeun transmisi 100 Mhz salaku standar, sanaos aya modeu langkung gancang dina 400 Mhz.

Kaunggulan sareng kalemahan beus I2C

nu kauntungan Aranjeunna:

  • Kesederhanaan ku ukur ngagunakeun dua garis.
  • Éta ngagaduhan mékanisme pikeun terang upami sinyalna parantos sumping dibandingkeun sareng protokol komunikasi anu sanés.

nu kalemahan Aranjeunna:

  • Kagancangan pangiriman cukup low.
  • Éta sanés duplex lengkep, nyaéta, anjeun moal tiasa ngirim sareng nampi sakaligus.
  • Teu nganggo paritas atawa jinis mékanisme verifikasi sanés pikeun terang naha bit data anu ditampi leres.

 

 

I2C dina Arduino

Beus Arduino I2C

En Arduino, gumantung kana modélna, pin anu tiasa diaktipkeun nganggo beus I2C ieu rupa-rupa. Salaku conto:

  • Arduino UNO, Nano, MiniPro: A4 dianggo pikeun SDA (data) sareng A5 pikeun SCK (jam).
  • Arduino Mega: pin 20 pikeun SDA sareng 21 pikeun SCK.

Émut yén pikeun ngagunakeunana anjeun kedah ngamangpaatkeun perpustakaan Kawat.h pikeun kode IDE Arduino anjeun, sanaos aya anu sanés sapertosna I2C y I2Cdevlib. Anjeun tiasa maca dokumén perpustakaan ieu atanapi tulisan kami ngeunaan proyék-proyék anu dipikaresep anjeun pikeun kéngingkeun kode kumaha éta bakal diprogram.

Kumaha terang alamat alat pikeun ngagunakeunana nganggo I2C?

Ngan hiji peringatan terakhir, sareng éta nalika anjeun mésér IC ti pabrik Éropa, Jepang atanapi Amérika, anjeun nunjukkeun arah anjeun kedah anggo pikeun alat. Di sisi anu sanésna, urang Cina kadang henteu detailna atanapi éta henteu leres, janten moal jalan. Éta tiasa gampang direngsekeun ku scanner alamat pikeun terang arah mana anu anjeun kedah tingal dina skétsa anjeun.

La komunitas arduino parantos nyiptakeun ieu kode pikeun nyeken alamat sareng ngaidéntifikasi na Ku cara saderhana. Sanaos kuring nunjukkeun kode na didieu:

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


Eusi tulisan taat kana prinsip urang tina étika éditorial. Pikeun ngalaporkeun kasalahan klik di dieu.

Janten kahiji komen

Ninggalkeun koméntar anjeun

email alamat anjeun moal diterbitkeun. Widang diperlukeun téh ditandaan ku *

*

*

  1. Jawab data: Miguel Ángel Gatón
  2. Tujuan tina data: Kontrol SPAM, manajemén koméntar.
  3. Legitimasi: idin anjeun
  4. Komunikasi data: Data moal dikomunikasikan ka pihak katilu kacuali ku kawajiban hukum.
  5. Panyimpenan data: Basis data anu diayakeun ku Occentus Networks (EU)
  6. Hak: Iraha waé anjeun tiasa ngawatesan, cageur sareng mupus inpormasi anjeun.