Hell Yeah Pointer 5

MODUL 3

TUGAS PENDAHULUAN 2




Ubah button menjadi saklar SPDT.

Gambar 1. Rangkaian Simulasi


Rangkaian pada percobaan 2 terdiri dari 2 Arduino UNO (Master dan Slave), 2 resistor 220 Ω, 2 resistor 10 k, 2 LED-Blue, dan 2 SW-SPDT. 
Gambar 2. Arduino and Pin Configuration
Pin 13 (SCLK), 12 (MISO), 11 (MOSI), dan 10 (SS) Master Arduino dihubungkan ke pin yang sama pada Slave Arduino. Pin 2 Arduino (Master dan Slave) berfungsi sebagai input yang dihubungkan ke SPDT, dan pin 7 Arduino (Master dan Slave) berfungsi sebagai output yang dihubungkan ke LED.
Gambar 3. Resistor
Resistor dihubungkan diantara pin Arduino dan pin anoda LED sebagai pengaman (menghambat atau membatasi aliran listrik yang mengalir dalam rangkaian).
Gambar 4. LED and Pin Configuration
Pin anoda dihubungkan ke sisi positif (pin Arduino) dan pin cathode dihubungkan ke sisi negatif (ground). Maka untuk menghidupkan LED pada program diberi kondisi HIGH (1), sedangkan untuk mematikan LED diberi kondisi LOW (0).
Gambar 5. SPDT and Pin Configuration
SW-SPDT digunakan sebagai pengganti push button pada rangkaian percobaan ini. Pin COM dihubungkan ke pin 2 pada Arduino, pin A dihubungkan ke VCC, dan pin B dihubungkan ke GND.

Kemudian Arduino akan diprogram sesuai kondisi di aplikasi Arduino IDE:
Gambar 6. Listing Program Master
  • // MASTER
  • #include <SPI.h> menambahkan library SPI untuk menggunakan fungsi komunikasi SPI.
  • #define LED 7 menunjukkan pendeklarasian pin 7 untuk LED.
  • #define ipspdt 2 menunjukkan pendeklarasian pin 2 untuk ipspdt.
  • int spdtvalue; menunjukkan pendeklarasian variabel spdtvalue dengan tipe data integer.
  • int x; menunjukkan pendeklarasian variabel x dengan tipe data integer.
  • void setup (void){ menunjukkan kode dalam fungsi ini hanya dibaca satu kali: 
- Serial.begin(115200); menunjukkan komunikasi serial dimulai dengan kecepatan Baud 115200 bit per second (bps).
- pinMode(ipspdt, INPUT); menunjukkan SPDT sebagai input.
- pinMode(LED, OUTPUT); menunjukkan LED sebagai output.
- SPI.begin(); menunjukkan komunikasi SPI dimulai.
- SPI.setClockDivider(SPI_CLOCK_DIV8); menunjukkan pengaturan Clockdivider untuk komunikasi SPI. Di sini digunakan div8, sehingga 16MHz:8 menjadi 2MHz.
- digitalWrite(SS, HIGH);} menunjukkan SS berlogika 1, sehingga tidak memulai transfer apa pun ke arduino Slave.
  • void loop (void){ menunjukkan semua kode dalam fungsi ini akan dibaca berulang: 
- byte Mastersend, Mastereceive; menunjukkan pendeklarasian variabel Mastersend dan Mastereceive dengan tipe data byte. 
- spdtvalue=digitalRead(ipspdt); menunjukkan variabel spdtvalue didapatkan dengan membaca status pin tombol tekan yang terhubung ke pin2 (Master Arduino) untuk mengirimkan nilai tersebut ke Arduino Slave. 
- if(spdtvalue==HIGH) menunjukkan jika spdtvalue yang terbaca HIGH, maka kode di dalam if akan dieksekusi, yaitu x=1; 
- else menunjukkan jika spdtvalue yang terbaca selain HIGH, maka kode di dalam else akan dieksekusi, yaitu x=0;
digitalWrite(SS, LOW); menunjukkan SS berlogika 0, maka transfer dimulai ke slave dari master.
- Mastersend=x; menunjukkan variabel Mastersend adalah variabel x.
- Mastereceive=SPI.transfer(Mastersend); menunjukkan nilai spdtvalue akan dikirim yang disimpan dalam variabel Mastersend ke arduino slave dan juga menerima nilai dari slave yang akan disimpan dalam variabel Mastereceive.
- if(Mastereceive==1){ menunjukkan jika variabel Mastereceive 1, maka kode di dalam if akan dieksekusi:
digitalWrite(LED, HIGH); menunjukkan LED akan hidup.
Serial.println("Master LED ON");} menunjukkan perintah print text.
- else{ menunjukkan jika variabel Mastereceive tidak 1, maka kode di dalam else akan dieksekusi:
digitalWrite(LED, LOW); menunjukkan LED akan mati.
Serial.println("Master LED OFF");} menunjukkan perintah print text.
- delay(100);} menunjukkan jeda waktu 100 ms setelah dieksekusi.

