LAPORAN AKHIR 2


[KEMBALI KE MENU SEBELUMNYA]




1. Kondisi [Kembali]
Percobaan 2 Kondisi 10
Ganti LED menjadi Buzzer




Push Button


BUZZER


 

Arduino

Resistor
 

 Power Supply


3.Rangkaian Simulasi  [Kembali] 




a. Flowchart Listing Program Master

b. Flowchart Listing Program Slave


5. Listing Program  [Kembali] 

a. Listing Program Master
//MASTER

#include <SPI.h> //Deklarasi library SPI
#define button 2

char data = "1";
void setup (void) {
  pinMode(button, INPUT_PULLUP);
  Serial.begin(115200); //untuk memulai serial dengan Set baud rate 115200 untuk USART dan SPI
  digitalWrite(SS, HIGH); // disable Slave Select
  SPI.begin (); // untuk memulai komunikasi SPI
  SPI.setClockDivider(SPI_CLOCK_DIV8); //divide the clock by 8
}

void loop (void) {
  char c; // menginisialisasikan variabel C dengan tipe data char
  int nilai = digitalRead(button);
  if (nilai == 0) {
    digitalWrite(SS, LOW); // enable Slave Select untuk menghidupkan dari slave dibuat low karena si slave akan hidup ketika diberi input low karena dari master berlogika HIGH supaya arus mengalir
    // send test string
    for (const char * p = "1" ; c = *p; p++)
    {
      SPI.transfer (c);
      Serial.print(c); // sebagai penghubung serial monitornya
    }
    SPI.transfer("1");
    digitalWrite(SS, HIGH); // disable Slave Select menggunakan HIGH dikarenkan HIGH bertemu HIGH akan mati
    delay(2000);
  }
}

b. Listing Program Slave
//SLAVE

#include <SPI.h> //Deklarasi library SPI
#define buzzer 2

char buff [50]; // untuk menginisialisasikan variabel buff pada spi.h tinggal tambahkan library
volatile byte indx;// tidak ada koma
volatile boolean process;//  tidak ada koma dan boolean merupakan tipe data yang akan memilih

void setup (void) {
  Serial.begin (115200);// serial begin antara master dan slave harus sama
  pinMode(buzzer, 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;// Ketika dia masuk maka dia akan mati
  SPI.attachInterrupt(); // turn on interrupt
}

ISR (SPI_STC_vect) // SPI interrupt routine // fungsi yg digunakan Ketika program sudah berjalan
{ // fungsi yg digunakan Ketika program sudah berjalan
  byte c = SPDR; // read byte from SPI Data Register from slave
  if (indx < sizeof buff) {
    buff [indx++] = c; // save data in the next index in the array buff
    if (c == '1') //check for the end of the word
      process = true;
  }
  if (c == '1') { //check for the end of the word
    process = true;
  }
}

void loop (void) {
  if (process) {
    digitalWrite(buzzer, 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(buzzer, LOW);
  }
}

1. Jelaskan transmisi data pada SPI dan gambarkan timing diagram dari transmisi data pada SPI

Jawab:

            Komunikasi SPI memiliki 4 jalur yaitu MOSI, MISO, SCK, dan SS. Karena SPI memiliki jalur komunikasi MISO dan MOSI, maka komunikasi SPI dapat melakukan komunikasi jenis full dupelex yaitu slave dapat mengirimkan data ke master bersamaan saat master mengirimkan data ke slave. Untuk timing diagram transmisi data SPI dapat dilihat pada gambar dibawah.

 



2. Bagaimana cara menghubungkan rangkaian SPI saat menggunakan lebih dari satu slave

Jawab:

            Rangkainan SPI dengan lebih dari satu slave dihubungkan secara parallel antara kabel master dengan slave, lalu jalur SS (slave select ) digunkan untuk memilih slave yang akan digunakan oleh master. Untuk lebih jelas dapat dilihat pada gambar dibawah.

 

 



Download Rangkaian simulasi
Download Video simulasi
Download HTML
Download Listing Program Master
Download Listing Program Slave

Tidak ada komentar:

Posting Komentar