Cool Blue Outer Glow Pointer

Laporan Akhir II - Percobaan 2






1. Komponen [Daftar]

a. Arduino
 

 
b. LED 
  
 
 
c. Button

 
 
 
 
 
2. Gambar Rangkaian  [Daftar]
 

Rangkaian Sesuai Modul
 
 
 

Rangkaian Sederhana 


3. Flowchart [Daftar]
 

 
 
4. Listing program [Daftar]
 
a. Master
//MASTER
#include <SPI.h> //Deklarasi library SPI
#define button 2 // Deklarasi pin 2 untuk Button

void setup (void) {
pinMode(button, INPUT_PULLUP); // Deklarasi button sebagai input dalam kondisi pull-up
Serial.begin(115200); //set baud rate to 115200 for usart
digitalWrite(SS, HIGH); // disable Slave Select
SPI.begin (); //memulai komunikasi SPI
SPI.setClockDivider(SPI_CLOCK_DIV8);//divide the clock by 8
}

void loop (void) {
char c; // deklarasi variable c
int nilai = digitalRead(button); // Deklarasi variable nilai dan hasil pembacaan kondisi
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); // Data dari master dikirimkan
Serial.print(c);  // Mencetak data
}
digitalWrite(SS, HIGH); // disable Slave Select
delay(2000);
}
}

 
b. Slave
//SLAVE

#include <SPI.h> //Deklarasi library SPI
#define led 7// Deklarasi pin 2 untuk LED

char buff [50]; // Deklarasi variable buff dengan array 50
volatile byte indx; //Deklarasi variable indx
volatile boolean process; //Deklarasi variable process

void setup (void) {
  Serial.begin (115200); // set baud rate 115200
  pinMode(led, OUTPUT); // have to send on master in so it set as output
  SPCR |= _BV(SPE); // turn on SPI in slave mode Control data dari master
  indx = 0; // atur nilai variable menjadi = 0
  process = false; // memasukkan false ke dalam variable process
  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) { //kondisi saat nilaiindx < dari jumlah array 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; //Memasukkan nilai true pada variable process
}
}

void loop (void) {
  if (process) {
  digitalWrite(led, HIGH); // LED menyala
  process = false; //memberikan nilai false pada variable process / reset variable process
  Serial.println (buff); //print the array on serial monitor
  indx= 0; //reset button to zero
  delay(1000);
  }
  else
  {
    digitalWrite(led, LOW);
  }
}

 
5. Video simulasi   [Daftar]






Prinsip Kerja:
Pada rangkaian sesuai modul, Master mengirim data sesuai input yang diberikan oleh push button pull-up, yang artiya jika ditekan makan button berlogika LOW (0) dan jika tidak ditekan maka akan berlogika HIGH (1). Sebelum mengirim data SS (Slave Select) harus berlogika HIGH (1) Maka bertindak sebagai Pengirim, sedangkan jika SS berlogika LOW (0), maka bertindak sebagai Penerima.  Lalu data akan menuju arduino Master yang nantinya akan dikirimkan ke slave. Pin yang digunakan adalah MOSI, Master Output Slave Input, artinya Master sebagai pengirim dan Slave sebagai penerima data. Lalu ada sintaks SPCR (SPI Control Register) untuk mengontrol data dari Master Device . Slave yang sebagai penerima akan mengontrol data dari Master ke Slave pada register. Lalu ada SPDR (SPI Data Register) merupakan register data dari SPI untuk membaca atau mengirim data yang sebenarnya.Setelah maka data diterima yang dikirimkan oleh Master ke Slave. Maka output dari Slave adalah LED yang akan menyala dengan delay 1000 ms atau 1 s.


6. Kondisi dan Analisa [Daftar]

1. Apa pengaruh perbedaan dari baud ratenya dari 9600 menjadi 115200 pada master dan slave

Jawab:

Baud rate berfungsi sebagai seberapa cepat data yang akan dikirimkan. Pengaruh baud rate pada percobaan, jika semakin besar nilai baud rate maka semakin cepat data yang akan dikirimkan. Nilai baud rate yang umum digunakan yaitu sebesar 9600. Pada percobaan, nilai baudrate pada arduino Slave dan Master diganti menjadi 115200 sehingga data yang dikirimkan dengan kecepatan 115200 dengan satuan bit per secon (bps). Tetapi pada kenyataannya jika diubah nilai baud rate hanya pada salah satu arduino misalnya Slave saja menjadi 115200 sedangkan baud rate pada Master tetap 9600, maka data tidak dapat di terima pada Slave sehingga LED mati. Dan berlaku juga sebaliknya nilai baud rate Master 115200 sedangkan baud rate pada Slave tetap 9600 LED tetap mati. Maka Nilai konfigurasi baud rate pada Master dan Slave harus sama agar data dapat diterima pada Slave. Untuk kondisi ini dapat diatur nilai konfigurasi baud rate pada Master dan Slave bisa bernilai sama 115200 atau 9600 sehingga data dapat dikirm dan diterima. Pada percobaan, jika nilai baud ratenya sama maka LED akan menyala.

 

2. Jelaskan apakah percobaan berupa simplex, half duplex, atau full duplex

Jawab:

Pada rangkaian SPI melakukan perintah pengiriman data dengan cara Full-Duplex. Sehingga Master dapat mengirim data dan juga dapat menerima data secara bersamaan.

-Jika dari Master yang mengirim data maka dan Slave menerima data. Maka pin MOSI akan aktif pada arduino Master dan Slave.

Analisa Program

Pada program fungsi void setup digitalWrite(SS, HIGH); yang berarti pin SS  berlogika 1 sebagai pengirim data atau sebagai Master , maka sebelumnya slave harus dalam kondisi high atau mematikan pin SS lalu pada fungsi void loop digitalWrite(SS, LOW); yang berarti pin SS mati atau menerima data sebagai slave maka berlogika 0.

Pada program Slave, SPCR |= _BV(SPE). SPCR yang artinya SPI Control Register merupakan register dari Master Device, digunakan untuk membaca keadaan/ data. Dan dalam keadaan mode slave. Sintaks byte c = SPDR untuk membaca dan mengirim data pada register SPI. Swdangkan

-Sedangkan pada saat Slave yang mengirim data sedangkan Master menerima data. Maka pin MISO yang aktif pada arduino dan slave.

 

3.  SPI_CLOCK_DIV8. Kenapa 8? Bagaimana jika diganti dengan 1?

Jawab:

Pada sintaks SPI_CLOCK_DIV berfungsi untuk konfigurasi clock data pada parameter SPI. Dengan kata lain, sintaks SPI_CLOCK_DIV berfungsi sebagai waktu pengiriman data pada SPI. Pada modul digunakan 8 yang artinya kecepatan mengirim data SPI sebsesar 8 Mhz. Kecepaatan clock pada SPI yang bisa adalah 2, 4, 8, 16, 32, 64 atau 128. Sehingga jika diganti dengan 1 maka program akan error.



7. Link Download   [Daftar]

Tidak ada komentar:

Posting Komentar