Pada program Master, untuk mengirim data ke Slave maka Slave Select harus LOW. Jika SPDT dihubungkan ke pin A (VCC), maka SPDT HIGH (x=1), kemudian x akan dikirim ke Slave. Master juga menerima data dari Slave, yaitu ketika SPDT slave dihubungkan ke pin A (VCC) maka SPDT HIGH (x=1). Karena x=1 maka LED akan hidup dan pada serial monitor muncul Master LED ON, begitu pula sebaliknya jika x tidak 1.

Gambar 7. Listing Program Slave
  • // SLAVE
  • #include <SPI.h> menambahkan library SPI untuk menggunakan fungsi komunikasi SPI.
  • #define LEDpin 7 menunjukkan pendeklarasian pin 7 untuk LEDpin.
  • #define spdtpin 2 menunjukkan pendeklarasian pin 2 untuk spdtpin.
  • volatile boolean received; menunjukkan pendeklarasian variabel received dengan tipe data volatile boolean.
  • volatile byte Slavereceived, Slavesend; menunjukkan pendeklarasian variabel Slavereceived dan Slavesend dengan tipe data volatile byte.
  • int spdtvalue; menunjukkan pendeklarasian variabel spdtvalue dengan tipe data integer.
  • int x; menunjukkan pendeklarasian variabel x dengan tipe data integer.
  • void setup (void){ menunjukkan kode dalam fungsi ini hanya dibaca satu kali: 
- Serial.begin(115200); menunjukkan komunikasi serial dimulai dengan kecepatan Baud 115200 bit per second (bps).
- pinMode(spdtpin, INPUT); menunjukkan SPDT sebagai input.
- pinMode(LEDpin, OUTPUT); menunjukkan LED sebagai output.
pinMode(MISO, OUTPUT); menunjukkan MISO sebagai output, data dikrim melalui MISO dari Slave. 
- SPCR |= _BV(SPE); menunjukkan pengaktifan SPI pada Mode Slave dengan menggunakan SPI Control Register.
- received = false; menunjukkan received diset false.
- SPI.attachInterrupt();} menunjukkan Interrupt disetting ON untuk komunikasi SPI, jika data diterima dari master maka Interrupt Routine dipanggil dan nilai yang diterima diambil dari SPDR (SPI data Register).
  • ISR(SPI_STC_vect){ menujukkan fungsi interrupt routine
- Slavereceived = SPDR; menunjukkan nilai yang diterima dari master (SPDR) akan disimpan di variabel Slavereceived.
- received = true;} menunjukkan received diset true.
  • void loop (void){ menunjukkan semua kode dalam fungsi ini akan dibaca berulang: 
- if(received){ menunjukkan kondisi jika received 
- if(Slavereceived==1){ menunjukkan kondisi jika Slavereceived 1 maka kode di dalam if dieksekusi. 
digitalWrite(LED, HIGH); menunjukkan LED akan hidup.
Serial.println("Slave LED ON");} menunjukkan perintah print text. 
- else{ menunjukkan kondisi jika Slavereceived tidak 1 maka kode di dalam else dieksekusi. 
digitalWrite(LED, HIGH); menunjukkan LED akan hidup. 
Serial.println("Slave LED ON");} menunjukkan perintah print text. 
- spdtvalue = digitalRead(spdtpin); menunjukkan nilai spdtvalue didapatkan dari pembacaan status spdtpin.
- if(spdtvalue==HIGH) menunjukkan kondisi jika nilai spdtvalue HIGH, maka kode di dalam if akan dieksekusi, yaitu x=1; 
- else menunjukkan jika spdtvalue yang terbaca selain HIGH, maka kode di dalam else akan dieksekusi, yaitu x=0; 
- Slavesend=x; menunjukkan variabel Slavesend adalah variabel x. 
- SPDR=Slavesend; menunjukkan variabel SPDR adalah Slavesend.
- delay(100);}} menunjukkan jeda waktu 100 ms setelah dieksekusi.
 
Pada program Slave, diset MISO sehingga Slave dapat juga mengirim data ke Master. Kemudian terdaoat fungsi Interrpt Routine yang berisi data yang diterima Slave akan disimpan di variabel SPDR atau SPI Data Register. Selanjutnya jika data yang diterima berlogika 1, maka LED Slave akan hidup dan di Serial Monitor muncul LED Slave ON, begitupula sebaliknya jika data yang diterima tidak 1. Slave akan mengirim data ke Master, yaitu jika SPDT dihubungkan ke pin A (VCC), maka SPDT HIGH (x=1), jika dihubungkan ke B (GND), maka SPDT LOW (x=0).

  • Arduino: P2 Master.ino 📩 || P2 Slave.ino 📩
  • Datasheet: Arduino.pdf 📩 || Resistor.pdf 📩 || LED.pdf 📩 || SPDT.pdf 📩 
  • Html: TP M3.html 📩 
  • Library: Arduino.zip 📩
  • Proteus: Percobaan 2.pdsprj 📩
  • Video: Percobaan 2.mp4 📩


No comments:

Post a Comment