Komunikasi I2C (Inter-Integrated Circuit) / Two-wire (TWI)
Komunikasi I2C (Inter-Integrated Circuit) |
- Pendahuluan
Salam
Otomatisasi, Sebelum membahas lebih dalam tentang komunikasi I2C, jangan lupa
singgah ke blog saya à http://festyy.com/wNiBaj
untuk membaca materi-materi lainnya tentang mikrokontroler dan jangan
lupa subscribe serta Like
channel youtube saya di (fungky king) https://www.youtube.com/channel/UCWbN7TqlN68FxeFY7uCNhkA
untuk melihat hasil dari percobaan-percobaan dengan mikrokontroler.
Baiklah
sekarang kita akan membahas tentang “Komunikasi
I2C (Inter-Integrated Circuit) / Two-wire (TWI)”. Pembahasan kali ini kita
akan berbagi tentang pengertian apa itu I2C, mekanisme kerja dari I2C, cara mengakses
komunikasi I2C Pada Arduino dengan sedikit contoh program untuk mengetahui
alamat I2C sebuah modul yang akan dihubungkan ke Arduino.
Bus adalah sistem pengantar yang dilengkapi dengan
komponen pengendali untuk melayani pertukaran data antara komponen Hardware
satu dengan komponen Hardware lainnya. Pada sistem mikrokontroler terdapat bus
Data, bus Alamat, dan beberapa pengantar pengendali. Semakin tinggi frekuensi
clock prosesor, maka semakin lebih cermat pengembang untuk memperhatikan Timing
dari seluruh komponen yang terlibat, agar tidak terjadi kesalahan dalam
transaksi data.
Bus yang cukup sering digunakan adalah bus bersifat
paralel. Transaksi data dilakukan secara paralel sehingga transaksi data lebih
cepat. Akan tetapi disisi lain sistem ini tergolong Mahal. Jika sistem relatif
tidak membutuhkan transaksi yang cepat, maka penggunaan Serial Bus menjadi
pilihan. Salah satu pilihan sistem data bus yang sering digunakan adalah I2C (Inter Integrated Circuit). Sistem Bus
I2C sendiri pertamakali diperkenalkan oleh Firma Philips pada tahun 1979.
Agar data dapat didistribusikan oleh master dengan tepat
ke beberapa slave, menurut konsep I2C, semua jenis IC I2C diproduksi dengan
nomor group tersendiri yang diatur oleh Philips, sehingga produsen IC lain yang
memproduksi IC I2C harus mendaftarkan produknya ke Philips untuk mendapatkan
nomor group.
contohnya,
- IC
serial EEPROM memiliki no group =
1010 biner,
- IC Remote 8 bit I/O Expander memiliki no group = 0111 biner. dll
No group dimasukan ke 4 bit msb untuk mensetting device adress dan 3
bit berikutnya A0, A1 ,A2 kaki
ic yg bersangkutan. Dengan
demikian pada I2C Bus total bisa dipasang paling banyak 8 IC sejenis.
contoh : IC EEPROM 24C02 kaki A2, A1 dan A0 kita groundkan, maka device
address Ic 24C02 tsb adalah 1010 000x ,
x = 1 jika operasi baca , x=0 jika operasi tulis.
- Pembahasan
Komunikasi I2C (Inter-Integrated
Circuit) merupakan koneksi dibuat untuk menyediakan komunikasi antara
perangkat-perangkat terintegrasi, seperti sensor, RTC, dan juga EEPROM.
Komunikasi I2C bersifat synchronous namun berbeda dengan SPI karena I2C
menggunakan protocol dan hanya menggunakan dua kabel untuk komunikasi, yaitu
Sychronous clock (SCL) dan Sychronous data (SDA). Secara berurutan data dikirim
dari master ke slave kemudian (setelah komunikasi master ke slave selesai) dari
slave ke master.
Gambar 1. Konfigurasi Komunikasi I2C |
Sinyal dasar I2C meliputi sinyal START, STOP dan ACK sebagai
berikut: SCK merupakan
sinyal clock untuk ‘mendorong’ data di SDA, dalam keadaan tidak ada transfer data SDA dan SCK harus
dalam keadaan ‘1’. Data di SDA boleh
berubah hanya pada saat SCK=’0’ seperti
digambarkan dalam diagram waktu Gambar 2, isi SDA diambil
peralatan I2C pada saat SCL berubah
dari ‘1’ menjadi ‘0’. Jika
terjadi perubahan SDA pada
saat SCL = ‘1’, perubahan
itu diartikan sebagai sinyal START atau STOP.
Gambar 2. Sinyal SDA & SCL |
- Sinyal START menandakan
master akan mulai mengirim data, sinyal ini terlihat di bagian kiri
Gambar 3 berupa perubahan tegangan SDA dari ‘1’
menjadi ‘0’ pada saat SCK=’1’.
- Sinyal STOP menandakan master akan mengakhiri komunikasi data, sinyal ini terlihat di bagian kanan Gambar 3 berupa perubahan tegangan SDA dari ‘0’ menjadi ‘1’ pada saat SCK=’1’.
Gambar 3. Start & Stop Sinyal I2C |
- Sinyal ACK, merupakan sinyal balasan dari slave setelah menerima data 1 byte. Pada kondisi ini, slave “menarik” sda menjadi low selama satu sinyal clock. Sinyal ACK ini dapat dilihat pada Gambar 4, dimana pengiriman sinyal ini menandakan bahwa slave telah menerima 1 byte data.
Gambar 4. Transfer Data I2C |
Perangkat
I2C menggunkan 2
buah pin open-drain
dua arah dengan memberikan pull-up resistor untuk
setiap garis bus sehingga berlaku seperti AND menggunakan kabel. AVR dapat
menggunakan 120 jenis perangkat untuk berbagi pada bus I2C yang masing-masing
disebut sebagai node. Setiap node beroperasi sebagai master atau slave. Master
merupakan perankat yang menghasilan clock untuk sistem, menginisiasi, dan juga
memutuskan sebuah transmisi. Slave merupakan node yang menerima clock dan
dialamatkan oleh master. Baik master dan slave dapat menerima dan
mentransmisikan data
- Perancangan
Setelah diawal kita membahas lebih dalam tentang
komunikasi I2C mulai dari apa itu komunikasi I2C, proses kerjanya dan logika
kerjanya. Kali ini untuk lebih membuat semua memahami komunikasi I2C, maka
langsung saja kita contohkan dalam implementasi menggunakan sebuah modul PCF8574 yang biasa digabungkan dengan
modul LCD 16X2 maupun LCD dengan dimensi lainnya.
Gambar 05. Rangkaian LCD I2C dengan NodeMCU |
Catatan: Pastikan sambungan modul LCD I2C yang ke NodeMCU benar merupakan Port atau Pin jalur i2c yang disediakan pada NodeMCU.
Listing program ujinya sebagai berikut:
#include
<Wire.h>
#include
<LiquidCrystal_I2C.h>
// Set the LCD
address to 0x3F for a 16 chars and 2 line display
LiquidCrystal_I2C
lcd(0x3F, 16, 2);
void setup() {
lcd.begin();}
void loop()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("hello, world!");
delay(1000);
}
|
Program
pengujian diatas menggunakan library
khusus untuk dapat menggunakan module
LCD, #include
<LiquidCrystal_I2C.h> merupakan library dari LCD yang dimana
setiap akan menggunakannya library ini harus disertakan. LiquidCrystal_I2C
lcd(0x3F, 16, 2); adalah
konfigurasi hardware dimana interfacing
antara pin NodeMCU dengan pin LCD memiliki alamat 0x3F. Alamat 0x3F merupakan
alamat i2c yang digunakan oleh modul yang disambungkan ke LCD seperti pada
pembahasan jalur komunikasi i2c. Alamat I2C setiap hardware berbeda-beda, maka
lakukan proses scanning terlebih
dahulu untuk mengetahui alamat yang digunakan oleh perangkat yang akan kamu
gunakan.
Perintah lcd.clear(); ini berfungsi untuk menghapus seluruh tampilan yang ada di LCD. Baris
1 dan baris 2 yang semula terdapat tulisan akan terhapus. Perintah lcd.begin(); tersebut adalah inisialisasi ukuran
LCD 16 baris 2 kolom. lcd.print("hello, world!"); menulis ke LCD dengan karakter yang ada dalam tanda
kurung(), perhatikan bahwa ada tanda petik dua, berarti tipe datanya string.
Gambar 6. Hasil Pengujian Tampilan LCD 16x2 |
- Penutup
Demikian penjabaran singkat tentang “Komunikasi I2C (Inter-Integrated
Circuit) / Two-wire (TWI)”. Untuk selanjutnya,
buat yang ingin mempelajari Arduino dan lebih mengenal Arduino silakan follow akun sosial media saya
di facebook “fungkyking” juga diblog saya di http://festyy.com/wNiBaj dan jangan
lupa subscribe channel youtube saya juga di (fungky king) https://www.youtube.com/channel/UCWbN7TqlN68FxeFY7uCNhkA untuk
melihat tulisan-tulisan serta hasil rancangan alat-alat berbasis mikrokontroler
yang kami buat. Kami juga menerima pembuatan alat-alat elektronika baik untuk
penelitian ataupun alat untuk syarat kelulusan.
Demikian pembahasan singkat yang dapat dibahas, mohon
maaf jika terdapat kesalahan dalam penulisan yang mana semua ini semata-mata
hanya opini pribadi berdasarkan pengalaman. Jika ada kekurangan dan tambahan
dari materi pembahasan yang dibahas silahkan dapat teman-teman sertakan pada
kolom komentar tambahan materi yang ingin disampaikan, sampaikan pertanyaan dan
isi kolom komentar dengan bijak.
Terima Kasih,
Salam Otomatisasi
Afriansyah, S.T.
(Fungky King)
fungkyking01@gmail.com
Kata
Kunci / Keywords: ATMEGA, Arduino, Arduino IDE, Arduino UNO, Bahasa C,
fungkynotes.blogspot.co.id, fungky corporation, fungky king, microcontroller,
otomatis, pemprograman, programming, plc, NodeMCU, ESP8266, Internet of Things
(IoT), Wi-Fi, PWM, ADC, LED, Blink, I2C (Inter-Integrated
Circuit), Two-wire (TWI)
Referensi / Reference:
- www.arduino.ac.id
- http://festyy.com/wNiBaj
- http://destyy.com/wMatJW
- http://arduino.cc/en/Main/Software
- www.google.com
- https://www.fanselectronics.com
- https://kelasrobot.com/
- 8-bit Atmel Microcontroller
with 128Kbytes In-System Programmable Flash: ATMEGA128
- Atmel, AVR318: Dallas 1-Wire Master on tinyAVR and megaAVR
- Afriansyah. 2012. Pengukur Kadar pH Air Berbasis Mikrokontroler ATMega 8, TE-UGM, Yogyakarta.
- https://fungkynotes.blogspot.com/2019/03/menghubungkan-aplikasi-arduino-ide.html
- https://fungkynotes.blogspot.com/2019/02/instruksi-instruksi-dasar-pada.html
- https://fungkynotes.blogspot.com/2019/02/apa-itu-sketch-arduino.html
- http://arduino.cc/en/Guide/Windows
Terima Kasih sudah mampir,
ReplyDeletesemoga bermanfaat..