Semua tentang bus Arduino I2C

Bus Arduino I2C

dengan Arduino dapat membuat banyak proyek seperti yang Anda lihat jika Anda membaca Hwlibre, memprogram mikrokontroler dengan cara yang sederhana. Namun antara koneksi analog dan digital board ini hardware libre, ada beberapa yang masih belum diketahui oleh banyak pemula, seperti potensi sebenarnya dari koneksi PWM, SPI, pin RX dan TX dari port serial, atau bus I2C itu sendiri. Oleh karena itu, dengan entri ini Anda setidaknya dapat mengetahui semua yang Anda butuhkan tentang I2C.

dengan bus I2C Anda dapat menghubungkan dan menggunakan banyak perangkat pihak ketiga yang memiliki jenis protokol ini untuk berkomunikasi dengan papan Arduino. Di antara keduanya, Anda dapat menghubungkan akselerometer, layar, penghitung, kompas, dan banyak lagi sirkuit terintegrasi berkat penemuan Philips ini.

Apa itu I2C?

I2C mengacu pada Inter-Integated Circuit, yaitu sirkuit antar-terintegrasi. Ini adalah bus komunikasi data serial yang dikembangkan pada tahun 1982 oleh perusahaan Semikonduktor Philips, yang sekarang menjadi Semikonduktor NXP setelah menyingkirkan bagian ini. Awalnya dibuat untuk televisi merek ini, untuk mengkomunikasikan beberapa chip internal dengan cara yang sederhana. Namun sejak tahun 1990 I2C telah menyebar dan digunakan oleh banyak pabrikan.

Saat ini digunakan oleh puluhan pembuat chip untuk berbagai fungsi. Atmel, pencipta mikrokontroler untuk papan Arduino, memperkenalkan sebutan TWI (Two Wired Interface) untuk tujuan lisensi, meskipun identik dengan I2C. Namun pada tahun 2006, paten aslinya telah habis masa berlakunya dan tidak lagi tunduk pada hak cipta, sehingga istilah I2C telah digunakan kembali (hanya logo yang tetap dilindungi, namun penerapan atau penggunaan istilah tersebut tidak dibatasi).

Detail teknis bus I2C

Bus I2C

El Bus I2C telah menjadi standar industri, dan Arduino telah menerapkannya untuk komunikasi dengan peripheral yang membutuhkannya. Hanya membutuhkan dua jalur atau kabel untuk pengoperasiannya, satu untuk sinyal clock (CLK) dan yang lainnya untuk mengirimkan data serial (SDA). Ini menguntungkan dibandingkan dengan komunikasi lain dibandingkan dengan bus SPI, meskipun operasinya agak lebih kompleks karena membutuhkan sirkuit tambahan.

Di bus ini setiap perangkat yang terhubung memiliki alamat digunakan untuk mengakses perangkat ini satu per satu. Alamat ini ditetapkan oleh perangkat keras, memodifikasi 3 bit terakhir melalui jumper atau sakelar DIP, meskipun dapat juga dilakukan oleh perangkat lunak. Setiap perangkat akan memiliki alamat yang unik, meskipun beberapa di antaranya mungkin memiliki alamat yang sama dan mungkin perlu menggunakan bus sekunder untuk menghindari konflik atau mengubahnya jika memungkinkan.

Selain itu, bus I2C memiliki a Arsitektur tipe Master-Slave, yaitu, tuan-budak. Ini berarti bahwa ketika komunikasi dimulai oleh perangkat master, perangkat tersebut akan dapat mengirim atau menerima data dari budaknya. Para budak tidak akan dapat memulai komunikasi, hanya tuan yang dapat melakukannya, dan para budak tidak dapat berbicara satu sama lain secara langsung tanpa campur tangan tuannya.

Jika sudah beberapa guru di dalam bus, hanya satu yang bisa bertindak sebagai guru secara bersamaan. Namun hal tersebut tidak sepadan, karena pergantian guru menuntut kompleksitas yang tinggi, sehingga tidak sering dilakukan.

Perlu diingat bahwa file master memberikan sinyal clock untuk menyinkronkan semua perangkat di bus. Itu menghilangkan kebutuhan setiap budak untuk memiliki jam tangan mereka sendiri.

