Semua mengenai bas Arduino I2C

Bas Arduino I2C

dengan Arduino dapat membuat sebilangan besar projek seperti yang anda lihat jika anda membaca Hwlibre, memprogram mikrokontroler dengan cara yang mudah. Tetapi antara sambungan analog dan digital papan ini hardware libre, terdapat beberapa yang masih agak tidak diketahui oleh ramai pemula, seperti potensi sebenar sambungan PWM, SPI, pin RX dan TX port bersiri, atau bas I2C itu sendiri. Oleh itu, dengan entri ini anda akan dapat sekurang-kurangnya mengetahui semua yang anda perlukan tentang I2C.

dengan bas I2C Anda boleh menyambung dan menggunakan banyak peranti pihak ketiga yang mempunyai protokol jenis ini untuk berkomunikasi dengan papan Arduino. Di antara mereka, anda boleh menyambungkan akselerometer, paparan, pembilang, kompas, dan banyak lagi litar bersepadu berkat penemuan Philips ini.

Apa itu I2C?

I2C merujuk kepada Inter-Integated Circuit, iaitu litar antara bersepadu. Ia adalah bas komunikasi data bersiri yang dikembangkan pada tahun 1982 oleh syarikat Philips Semiconductors, yang hari ini adalah NXP Semiconductors setelah menyingkirkan bahagian ini. Pada mulanya ia dibuat untuk televisyen jenama ini, untuk menyampaikan beberapa cip dalaman dengan cara yang mudah. Tetapi sejak tahun 1990 I2C telah menyebar dan digunakan oleh banyak pengeluar.

Kini digunakan oleh puluhan pembuat chip untuk pelbagai fungsi. Atmel, pencipta mikrokontroler untuk papan Arduino, memperkenalkan penunjukan TWI (Two Wired Interface) untuk tujuan perlesenan, walaupun identik dengan I2C. Tetapi pada tahun 2006, paten asalnya telah habis dan tidak lagi tertakluk kepada hak cipta, jadi istilah I2C telah digunakan kembali (hanya logo yang terus dilindungi, tetapi pelaksanaan atau penggunaan istilah tersebut tidak dibatasi)

Maklumat teknikal bas I2C

Bas I2C

El Bas I2C telah menjadi standard industri, dan Arduino telah melaksanakannya untuk komunikasi dengan periferal yang memerlukannya. Ia hanya memerlukan dua talian atau kabel untuk operasinya, satu untuk isyarat jam (CLK) dan satu lagi untuk menghantar data bersiri (SDA). Ini menguntungkan berbanding komunikasi lain berbanding bas SPI, walaupun pengoperasiannya agak lebih rumit kerana litar tambahan diperlukan.

Di dalam bas ini setiap peranti yang dihubungkan dengannya mempunyai alamat digunakan untuk mengakses peranti ini secara individu. Alamat ini diperbaiki oleh perkakasan, mengubah 3 bit terakhir melalui jumper atau menukar DIP, walaupun ia juga dapat dilakukan oleh perisian. Setiap peranti akan mempunyai alamat yang unik, walaupun beberapa dari mereka mungkin memiliki alamat yang sama dan mungkin perlu menggunakan bas sekunder untuk mengelakkan konflik atau mengubahnya jika mungkin.

Selain itu, bas I2C mempunyai Senibina jenis Master-Slave, iaitu tuan hamba. Ini bermaksud bahawa apabila komunikasi dimulakan oleh peranti induk, ia akan dapat mengirim atau menerima data dari budaknya. Hamba tidak akan dapat memulakan komunikasi, hanya tuan yang dapat melakukannya, dan hamba juga tidak boleh bercakap satu sama lain secara langsung tanpa campur tangan tuan.

Jika anda mempunyai beberapa orang guru di dalam bas, hanya seorang yang boleh bertindak sebagai guru secara serentak. Tetapi tidak berbaloi, kerana perubahan guru menuntut kerumitan yang tinggi, jadi tidaklah kerap.

Perlu diingat bahawa master memberikan isyarat jam untuk menyegerakkan semua peranti di dalam bas. Itu menghilangkan keperluan setiap hamba mempunyai jam tangan mereka sendiri.

Protokol bas I2C juga meramalkan penggunaan resistor penarik pada saluran voltan bekalan (Vcc), walaupun perintang ini biasanya tidak digunakan dengan Arduino pull-up kerana perpustakaan pengaturcaraan sebagai Wire mengaktifkan dalaman dengan nilai 20-30 k. Ini mungkin terlalu lembut untuk beberapa projek, oleh itu tepi isyarat yang meningkat akan lebih perlahan, sehingga kelajuan yang lebih rendah dan jarak komunikasi yang lebih pendek dapat digunakan. Untuk membetulkannya, anda mungkin perlu menetapkan perintang penarik luaran dari 1k hingga 4k7.

