Komunikasi Serial Sinkron I2C/IIC/TWI dengan Arduino

Saat melakukan eksperimen handling RTC DS3231/DS3232 pada artikel sebelumnya, kalau Anda perhatikan komunikasi yang dijalin antara RTC dan Arduino menggunakan pin A4 dan A5. Pin apakah itu? Mengapa bukan di pin 0 dan 1 (pin serial)? Jawabannya adalah : secara arsitektur, IC RTC DS3231/DS3232 didesain menggunakan komunikasi I2C/IIC/TWI, jadi perangkat apapun yang ingin mengambil data dari IC RTC tersebut harus menggunakan protokol yang sama. Sedangkan jika menggunakan Arduino, pin 0 dan 1 adalah pin serial tapi yang bertipe serial asinkron, jadi tidak dapat dihubungkan dengan RTC DS3231/DS3232. Sedangkan pin A4 dan A5 Arduino memiliki fungsi khusus sebagai pin I2C/IIC/TWI dengan A4 sebagai SDA dan A5 sebagai SCL. Untuk lebih jelasnya mengenai fungsi khusus pin A4 dan A5, silahkan dilihat pada gambar di bawah.

pin SDA SCL komunikasi IIC-I2C-TWI Arduino

Catatan : I2C berasal dari kata IIC, kepanjangannya Inter-Integrated Circuit. Sedangkan TWI kepanjangannya adalah Two Wire Interface. Ketiga istilah tersebut adalah sama, merujuk pada protokol komunikasi serial sinkron dengan dua kabel yakni SDA (Serial Data) dan SCL (Serial Clock).   SDA merupakan data serialnya, sedangkan SCL adalah jalur clock sinkronisasinya.

Ilustrasi cara kerja protokol komunikasi IIC/I2C/TWI adalah sebagai berikut :

ilustrasi jalur bus i2c-iic-twi

Yang perlu Anda perhatikan bahwa jalur bus komunikasi I2C bersifat open drain, jadi sebenarnya membutuhkan resistor pullup. Untuk jarak pendek resistor pullup ini bisa ditiadakan, namun untuk jarak panjang atau jumlah client/slave yang banyak, resistor pullup ini wajib ada. Untuk jumlah client/slave yang dapat terhubung dalam satu jalur bus I2C ini adalah sebanyak 112. Untuk tiap client/slave wajib memiliki alamat yang unik agar tidak terjadi tabrakan data (data collision) atau data yang invalid. Sedangkan panjang kabel pada jalur bus I2C, maksimal bisa mencapai 250 m tergantung pada besaran kapasitansi, resistor pullup dan kecepatan clock sinkronisasi data.

Khusus untuk Arduino, ada library tersendiri yang didedikasikan untuk menangani protokol serial sinkron secara I2C ini. Nama library tersebut adalah ‘Wire.h’. Anda harus mendeklarasikan library ini untuk mendapatkan function-function siap pakai yang akan memudahkan Anda menangani komunikasi secara I2C. Apakah harus menggunakan library ini? Tidak juga. Anda bisa menggunakan function buatan sendiri untuk berkomunikasi menggunakan I2C. Tapi ya itu tadi, Anda harus membangun function from the scratch, artinya Anda harus memahami level hardware yang akan ditangani, mengetahui pinout Arduino dan bagaimana mengaksesnya, serta menangani data serial yang keluar masuk secara I2C. Anda dapat menyingkat waktu untuk itu semua dengan cukup mendeklarasikan library ‘Wire.h’.

Function yang ada di library ini antara lain :

– begin() ==> menginisiasi protokol I2C di arduino

– requestFrom() ==> meminta data byte dari slave

– beginTransmission() ==> memulai transmisi data ke slave I2C sesuai alamatnya

– endTransmission() ==> mengakhiri transmisi data

– write() ==> mengirim data serial

– available() ==> mengecek kesiapan device I2C

– read() ==> membaca data serial I2C

– onReceive() ==> memanggil event handler tertentu saat data mulai masuk ke Arduino

– onRequest() ==> memanggil event handler tertentu saat ada permintaan data

Untuk contoh program dapat Anda baca melalui menu File-Examples-Wire. Di sana ada ada beberapa contoh program yang dapat Anda pelajari dan praktekkan.

