Laporan Akhir Modul 3 - Percobaan 2



1. Tujuan [Daftar]
1. Merangkai percobaan 2 modul 3.
2. Menjelaskan cara kerja rangkaian percobaan 2.
3. Melakukan simulasi rangkaian percobaan 2.

Kondisi : ubah kondisi awal LED mati, lalu ketika button di tekan led hidup berkedip dengan delay 500ms

2. Alat dan Bahan [Daftar]
Alat
1. Power Supply

Bahan
1. Arduino UNO
2. Resistor
3. LED
4. Push Button

3. Rangkaian Percobaan [Daftar]
Prinsip Kerja
Pada percobaan ini dilakukan percobaan komunikasi SPI untuk melakukan komunikasi antar dua Arduino UNO. Sebuah arduino digunakan sebagai master dan yang lainnya sebagai slave. Hubungan arduino MASTER-SLAVE terhubung pada pin SCK, MISO, MOSI, dan SS masing-masing pada pin 13, 12, 11, dan 10. Pada pin 7 arduino master terhubung ke push button, push button terubung dari VCC melalui resistor dan ke ground, jika button tidak ditekan maka pin 7 akan berlogika HIGH karena arus masuk ke pin 7 sedangkan jika button ditekan maka pin 7 akan berlogika LOW karena arus dilewatkan ke ground. Pada pin 7 slave terhubung ke resistor dan LED sebagai output.

MASTER
Pertama dilakukan deklarasi library yang digunakan (SPI.h), pin-pin yang digunakan seperti pin 7 sebagai BUTTON, dan deklarasi variabel yang akan digunakan seperti buttonStatus dan buttonVal dengan tipe data integer. Selanjutnya pada fungsi void setup() dilakukan pengaturan baudrate master yaitu sebesar 115200. Selain itu dilakukan pengaturan pengaturan pin BUTTON (7) sebagai INPUT, diberikan output HIGH pada SS karena belum dilakukan pengiriman data, selanjutnya komunikasi SPI dimulai dengan SPI.begin() dan pengaturan clock pada 16/8=2 Mhz. Selanjutnya pada void loop() dilakukan pembuatan variabel masterSend dengan tipe data byte. Kemudian dilakukan pembacaan nilai inputan button dan disimpan pada variabel buttonStatus. Selanjutnya dilakukan percabangan jika nilai buttonStatus adalah HIGH maka disimpan nilai 1 pada buttonVal dan sebaliknya maka disimpan niali 0 pada buttonVal. Selanjutnya SS diberi logika LOW untuk memulai komunikasi (master terhubung ke slave) dan data pada masterSend dikirim dengan SPI.transfer(masterSend).

SLAVE
Pertama dilakukan deklarasi library yang digunakan (SPI.h), pin-pin yang digunakan seperti pin 7 sebagai LED, dan deklarasi variabel yang akan digunakan seperti slaveReceived dengan tipe data byte volatile dan received dengan tipe data bolean volatile. Selanjutnya pada fungsi void setup() dilakukan pengaturan baudrate slave yaitu sebesar 115200. Selain itu dilakukan pengaturan pengaturan pin LED (7) sebagai INPUT dan pin MISO sebagai OUTPUT. Setelah itu SPI diaktifkan dalam mode slave dan diatur interrupt pada komunikasi SPI. Selanjutnya dibuat fungsi interrupt routine yang menyimpan data yang diterima dari master ke variabel slaveReceived dan status received dibuat true. Selanjutnya pada void loop() dilakukan percabangan jika received bernilai true maka ketika nilai slaveReceived sama dengan 0 maka dioutputkan HIGH pada LED, diberi delay 500ms, diberi output LOW pada LED, dan diberi delay 500ms.


4. Listing Program [Daftar]
Listing Program Master
#include <SPI.h>
#define BUTTON 7
int buttonStatus;
int buttonVal;

void setup (){
      Serial.begin(115200);
      pinMode(BUTTON, INPUT);
      digitalWrite(SS, HIGH);
      SPI.begin();
      SPI.setClockDivider(SPI_CLOCK_DIV8);
}

void loop (){
      byte masterSend;
      buttonStatus = digitalRead(BUTTON);
      if (buttonStatus == HIGH){
            buttonVal = 1;
      }else{
            buttonVal = 0;
      }
      digitalWrite(SS, LOW);
      masterSend = buttonVal;
      SPI.transfer(masterSend);
      digitalWrite(SS, HIGH);
      delay(200);
}

Listing Program Slave
    #include <SPI.h>
    #define LED 7
    volatile byte slaveReceived;
    volatile boolean received;

    void setup (){
          Serial.begin (115200);
          pinMode(LED, OUTPUT);
          pinMode(MISO, OUTPUT);
          SPCR |= _BV(SPE);
          slaveReceived = 0;
          received = false;
          SPI.attachInterrupt();
    }

    ISR (SPI_STC_vect)
    {
          slaveReceived = SPDR;
          received = true;
    }

    void loop (){
          if(received){
                while(slaveReceived == 0){
                      digitalWrite(LED, HIGH);
                      delay(500);
                      digitalWrite(LED, LOW);
                      delay(500);
                }
          }
    }


Flowchart

5. Analisa [Daftar]
1. Apakah pin SS dapat diganti denga pin digital lainya?
Jawab:
Jika pin SS tidak terhubung maka master tidak dapat mengetahui ke slave mana data akan dikirim. Pin SS berfungsi untuk memilih slave mana yang akan aktif sehingga master dapat mengirimkan data ke slave yang tepat tanpa mengganggu slave lainnya.

2. Apa yang terjadi jika pin MISO dilepas?
Jawab:
Jika pin MISO dilepas atau tidak dihubungkan maka master tidak dapat menerima data yang ditransmisi dari slave. MISO singkatan dari Master Input Slave Output yang berarti master sebagai input yang menerima data dan slave sebagai output yang mengirim data. Tidak terjadi komunikasi data jika pin MISO dilepas.

3. Apakah pada komunikasi ini dapat megguakan multi master?
Jawab:
Komunikasi SPI dapat dilakukan menggunakan banyak master contohnya 2 master dan 1 slave. Master pertama atau master kedua tetap dapat mengirimkan data ke slave secara individu namun tidak dapat dilakukan secara bersamaan karena dapat menyebabkan bentrok data yang dikirim. Komunikasi SPI merupakan komunikasi secara serial sehingga dilakukan secara bergantian dan membutuhkan alamat dari masing-masing device yang dituju.


6. Video [Daftar]