Laporan Akhir Percobaan 2 M3



1. Komponen [kembali]

Gambar 1. Button (Hardware)


Gambar 2. Button
Gambar 3. LED (hardware)


Gambar 4. LED


Gambar 5. Rangkaian simulasi





MASTER

#include <SPI.h> //Deklarasi library SPI
#define button 2
void setup (void) {
  pinMode(button, INPUT_PULLUP);
  Serial.begin(115200 ); //Set baud rate 115200
  digitalWrite(SS, HIGH);
  // disable Slave Select
  SPI.begin ();
  SPI.setClockDivider(SPI_CLOCK_DIV8); //divide the clock by 8
}
void loop (void) {
  char c;
  int nilai=digitalRead(button);
  if(nilai==0){
   digitalWrite(SS, LOW); //enable Slave Select
  // send test string
  for (const char * p = "Hello, world!\r" ; c = *p; p++)
  {
    SPI.transfer (c);
    Serial.print(c);
  }
  digitalWrite(SS, HIGH); // disable Slave Select
  delay(2000);
  }
}
 
SLAVE

#include <SPI.h>
#define led 2
 
char buff [50];
volatile byte indx;
volatile boolean process;
 
void setup (void) {
  Serial.begin (115200);
  pinMode(led, OUTPUT); // have to send on master in so it set as output
  SPCR |= _BV(SPE); // turn on SPI in slave mode
  indx = 0; // buffer empty
  process = false;
  SPI.attachInterrupt(); // turn on interrupt
}
 
ISR (SPI_STC_vect) // SPI interrupt routine
{
  byte c = SPDR; // read byte from SPI Data Register
  if (indx < sizeof buff) {
    buff [indx++] = c; // save data in the next index in the array buff
    if (c == '\r') //check for the end of the word
      process = true;
  }
}
void loop (void) {
  if (process) {
    digitalWrite(led, HIGH);
    process = false; //reset the process
    Serial.println (buff); //print the array on serial monitor
    indx = 0; //reset button to zero
    delay(1000);
  }
  else
  {
    digitalWrite(led, LOW);
  }
}



ANALISA PERCOBAAN 2 [SPI]:

1. Bisakah pada SPI menggunakan lebih dari 1 master? Jelaskan beserta alasannya!

Jawab :

Untuk SPI, hanya dapat menggunakan 1 master saja. Hal tersebut dikarenakan Master pada SPI sebagai pengontrol komunikasi serial sinkron pada SPI dimana dapat mengirim atau menerima data. Namun, SPI ini dapat memiliki lebih dari 1 Slave dimana terdapat Slave Select (SS) untuk memilih (mengontrol) Slave mana yang dipilih oleh Master.

2. Jelaskan pengaruh input pullup dan pulldown pada rangkaian !

Pengaruh input pullup dan pulldown pada rangkaian tersebut ada pada button sebagai data yang akan dibaca oleh mikrokontroler Master yang kemudian akan mengirimkan paket data (bit-bit) ke Slave. Berdasarkan program Arduino yang dibuat, ketika button dalam keadaan pullup, maka button akan menerima logika LOW dari Arduino (bernilai 0) sehingga ketika terbaca oleh Master, Master akan mengirimkan paket data “1” dimana pada Slave ketika menerima data “1” berarti LED hidup (berlogika HIGH). Sedangkan ketika pulldown, button akan menerima logika HIGH (bernilai 1) sehingga ketika terbaca oleh Master selain dari nilai 0, Master akan mengirimkan data “2” dimana pada Slave ketika menerima data selain dari “1” berarti LED mati (berlogika LOW).

3. Jelaskan prinsip kerja SPI pada rangkaian!

Jawab :

Pada rangkaian terdapat 2 buah Arduino (Master dan Slave), button, LED, dan ground. Untuk menjalankan rangkaian maka dibuat program Arduino untuk Master dan Slave. Untuk Master, dideklarasikan library SPI dan button yang terhubung pada pin 2 sebagai input pullup. Baud rate disetkan sebesar 115200. Slave select (SS) dideklarasikan berlogika HIGH sehingga mematikan SS. Lalu, SPI.begin dan clock pada SPI dibagi atas 8. Perintah-perintah tersebut dieksekusi sekali (void setup (void)). Kemudian, fungsi void loop (void) yang dieksekusi berulang. Variabel c dibuat dengan tipe data char dan nilai dari button akan dibaca oeh Master. Jika nilainya 0, maka SS diaktifkan yang berarti test string dikirim. Kemudian, perulangan for (const char * p = "Hello, world!r" ; c = *p; p++), lalu data c dikirimkan. Setelah perulangan for, SS dimatikan kembali dan delay 2000 ms.

Untuk Slave, dideklarasikan library SPI, LED pada pin 2 Slave, variable buff dengan tipe data char dan arry 50, volatile byte indx, dan volatile boolean process. Pada fungsi void setup (void) terdapat set baud rate 115200, LED sebagai output, menghidupkan SPI dalam mode Slave, indx = 0, process = false berarti tidak ada proses atau dimatikan, dan menghidupkan interrupt. Pada ISR, terdapat pembacaan byte dari SPI Data Register. Jika indx < sizeof buff, maka data disimpan pada index selanjutnya pada array buff dan proses diaktifkan. Kemudian void loop (void), jika process sebelumnya true, maka LED hidup kemudian proses direset kembali. Lalu, menampilkan array pada serial monitor, button dreset ke 0, dan delay 1000 ms. Jika else, LED mati.

Setelah program Arduino untuk Master dan Slave dibuat, lalu dipasang pada Arduino pada rangkaian. Ketika rangkaian dijalankan, ketika button pullup, maka berlogika HIGH sehingga tidak ada pengiriman data, SS tetap tidak aktif, dan LED mati. Jika button pulldown (ditekan), maka berlogika LOW (bernilai 0) dan SS diaktifkan kemudian terjadi transmisi data ke Slave yang telah diprogram. Lalu, LED akan hidup kemudian mati karena proses direset dan proses akan diulang kembali atau LED hidup kembali (void loop (void)). 


Rangkaian simulasi download
Video penjelasan download
Program Arduino Master download
Program Arduino Slave download
File HTML download

No comments:

Post a Comment