5 2 votes
Article Rating

Leave a Reply

24 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
fendy

ajarin yang ini mas,,,

wire ini prinsip kerjanya sama kayak sensor capacitive(sentuh) ya mas..?

Fans

bismillah
mas aji, sy masih tahap belajar, gimn ya klo pingin komunikasikan 4 sampai 5 arduino 1 sbg master yg lainnya slave.

Giga

Bismillah, halo mas ! saya sedang tahap percobaan dengan i2c ini untuk sebuah sistem pada project yang melibatkan lebih dari satu arduino.

saya mau pakai konsep master-slave ini dengan prinsip kerja:
1. master memberi data variabel kepada slave
2. slave menerima data variabel dari master untuk diolah menjadi output
3. begitu juga sebaliknya (feedbacl)

yang jd pertanyaan, apakah panjang data yang bisa dikirim hanya bisa sampai 255 ? saya sudah coba mengirim integer 1000, tetapi yang keluar tidak 1000. kalau integer < 255, keluarnya sesuai. apakah ada hubungannya dengan panjang bit pada i2c ini ?

Sion.js

bisa gak klo kita menggunakan dua sensor dengan scl dan sda yang sama pada arduino?
gimana ya caranya?

locky

mas kalo mau menggunakan virtual terminal proteus agar tidak hanya membaca data tapi juga dapat menulis gimana caranya? yg saya buat baru sebatas instruksi ya atau tidak.

Anonim

Mas saya mau nanya mas bsa 2 sensor menggunakan jalur sda scl, saya udah baca alamat sensornya tetapi sensor tersebut alamatnya sama gimana cara buat programnya mas ?

aprijal

asssalamualaikum wr.wb.

pak aji

saya mau melanjutkan pembahasan komentar bapak. nah disini saya ada permasalahan tentang penggunaan alamat i2c yang sama pak. dimana sensor yang saya pakai yaitu RTC 1307 dan MPU-6050, 2 sensor ini memiliki alamat i2c yang sama pak.
dan saya sudah mecoba merubah salah satu alamat i2c tersebut dan berhasil tetapi nilai sensor yang diubah alamat i2cnya kurang perisisi yang diharapkan. terima kasih

wasalamuallaikum wr.wb

Putri

Saya mau nanya, saya ingin menampilkan tulisan pada lcd karakter 16×2, sintak sudah benar semua tanpa error tapi kenapa tulisan tidak mau tampil di lcd ya?

Sophyan

Mas, saya lg ngwrjakan tugas, running text dan jam digital, dengan menggunakan Dmd p7.62 64×16 yang ternyata Pin data nya lain dengan P10 32×16, saya kesulitan koneksinya dengam arduino Uno rev3. Apakah untuk library nya bisa pakai DMD2.h? Mohon penjelasan dan infonya.

Dika

Mas kalo twi.h no such file or directoryitu kenapa ya mas? Cara benerin nya gimana? Thanks

Maulana wahyudi

Terimakasih mas ilmunya, saya ingin bertanya mas. Saya berusaha menggunakan master dan slave, dimana slave juga terdapat display 16×2 dengan modul I2C juga. Saat percobaan saya coba dan ternyata bisa jadi 1 I2Cnya, tetapi selang beberapa waktu kenapa kok hilang sendiri ya mas tulisannya di liquid crystal 16×2 ( jadi blank) . mohob pencerahannya mas terimakasih

Rizal Imam Abdul Aziz

assalamualaikum gan mau tanya ada yang pernah pake sensor flow FS6122 ? terus kalo ada bagaimana yah cara pakai fitur I2C nya ?? sebelumnya terimakasih

Lanang

izin bertanya min. saya menggunakan sensor yang pinoutnya hanya vcc, grd, scl dan sda. nah ketika di uji dengan arduino jalan normal. namun ketika pakai ESP8266 data tidak masuk. setelah liat di programnya, tidak ada program yang mendeklarasikan pin sda dan scl ke pin brapa. apa harus menandai pin sda dan scl? kalo harus , apakah ada cara untuk menandai pin sda dan sclnya?

24
0
Would love your thoughts, please comment.x
()
x