1. Komponen [Kembali]
//MASTER #include #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 #include #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); } |
Percobaan 3
1.
Apakah kita bisa mengirimkan data sebanyak 9 bit?
Jelaskan
Tidak bisa karena
pada kumunikasi I2C ini pada pengiriman datanya dapat dilihat seperti ini :
Maka dapat dilihat
pada pengiriman data pada I2C pada bit kesembilan itu digunakan sebagai ACK adalah
status acknowladge (logik 0) yang harus keluar untuk bisa menerima data
selanjutnya. Semua perintah atau step bit demi bit mengikuti hentakan
signal clock, hingga SDA menerima signal Not acknowladge (logik 1) dari slave device yang berarti
mengakhiri transfer data / stop.
2.
Apa pengaruh potensio terhadap Output atau LED?
Pengaruh potensio pada rangkian ini terhadap output adalah intensitas dari hidup matinya led atau kedipan led. Semakin besar hambatan potensiometer maka semakin besar delay pada perintah kedipan led pada akhir listing program slave sehingga lampu akan lama hidup dan akan lama juga mati atau led akan berkedip sangat pelan. Sebaliknya apabila potensio memiliki hambatan rendah maka delay nya kecil pada perintah kedipan led sehingga led akan hidup sebentar dan mati sebentar atau led berkedip dengan cepat.
3.
Jelaskan prinsip kerja I2C pada rangkaian
Rangkaian dimulai
dari sumber 5V dari master ke potensio dan arus masuk ke pin 0A sebagai input
dan diolah oleh master etelahnya dikirim ke slave dan diproses atau dieksekusi
dan dikeluarkan output. Untuk lebih jels kita lihat dari listing programnya.
a)
Master
//MASTER
#include <Wire.h>
#define SLAVE_ADDR 9
int val = 0;
void setup() {
}
· Pertama pada listing program ini adalah deklarasi library wire karena pada komunikasi I2C kita menggunakan library wire dan deklarasi variabel SLAVE_ADDR 9 untuk mempermudah memilih pada slave. Selanjutnya pemberian nilai awal pada analogpin int (analogPin = 0) dan variabel val (int val = 0). Pada fungsi void setup saya memasukan perintah memulai I2C dengan perintah Wire.begin(),
void loop() {
delay(50);
val = map(analogRead(analogPin),
0, 1023, 255, 1);
Wire.beginTransmission(SLAVE_ADDR);
Wire.write(val);
Wire.endTransmission();
}
· Pada listing program selanjutnya adalah fungsi void loop yang berisikan perintah delay 50 ms selanjutnya rumus mencari nilai val dengan pemetaan nilai yang dibaca pada analogpin yang didapat dari potensiometer dan diamsukan ke rumus. Sehingga pemetaan tersebut dimasukan ke variabel val. Selanjutnya Wire.beginTransmission(SLAVE_ADDR) untuk memulai pengiriman data ke salve dan selanjutnya Wire.write(val) untuk penyetaan dari nilai val dan selanjutnya Wire.endTransmission() untuk menghentikan pengiriman data.
b)
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");
}
· Pada
program slave ini kita menggunakan library wire dan variabel SLAVE_ADDR 9 agar
sama dengan master. Deklarasikan Pin 13 masuk ke variabel LED dan inisialisasi
variabel rd dan br. Untuk void setup nya saya memberi perintah adalah pin LED
saya berikan perintah sebagai output. Wire.begin(SLAVE_ADDR) digunakan untuk
memulai dari komunikasi I2C. Wire.onReceive(receiveEvent) perintah ini
digunakan untuk menerima data dengan variabel receiverEvent. Selanjutnya
memberi kecepatan mengirim data 9600 dan mencetak kata "I2C Slave
demo" pada layar
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
listing program selanjutnya adalah fungsi void untuk mendapatkan atau menerima
data yang dikirimkan. Isi void tersebut adalah dengan memasukan nilai yang
terbaca pada Wire.read() atau yang dikirimkan ke slave ke variabel rd dan
kemudian nilai rd tersebut dicetak dengan perintah Serial.println(rd).listing
selanjutnya adalah fungsi loop dijalankan yang berisikan delay 50 ms dan
selanjutnya mencari nilai dari br yang didapatkan dari sintak br = map(rd, 1, 255, 100, 2000) yang
merupakan pemetaan dari nilai rd yang diterima dari master tadi. Selanjutnya
pin LED diberi logika high sehingga LED hidup dan selanjutnya diberi delay
sebesar “br” ms sehingga lampu hidup selama delay yang dimasukan sebesar “br”
ms setelahnya dijalankan perintah pi LED diberi logika low sehingga lampu mati
dan diberi delay “br” ms. Maka lama lampu mati selama “br” ms kemudian barulah
loop diulang.
· Jadi
kesimpulannya semakin besar potensio maka semakin besar delay dan kedipan LED
semakin pelan. Sebaliknya jika potensio kecil maka delay dihasilkan juga kecil
sehingga kedipan LED semakin cepat.
Tidak ada komentar:
Posting Komentar