Isyarat

Isyarat I2C

La kerangka komunikasi di antaranya isyarat bas I2C terdiri daripada bit atau keadaan (yang digunakan di Arduino, kerana standard I2C membenarkan yang lain):

  • 8 bit, 7 daripadanya alamat peranti hamba yang ingin anda akses untuk menghantar atau menerima data daripadanya. Dengan 7 bit, hingga 128 alamat yang berbeda dapat dibuat, sehingga 128 perangkat secara teorinya dapat diakses, tetapi hanya 112 yang dapat diakses, karena 16 disediakan untuk kegunaan khusus. Dan bit tambahan yang menunjukkan jika anda mahu hantar atau terima maklumat peranti hamba.
  • Terdapat juga bit pengesahan, jika tidak aktif komunikasi tidak akan berlaku.
  • Kemudian bait data bahawa mereka mahu menghantar atau menerima oleh hamba. Setiap bait, seperti yang anda ketahui, terdiri daripada 8-bit. Perhatikan bahawa untuk setiap 8-bit atau 1 bait data yang dihantar atau diterima, diperlukan 18 bit pengesahan, alamat, dll., Yang bermaksud bahawa bas sangat terhad.
  • Sedikit terakhir pengesahan dari komunikasi.

Di samping itu, kekerapan jam untuk penghantaran adalah 100 Mhz sebagai standard, walaupun terdapat mod yang lebih pantas pada 400 Mhz.

Kelebihan dan kekurangan bas I2C

yang kelebihan bunyi:

  • Kesederhanaan dengan hanya menggunakan dua baris.
  • Ia telah mekanisme untuk mengetahui sama ada isyarat telah tiba berbanding dengan protokol komunikasi yang lain.

yang kekurangan bunyi:

  • Kelajuan penghantaran yang agak rendah.
  • Ia bukan dupleks penuh, iaitu, anda tidak dapat mengirim dan menerima secara serentak.
  • Tidak menggunakan pariti atau jenis mekanisme pengesahan lain untuk mengetahui apakah bit data yang diterima betul.

I2C di Arduino

Bas Arduino I2C

En Arduino, bergantung pada model, pin yang boleh diaktifkan untuk menggunakan bas I2C ini berbeza-beza. Sebagai contoh:

  • Arduino UNO, Nano, MiniPro: A4 digunakan untuk SDA (data) dan A5 untuk SCK (jam).
  • arduino mega: pin 20 untuk SDA dan 21 untuk SCK.

Ingat bahawa untuk menggunakannya, anda mesti memanfaatkan perpustakaan Kawat.h untuk kod Arduino IDE anda, walaupun ada yang lain seperti I2C y i2cdevlib. Anda boleh membaca dokumen-dokumen perpustakaan ini atau artikel kami mengenai projek-projek yang menarik bagi anda untuk mendapatkan kod bagaimana ia akan diprogramkan.

Bagaimana mengetahui alamat peranti untuk menggunakannya dengan I2C?

Hanya satu amaran terakhir, dan itu ialah apabila anda membeli IC dari pengeluar Eropah, Jepun atau Amerika, anda tunjukkan arah yang harus anda gunakan untuk peranti. Sebaliknya, orang Cina kadang-kadang tidak memperincikannya atau tidak betul, jadi itu tidak akan berjaya. Perkara itu dapat diselesaikan dengan mudah dengan pengimbas alamat untuk mengetahui arah mana yang harus anda rujuk dalam lakaran anda.

La komuniti arduino telah mencipta ini kod untuk mengimbas alamat dan mengenalinya Dengan cara yang mudah. Walaupun saya menunjukkan kodnya di sini:

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


Menjadi yang pertama untuk komen

Tinggalkan komen anda

Alamat email anda tidak akan disiarkan. Ruangan yang diperlukan ditanda dengan *

*

*

  1. Bertanggungjawab atas data: Miguel Ángel Gatón
  2. Tujuan data: Mengendalikan SPAM, pengurusan komen.
  3. Perundangan: Persetujuan anda
  4. Komunikasi data: Data tidak akan disampaikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Pangkalan data yang dihoskan oleh Occentus Networks (EU)
  6. Hak: Pada bila-bila masa anda boleh menghadkan, memulihkan dan menghapus maklumat anda.