1. Hardware
Arduino Uno
Potensio
LED
[kembali]
2. Rangkaian Simulasi
- Master
//MASTER
#include <Wire.h>
#define SLAVE_ADDR 9
int analogPin = 0;
int val = 0;
void setup() {
Wire.begin();
}
void loop() {
delay(50);
val = map(analogRead(analogPin), 0, 1023, 255, 1);
Wire.beginTransmission(SLAVE_ADDR);
Wire.write(val);
Wire.endTransmission();
}
-Slave
//SLAVE
#include <Wire.h>
#define SLAVE_ADDR 9
int LED = 13;
int rd;
int br;
void setup() {
pinMode(LED, OUTPUT);
Wire.begin(SLAVE_ADDR);
Wire.onReceive(receiveEvent);
Serial.begin(9600);
Serial.println("I2C Slave demo");
}
void receiveEvent(){
rd = Wire.read();
Serial.println(rd);
}
void loop() {
delay(50);
br = map(rd, 1, 255, 100, 2000);
digitalWrite(LED, HIGH);
delay(br);
digitalWrite(LED, LOW);
delay(br);
}
Pada komunikasi I2C menggunakan 2 kabel yaitu Serial clock (SCL) dan Serial data (SDA). Master terhubung dengan kaki output dari potensiometer melalui pin analog A0. Sedangkan slave terhubung dengan resistor dan LED melalui pin 13 . Listing program mengatur fungsi potensiometer pada rangkaian ini sebagai pengatur kecepatan hidup-matinya LED.
7. Analisa
1. Apakah kita dapat mengirim data sebanyak 9 bit? Jelaskan alasannya
Jawab :
Tidak. Banyaknya data yang dapat dikirim pada komunikasi I2C adalah 8 bit. Dalam 1 siklus pengiriman data, 1 paket data terdiri atas maksimal 32 bit dengan komponen berupa kondisi start, Address Frame, R/W bit, ACK/NACK bit, Data Frame 1, Data Frame 2, dan kondisi Stop.
Kondisi start dimana saat pada SDA beralih dari logika high ke low sebelum SCL. Sedangkan kondisi stop dimana saat pada SDA beralih dari logika low ke high sebelum SCL. R/W bit berfungsi untuk menentukan apakah master mengirim data ke slave atau meminta data dari slave. (logika 0 berarti mengirim data ke slave, logika 1 berarti meminta data dari slave). ACK/NACK bit berfungsi sebagai pemberi kabar jika data frame ataupun address frame telah diterima receiver.
2. Bagaimana cara master mengirimkan address ke slave? Berapa bit address yang dikirim? Berapa address unik yang dapat tercipta oleh master?
Jawab :
Master mengirimkan address ke slave dimulai dengan membangkitkan pulsa start oleh master. Pulsa start dibaca oleh slave pada bus SDA dalam keadaan LOW pada saat pulsa clock dalam keadaan HIGH. Setelah pulsa start dikirimkan, maka pada clock berikutnya master mengirimkan 8 bit alamat, yang dikirimkan secara serial melalui bus SDA, ke slave dengan format A6, A5, A4, A3, A2, A1, A0, dan R/W. Bit alamat tersebut mengandung informasi R/W pada LSB. Jika LSB pada byte alamat berlogika 1 maka master ingin membaca data dari slave tetapi jika LSB byte alamat berlogika 0 maka master akan menulis pada slave. Alamat 0 dipergunakan untuk General Call. Bila alamat dan perintah, Read atau Write, yang dikirimkan oleh master dapat diterima oleh slave maka slave akan membangkitkan pulsa LOW (ACK), pada bus SDA, jika perintah tersebut dapat dijalankan dan pulsa HIGH (NACK) jika perintah tersebut gagal.
Setelah Master menerima pulsa LOW (ACK), Data dikirimkan dari alamat Slave tersebut. Bila data telah berhasil dikirim maka slave memberikan pulsa LOW (ACK) pada bus SDA tetapi jika terjadi kegagalan maka slave akan memberikan pulsa HIGH (NACK). Pulsa Stop, pulsa yang naik dari LOW ke HIGH pada saat pulsa clock dalam keadaan HIGH, akan dikrimkan oleh Master untuk menghentikan komunikasi.
[kembali]
8. Link download
Rangkaian klik di sini
Video simulasi klik di sini
Flowchart klik di sini
listing program klik di sini (master) klik di sini (slave)
HTML klik di sini
[kembali]
Tidak ada komentar:
Posting Komentar