- Apa itu Protokol Komunikasi I2C?
- Bagaimana I2C Communication bekerja?
- Di mana menggunakan komunikasi I2C?
- I2C di MSP430: Mengontrol Potensiometer Digital AD5171
MSP430 adalah platform kuat yang disediakan oleh Texas Instruments untuk proyek yang disematkan, sifatnya yang serba guna telah membuatnya menemukan cara untuk masuk ke banyak aplikasi dan fase ini masih berjalan. Jika Anda telah mengikuti tutorial MSP430 kami, maka Anda akan menyadari bahwa kami telah membahas berbagai macam tutorial tentang mikrokontroler ini mulai dari yang paling dasar. Sejak sekarang, kami telah membahas dasar-dasar untuk masuk ke hal-hal yang lebih menarik seperti portal komunikasi.
Dalam sistem aplikasi tertanam yang luas, tidak ada mikrokontroler yang dapat melakukan semua aktivitas dengan sendirinya. Pada beberapa tahap waktu itu harus berkomunikasi dengan perangkat lain untuk berbagi informasi, ada banyak jenis protokol komunikasi untuk berbagi informasi ini, tetapi yang paling banyak digunakan adalah USART, IIC, SPI dan CAN. Setiap protokol komunikasi memiliki kelebihan dan kekurangannya masing-masing. Mari fokus pada bagian I2C untuk saat ini karena itulah yang akan kita pelajari dalam tutorial ini.
Apa itu Protokol Komunikasi I2C?
Istilah IIC adalah singkatan dari " Inter Integrated Circuits ". Biasanya dilambangkan sebagai I2C atau I kuadrat C atau bahkan sebagai protokol antarmuka 2-kabel (TWI) di beberapa tempat tetapi semuanya berarti sama. I2C adalah protokol komunikasi sinkron yang berarti, kedua perangkat yang berbagi informasi harus berbagi sinyal jam yang sama. Ini hanya memiliki dua kabel untuk berbagi informasi yang satu digunakan untuk sinyal ayam dan yang lainnya digunakan untuk mengirim dan menerima data.
Bagaimana I2C Communication bekerja?
Komunikasi I2C pertama kali diperkenalkan oleh Phillips. Seperti yang dikatakan sebelumnya, ia memiliki dua kabel, kedua kabel ini akan dihubungkan di dua perangkat. Di sini satu perangkat disebut master dan perangkat lainnya disebut slave. Komunikasi harus dan akan selalu terjadi antara dua Tuan dan seorang Budak. Keuntungan dari komunikasi I2C adalah lebih dari satu slave dapat dihubungkan ke Master.
Komunikasi lengkap terjadi melalui dua kabel ini yaitu, Serial Clock (SCL) dan Serial Data (SDA).
Serial Clock (SCL): Membagikan sinyal clock yang dihasilkan oleh master dengan budak
Serial Data (SDA): Mengirim data ke dan dari antara Master dan slave.
Pada waktu tertentu, hanya master yang dapat memulai komunikasi. Karena ada lebih dari satu budak di dalam bus, majikan harus merujuk ke setiap budak menggunakan alamat yang berbeda. Ketika dialamatkan hanya budak dengan alamat tertentu yang akan membalas kembali dengan informasi sementara yang lain terus keluar. Dengan cara ini kita dapat menggunakan bus yang sama untuk berkomunikasi dengan banyak perangkat.
Tingkat tegangan I2C belum ditentukan sebelumnya. Komunikasi I2C bersifat fleksibel, artinya perangkat yang bertenaga 5v volt, dapat menggunakan 5v untuk I2C dan perangkat 3.3v dapat menggunakan 3v untuk komunikasi I2C. Tetapi bagaimana jika dua perangkat yang berjalan pada voltase berbeda, perlu berkomunikasi menggunakan I2C? Sebuah 5V I2C bus tidak dapat terhubung dengan 3.3V perangkat. Dalam hal ini pemindah tegangan digunakan untuk menyesuaikan level tegangan antara dua bus I2C.
Ada beberapa kondisi yang membingkai sebuah transaksi. Inisialisasi transmisi dimulai dengan tepi jatuh SDA, yang didefinisikan sebagai kondisi 'MULAI' dalam diagram di bawah ini di mana master meninggalkan SCL tinggi sementara SDA disetel rendah.
Seperti yang ditunjukkan pada diagram di atas di bawah ini, Tepi jatuh SDA adalah pemicu perangkat keras untuk kondisi MULAI. Setelah ini semua perangkat di bus yang sama masuk ke mode mendengarkan.
Dengan cara yang sama, tepi naik SDA menghentikan transmisi yang ditunjukkan sebagai kondisi 'BERHENTI' pada diagram di atas, di mana master meninggalkan SCL tinggi dan juga melepaskan SDA ke TINGGI. Jadi tepi naik SDA menghentikan transmisi.
Bit R / W menunjukkan arah transmisi dari byte berikut, jika TINGGI berarti budak akan mengirimkan dan jika rendah berarti master akan mengirimkan.
Setiap bit ditransmisikan pada setiap siklus clock, sehingga dibutuhkan 8 siklus clock untuk mengirimkan satu byte. Setelah setiap byte dikirim atau diterima, siklus jam kesembilan diadakan untuk ACK / NACK (diakui / tidak diakui). Bit ACK ini dihasilkan oleh slave atau master tergantung pada situasinya. Untuk bit ACK, SDA disetel ke rendah oleh master atau slave pada siklus jam ke- 9. Jadi itu rendah dianggap sebagai ACK jika tidak NACK.
Di mana menggunakan komunikasi I2C?
Komunikasi I2C hanya digunakan untuk komunikasi jarak pendek. Hal ini tentu dapat diandalkan sampai batas tertentu karena memiliki pulsa jam tersinkronisasi untuk membuatnya pintar. Protokol ini terutama digunakan untuk berkomunikasi dengan sensor atau perangkat lain yang harus mengirimkan informasi ke master. Ini sangat berguna ketika mikrokontroler harus berkomunikasi dengan banyak modul pendukung lainnya dengan menggunakan kabel minimum. Jika Anda mencari komunikasi jarak jauh, Anda harus mencoba RS232 dan jika Anda mencari komunikasi yang lebih andal, Anda harus mencoba protokol SPI.
I2C di MSP430: Mengontrol Potensiometer Digital AD5171
Energia IDE adalah salah satu software termudah untuk memprogram MSP430 kami. Ini sama dengan Arduino IDE. Anda dapat mempelajari lebih lanjut tentang Memulai MSP430 menggunakan Energia IDE di sini.
Jadi, untuk menggunakan I2C di Energia IDE kita hanya perlu menyertakan file header wire.h. Deklarasi pin (SDA dan SCL) ada di dalam wire library, jadi kita tidak perlu mendeklarasikannya di fungsi setup .
Contoh contoh dapat ditemukan di menu Contoh IDE. Salah satu contohnya dijelaskan di bawah ini:
Contoh ini menunjukkan cara mengontrol Perangkat Analog AD5171 Potensiometer Digital yang berkomunikasi melalui protokol serial sinkron I2C. Menggunakan Perpustakaan Kawat I2C MSP, pot digital akan melewati 64 tingkat resistansi, memudarkan LED.
Pertama, kami akan menyertakan perpustakaan yang bertanggung jawab untuk komunikasi i2c yaitu perpustakaan kabel
#include
Dalam fungsi setup , kita akan memulai wire library dengan fungsi .begin () .
void setup () { Wire.begin (); }
Kemudian inisialisasi val variabel untuk menyimpan nilai potensiometer
byte val = 0;
Dalam fungsi loop , kita akan memulai transmisi ke perangkat slave i2c (dalam hal ini IC potensiometer Digital) dengan menentukan alamat perangkat yang diberikan dalam lembar data IC.
void loop () { Wire.beginTransmission (44); // kirim ke perangkat # 44 (0x2c)
Selanjutnya, queue bytes yaitu data yang ingin Anda kirim ke IC untuk dikirim dengan fungsi write () .
Wire.write (byte (0x00)); // mengirimkan instruksi byte Wire.write (val); // mengirimkan byte nilai potensiometer
Kemudian transmisikan dengan memanggil endTransmission () .
Wire.endTransmission (); // hentikan transmisi val ++; // kenaikan nilai if (val == 64) {// jika mencapai posisi 64 (max) val = 0; // mulai lagi dari nilai terendah } penundaan (500); }