Official StoreTekan tombol di atas untuk membeli semua alat dan bahan eksperimen di web ini

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.

Incoming search terms:

komunikasi i2c arduino, apa itu i2c, fungsi pin SDA & SCL pada pin arduino, fungsi pin sda dan scl pada i2c lcd, fungsi wire h, fungsi library wire pada arduino, contoh program i2c arduino, fungsi wire h pada arduino, cara kerja sensor pin 12c, cara pemakaian andro 12c

Leave a Reply

19 Comments on "Komunikasi Serial Sinkron I2C/IIC/TWI dengan Arduino"

avatar
  Subscribe  
newest oldest most voted
Notify of
fendy
Guest

ajarin yang ini mas,,,

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

Fans
Guest

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

Giga
Guest

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
Guest

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

locky
Guest

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
Guest

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 ?

Putri
Guest

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
Guest

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
Guest

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

error: Content is protected !!