Protokol bus I2C juga memperkirakan penggunaan resistor pull-up di jalur tegangan suplai (Vcc), meskipun resistor ini biasanya tidak digunakan dengan Arduino. pull-up karena perpustakaan pemrograman saat Wire mengaktifkan internal dengan nilai 20-30 k. Ini mungkin terlalu lunak untuk beberapa proyek, oleh karena itu tepi naik sinyal akan lebih lambat, sehingga kecepatan yang lebih rendah dan jarak komunikasi yang lebih pendek dapat digunakan. Untuk mengoreksi bahwa Anda mungkin perlu mengatur resistor pull-up eksternal dari 1k hingga 4k7.

Sinyal

Sinyal I2C

La bingkai komunikasi di mana sinyal bus I2C terdiri dari bit atau status (yang digunakan di Arduino, karena standar I2C memungkinkan yang lain):

  • 8 bit, 7 di antaranya Alamat jalan dari perangkat budak yang ingin Anda akses untuk mengirim atau menerima data darinya. Dengan 7 bit, hingga 128 alamat berbeda dapat dibuat, sehingga 128 perangkat secara teoritis dapat diakses, tetapi hanya 112 yang dapat diakses, karena 16 dicadangkan untuk penggunaan khusus. Dan sedikit tambahan yang menunjukkan jika Anda mau mengirim atau menerima informasi perangkat budak.
  • Juga ada sedikit validasi, jika tidak aktif komunikasi tidak akan valid.
  • Kemudian byte data yang ingin mereka kirim atau terima oleh para budak. Setiap byte, seperti yang Anda ketahui, terdiri dari 8-bit. Perhatikan bahwa untuk setiap 8-bit atau 1 byte data yang dikirim atau diterima, diperlukan tambahan 18 bit validasi, alamat, dll., Yang berarti kecepatan bus sangat terbatas.
  • Sedikit terakhir validasi dari komunikasi tersebut.

Selain itu, frekuensi clock untuk transmisi 100 Mhz sebagai standar, meskipun ada mode yang lebih cepat pada 400 Mhz.

Keuntungan dan kerugian dari bus I2C

itu keuntungan suara:

  • Kesederhanaan dengan hanya menggunakan dua baris.
  • Sudah mekanisme untuk mengetahui apakah sinyal telah tiba dibandingkan dengan protokol komunikasi lainnya.

itu kerugian suara:

  • Mempercepat transmisi cukup rendah.
  • Ini bukan dupleks penuh, yaitu, Anda tidak dapat mengirim dan menerima secara bersamaan.
  • Tidak menggunakan paritas atau jenis mekanisme verifikasi lainnya untuk mengetahui apakah bit data yang diterima benar.

I2C di Arduino

Bus Arduino I2C

En Arduino, tergantung modelnya, pin yang dapat diaktifkan untuk menggunakan bus I2C ini berbeda-beda. 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.

Ingatlah bahwa untuk menggunakannya Anda harus memanfaatkan perpustakaan kawat.h untuk kode IDE Arduino Anda, meskipun ada kode lain yang serupa I2C y i2cdevlib. Anda dapat membaca dokumen perpustakaan ini atau artikel kami tentang proyek yang Anda minati untuk mendapatkan kode bagaimana itu akan diprogram.

Bagaimana cara mengetahui alamat perangkat untuk menggunakannya dengan I2C?

Hanya satu peringatan terakhir, dan itu adalah ketika Anda membeli IC dari pabrikan Eropa, Jepang atau Amerika, Anda tunjukkan arahnya yang harus Anda gunakan untuk perangkat tersebut. Di sisi lain, orang Tionghoa terkadang tidak merinci atau tidak benar, sehingga tidak akan berfungsi. Itu dapat dengan mudah diselesaikan dengan pemindai alamat untuk mengetahui arah mana yang harus Anda rujuk dalam sketsa Anda.

La komunitas Arduino telah membuat ini kode untuk memindai alamat dan mengidentifikasinya Dengan cara yang sederhana. Meskipun saya tunjukkan kodenya 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);
}


Jadilah yang pertama mengomentari

tinggalkan Komentar Anda

Alamat email Anda tidak akan dipublikasikan. Bidang yang harus diisi ditandai dengan *

*

*

  1. Penanggung jawab data: Miguel Ángel Gatón
  2. Tujuan data: Mengontrol SPAM, manajemen komentar.
  3. Legitimasi: Persetujuan Anda
  4. Komunikasi data: Data tidak akan dikomunikasikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Basis data dihosting oleh Occentus Networks (UE)
  6. Hak: Anda dapat membatasi, memulihkan, dan menghapus informasi Anda kapan saja.