MODUL 3
LAPORAN AKHIR 2
Inter Integrated Circuit (I2C).
|
a. Arduino beserta kabel USB dan aplikasi Arduino IDE
Gambar 1. Arduino dan kabel USB |
b. Breadboard
Gambar 2. Breadboard |
c. Jumper Wire
Gambar 3. Jumper Wire |
e. Potensiometer
Gambar 5. Potensiometer |
Rangkaian pada percobaan 3 terdiri dari 2 Arduino UNO (Master dan Slave), LED, resistor, potensiometer, breadboard, dan jumper wire.
- Untuk komunikasi I2C, pin SDA dan pin SCL Master dihubungkan dengan pin SDa dan pin SCL Slave yaitu pin A4 dan A5, kemudian pin Ground Master dihubungkan ke pin Ground Slave.
- Pada Arduino Master, pin A0 dihubungkan ke output potensiometer sebagai input, dan pin VCC dihubungkan ke VCC potensiometer.
- Pada Arduino Slave, pin 13 dihubungkan ke LED sebagai output.
- Resistor dipasang seri dengan LED sebagai pengaman.
- Kabel USB dihubungkan ke laptop.
Kemudian kita program Arduino melalui aplikasi Arduino UNO:
Gambar 8. Listing Program Master |
- // MASTER
- #include <Wire.h> menunjukkan penambahan library Wire.h untuk komunikasi I2C.
- #define MASTER_ADDR 12 menunjukkan 12 adalah address Master.
- int analogPin = 0; menunjukkan pendeklarasian pin 0 untuk analogPin.
- int val = 0; menunjukkan pendeklarasian variabel val (tipe data integer) dengan nilai 0.
- void setup (){ menunjukkan kode di dalam fungsi ini dieksekusi sekali:
- Wire.begin; menunjukkan komunikasi I2C dimulai.
- Serial.begin(9600);} menunjukkan kecepatan data dan penerimaan data pada port serial sebesar 9600 bit per second (bps).
- void loop (){ menunjukkan kode di dalam fungsi ini dieksekusi berulang:
- delay (50); menunjukkan jeda waktu 50 ms setelah kode dieksekusi.- val = map(analogRead(analogPin), 0, 1023, 400, 1); menunjukkan rentang nilai variabel val, yaitu nilai potensiometer, rentang bit analog (0-1023), dan rentang nilai yang dikirim (400-1).- Wire.beginTransmission(Master_ADDR); menunjukkan transmisi dimulai dengan address dari Master.- Wire.write(val); menunjukkan penulisan data variabel val yang akan dikirim.- Wire.endTransmission(); menunjukkan transmisi diakhiri.
- Serial.println(val);} menunjukkan perintah print variabel val pada serial monitor.
Pada program Master, transmisi dimulai dengan address dari Master, dan data yang dikirim adalah variabel val yang berisi rentang nilai.
Gambar 9. Listing Program Slave |
- // SLAVE
- #include <Wire.h> menunjukkan penambahan library Wire.h untuk komunikasi I2C.
- #define SLAVE_ADDR = 12 menunjukkan 12 adalah address Slave.
- int LED =13; menunjukkan pendeklarasian pin 13 untuk LED.
- int rd; menunjukkan pendeklarasian variabel rd dengan tipe data integer.
- int br; menunjukkan pendeklarasian variabel br dengan tipe data integer.
- void setup(){ menunjukkan kode dalam fungsi ini dieksekusi sekali:
- pinMode (LED, OUTPUT); menunjukkan led sebagai output.- Wire.begin(SLAVE_ADDR); menunjukkan komunikasi I2C dimulai dengan Address Slave.- Wire.onReceive(receiveEvent); menunjukkan pada Slave memulai menerima data dari receiveEvent.- Serial.begin(9600); menunjukkan kecepatan data dan penerimaan data pada port serial sebesar 9600 bit per second (bps).- Serial.println("I2C Slave Demo");} menunjukkan perintah print text pada serial monitor.
- void receiveEvent(){ menunjukkan kode dalam fungsi ini sebagai fungsi penerima:
- rd=Wire.read(); menunjukkan variabel rd merupakan nilai yang terbaca dari komunikasi I2C.- Serial.println(rd);} menunjukkan perintah print variabel rd pada serial monitor.
- void loop(){ menunjukkan kode dalam fungsi ini dieksekusi berulang:
- delay(50); menunjukkan jeda waktu 50 ms setelah dieksekusi.- br = map(rd, 1, 255, 100, 2000); menunjukkan variabel br adalah rentang nilai dari rd, rentang bit tegangan (1-255), dan rentang waktu (100-2000).- Serial.println(br); menunjukkan perintah print variabel br pada serial monitor.- digiralWrite(LED, HIGH); menunjukkan LED hidup.- delay(br); menunjukkan jeda waktu br ms setelah dieksekusi.- digiralWrite(LED, LOW); menunjukkan LED mati.
- delay(br);} menunjukkan jeda waktu br ms setelah dieksekusi.
Pada program Slave, akan menerima data dari Master dengan Address yang sama. Kemudian pada receiveEvent terdapat variabel rd yang merupakan pembacaan nilai data komunikasi I2C. Variabel br merupakan rentang nilai yang berisi waktu LED hidup dan mati. Nilai potensiometer yang dikirim dari Master akan menentukan lama waktu LED untuk hidup dan mati.
a. Analisa apa yang akan terjadi jika Master mengirim
data Angka lebih dari 255 ke Slave?
Jawab:
Pada percobaan 3 (I2C), apabila Master mengirim data
angka lebih dari 255 ke Slave, maka pada Slave akan menerima data angka
1-255-144. Pada Slave rentang nilainya menjadi acak, dimana pada kondisi awal
nya 1, kemudian di tengah merupakan nilai puncaknya, dan di akhir merupakan
setengah nilainya. Karena pada program Master angka yang dikirim dimulai dari
400 ke 1, sedangkan kecepatan pada Slave dimulai dari 100 hingga 2000, maka semakin
besar potensiometer, kecepatan LED hidup dan mati semakin cepat, begitu pula
sebaliknya. Sehingga untuk potensiometer 50%, kecepatan LED hidup dan mati lama
(2000 ms), untuk potensiometer 0% kecepatan LED hidup dan mati cepat (sekitar
1000 ms) dan untuk potensiometer 100% kecepatan LED hidup dan mati sangat cepat
(100 ms).
b. Analisa apa yang akan terjadi jika pin SCL atau pin
SDA diputus?
Jawab:
I2C adalah standar komunikasi serial dua arah
menggunakan dua saluran yang didisain khusus untuk mengirim maupun menerima data.
Sistem I2C terdiri dari saluran SCL (Serial Clock) dan SDA (Serial
Data) yang membawa informasi data antara I2C dengan pengontrolnya. Sehingga
apabila pin SCL atau pin SDA diputus maka informasi
data tidak dapat dikerim ataupun diterima. Pada percobaan 3 dapat dilihat
ketika potensiometer diatur tidak berpengaruh terhadap LED, karena nilai
potensiometer tidak terkirim dan pada Slave tidak menerima data.
No comments:
Post a Comment