1. Komponen[KEMBALI]
Prinsip Kerja:
A. Master
#include <Wire.h>
#define MASTER_ADDR 9
//0-127 alamat 12c
int analogPin = A0;
int val = 0;//dari mapping
void setup() {
Wire.begin();//siap mengirimkan data
}
void loop() {
delay(50);
val = map(analogRead(analogPin), 0, 1023, 255, 1);//pembacaan potensiometer, prubahan poten, proses adc
//0-123adc
//1-255pwm
Wire.beginTransmission(MASTER_ADDR);//memulai transmisi
Wire.write(val);//dituliaskan sesuai dg value y didapatkan
Wire.endTransmission();//berhenti
}
B. 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);
}
void receiveEvent() {
rd = Wire.read();
}
void loop() {
delay(50);
br = map(rd, 1, 255, 100, 2000);
if (br >= 0*2000 && br <= 0.2*2000){
delay(100);
digitalWrite(LED, HIGH);
delay(100);
digitalWrite(LED, LOW);
}else{
delay(100);
digitalWrite(LED, LOW);
}
}
1. Jelaskan bagaimana cara menghubungkan rangkaian I2C dengan
slave lebih dari satu, dan jelaskan bagaimana komunikasi antara master dan
slavenya.
Jawaban :
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.
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.
File Rangkaian klik disini
Video Simulasi Rangkaian klik disini
Listing Program Master
Listing Program Slave
Flowchart
Library Arduino UNO
Datasheet Arduino UNO
HTML klik disini
Tidak ada komentar:
Posting Komentar