- Apa itu Protokol Komunikasi I2C?
- Bagaimana Komunikasi I2C berfungsi?
- Di mana menggunakan komunikasi I2C?
- I2C dalam MSP430: Mengendalikan Potensiometer Digital AD5171
MSP430 adalah platform hebat yang disediakan oleh Texas Instruments untuk projek terbenam, sifatnya yang serba boleh menjadikannya mencari jalan ke banyak aplikasi dan fasa masih berjalan. Sekiranya anda mengikuti tutorial MSP430 kami, maka anda akan menyedari bahawa kami telah merangkumi pelbagai tutorial mengenai mikrokontroler ini bermula dari asasnya. Sejak sekarang, kami telah merangkumi asas-asas yang boleh kami masuki dalam perkara yang lebih menarik seperti portal komunikasi.
Dalam sistem aplikasi tertanam yang luas, tidak ada pengawal mikro yang dapat melakukan semua aktiviti dengan sendirinya. Pada tahap tertentu ia perlu berkomunikasi dengan peranti lain untuk berkongsi maklumat, terdapat banyak jenis protokol komunikasi untuk berkongsi maklumat ini, tetapi yang paling kerap digunakan adalah USART, IIC, SPI dan CAN. Setiap protokol komunikasi mempunyai kelebihan dan kekurangannya sendiri. Mari fokus pada bahagian I2C buat masa ini kerana itulah yang akan kita pelajari dalam tutorial ini.
Apa itu Protokol Komunikasi I2C?
Istilah IIC bermaksud " Inter Integrated Circuits ". Biasanya dilambangkan sebagai I2C atau I kuadrat C atau bahkan sebagai protokol antara muka 2-wayar (TWI) di beberapa tempat tetapi semuanya bererti sama. I2C adalah makna protokol komunikasi segerak, kedua-dua peranti yang berkongsi maklumat mesti berkongsi isyarat jam yang sama. Ia hanya mempunyai dua wayar untuk berkongsi maklumat yang mana satu digunakan untuk isyarat ayam dan yang lain digunakan untuk menghantar dan menerima data.
Bagaimana Komunikasi I2C berfungsi?
Komunikasi I2C pertama kali diperkenalkan oleh Phillips. Seperti yang dinyatakan sebelumnya, ia mempunyai dua wayar, kedua-dua wayar ini akan disambungkan di dua peranti. Di sini satu peranti dipanggil master dan peranti lain dipanggil sebagai hamba. Komunikasi harus dan akan selalu berlaku antara dua Tuan dan Budak. Kelebihan komunikasi I2C adalah lebih daripada satu hamba dapat dihubungkan dengan Master.
Komunikasi lengkap berlaku melalui dua wayar ini iaitu, Serial Clock (SCL) dan Serial Data (SDA).
Serial Clock (SCL): Berkongsi isyarat jam yang dihasilkan oleh tuan dengan hamba
Data Bersiri (SDA): Menghantar data ke dan dari antara Tuan dan hamba.
Pada masa tertentu hanya tuan yang dapat memulakan komunikasi. Oleh kerana terdapat lebih dari satu hamba di dalam bas, tuan harus merujuk kepada setiap hamba menggunakan alamat yang berbeza. Apabila dialamatkan hanya hamba dengan alamat tertentu yang akan membalas dengan maklumat sementara yang lain terus berhenti. Dengan cara ini kita dapat menggunakan bas yang sama untuk berkomunikasi dengan pelbagai peranti.
Tahap voltan I2C tidak ditentukan sebelumnya. Komunikasi I2C fleksibel, bermaksud peranti yang dikuasakan oleh volt 5v, dapat menggunakan 5v untuk I2C dan peranti 3.3v dapat menggunakan 3v untuk komunikasi I2C. Tetapi bagaimana jika dua peranti yang berjalan pada voltan yang berbeza, perlu berkomunikasi menggunakan I2C? A bas 5V I2C tidak boleh dihubungkan dengan 3.3V peranti. Dalam kes ini, pemindah voltan digunakan untuk memadankan tahap voltan antara dua bas I2C.
Terdapat beberapa syarat yang merangkumi transaksi. Permulaan penghantaran bermula dengan kelebihan SDA yang jatuh, yang ditakrifkan sebagai keadaan 'MULAI' dalam rajah di bawah di mana induk meninggalkan SCL tinggi semasa menetapkan SDA rendah.
Seperti yang ditunjukkan dalam rajah di bawah, Tepi SDA yang jatuh adalah pencetus perkakasan untuk keadaan MULAI. Selepas ini semua peranti pada bas yang sama masuk ke mod mendengar.
Dengan cara yang sama, kelebihan SDA yang berhenti menghentikan transmisi yang ditunjukkan sebagai keadaan 'STOP' dalam rajah di atas, di mana master meninggalkan SCL tinggi dan juga melepaskan SDA untuk pergi TINGGI. Oleh itu, peningkatan SDA menghentikan penghantarannya.
R / W bit menunjukkan arah penghantaran bait berikut, jika TINGGI berarti hamba akan menghantar dan jika rendah bermaksud tuan akan menghantar.
Setiap bit dihantar pada setiap kitaran jam, jadi diperlukan 8 pusingan jam untuk mengirimkan bait. Selepas setiap bait dihantar atau diterima, kitaran jam kesembilan diadakan untuk ACK / NACK (diakui / tidak diakui). Bit ACK ini dihasilkan oleh hamba atau tuan bergantung kepada keadaan. Untuk bit ACK, SDA ditetapkan ke rendah oleh tuan atau hamba pada pusingan jam ke- 9. Jadi rendah ia dianggap sebagai ACK sebaliknya NACK.
Di mana menggunakan komunikasi I2C?
Komunikasi I2C hanya digunakan untuk komunikasi jarak dekat. Ia semestinya boleh dipercayai sehingga mempunyai denyut jam yang disegerakkan untuk menjadikannya pintar. Protokol ini digunakan terutamanya untuk berkomunikasi dengan sensor atau peranti lain yang harus menghantar maklumat kepada master. Sangat berguna apabila mikrokontroler harus berkomunikasi dengan banyak modul hamba lain dengan menggunakan wayar minimum. Sekiranya anda mencari komunikasi jarak jauh, anda harus mencuba RS232 dan jika anda mencari komunikasi yang lebih dipercayai, anda harus mencuba protokol SPI.
I2C dalam MSP430: Mengendalikan Potensiometer Digital AD5171
Energia IDE adalah salah satu perisian termudah untuk memprogram MSP430 kami. Ia sama dengan Arduino IDE. Anda boleh mengetahui lebih lanjut mengenai Bermula dengan MSP430 menggunakan Energia IDE di sini.
Jadi, untuk menggunakan I2C di Energia IDE, kita mesti memasukkan fail header wire.h. Deklarasi pin (SDA dan SCL) ada di dalam perpustakaan wayar, jadi kami tidak perlu menyatakan dalam fungsi persediaan .
Contoh contoh boleh didapati di menu Contoh IDE. Salah satu contohnya dijelaskan di bawah:
Contoh ini menunjukkan cara mengawal Peranti Analog Potensiometer Digital AD5171 yang berkomunikasi melalui protokol bersiri I2C. Dengan menggunakan Perpustakaan Kawat I2C MSP, periuk digital akan melalui tahap ketahanan 64, memudar LED.
Pertama, kami akan memasukkan perpustakaan yang bertanggungjawab untuk komunikasi i2c iaitu perpustakaan wayar
#sertakan
Dalam fungsi persediaan , kita akan memulakan perpustakaan wayar dengan fungsi .begin () .
batal persediaan () { Wire.begin (); }
Kemudian mulakan variabel val untuk menyimpan nilai potensiometer
bait val = 0;
Dalam fungsi gelung , kami akan memulakan transmisi ke perangkat budak i2c (dalam hal ini Digital potensiometer IC) dengan menentukan alamat perangkat yang diberikan dalam lembar data IC.
gelung kosong () { Wire.beginTransmission (44); // hantar ke peranti # 44 (0x2c)
Selepas itu, beratur byte iaitu data yang ingin anda hantar ke IC untuk dihantar dengan fungsi tulis () .
Wire.write (bait (0x00)); // menghantar arahan byte Wire.write (val); // menghantar bait nilai potensiometer
Kemudian hantarkannya dengan memanggil endTransmission () .
Wire.endTransmission (); // berhenti menghantar val ++; // kenaikan nilai jika (val == 64) {// jika mencapai kedudukan ke-64 (maksimum) val = 0; // mulakan dari nilai terendah } kelewatan (500); }