Laporan Akhir Modul 3 Percobaan 2

<



 1. Komponen [KEMBALI]

Alat


Arduino


Power Supply
Bahan
Push Button




BUZZER 
Motor DC
 

Resistor
 

Potensiometer

 




  • 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(1000);
  }


  • 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);
  }











 Pada rangkaian di atas di pakai 2 arduino. salah satu arduino bertindak sebagai master dan yang satunya bertindak sebagai slave. input yang berupa push button di masukkan pada pin 2 pada arduino master dan output berupa buzzer dihubungkan ke pin 2 arduino slave. arduino master dan arduino slave dihubungkan dengan pin 10 sampai 13 secara komunikasi SPI. Saat rangkaian dijalankan push button ditekan dan mengeluarkan output "0" sehingga pada arduino master diberikan perintah untuk menghidupkan slave select pada arduino master dan melakukan SPI transfer selanjutnya diolah pada arduino slave yang jika process nya true maka buzzer akan menyala tetapi karena di tambahkan resistor 1k ohm maka tegangan untuk menyalakan buzzer tidak cukup sehingga buzzernya mati.


 1. Jelaskan transmisi data pada SPI dan gambarkan timing diagram dari transmisi data pada SPI
jawab :
SPI beroperasi berdasarkan shift register baik master device maupun slave device, keduanya akan mempunyai 8 bit shift register. Namun tergantung dari berbagai macam arsitektur mikrokontroler, ada yang bisa memiliki 10 bit ataupun 12 bit shift register.

Untuk memulai komunikasi, bus master melakukan konfigurasi clock, dengan catatan frekuensi atau kecepatan transfer data antara SPI master device dan slave device harus sama, biasanya bisa mencapai beberapa MHz. Master akan memilih perangkat slave dengan mengeluarkan logika 0, lalu master akan menunggu proses yang telah dijadwalkan di master itu sendiri seperti uratan intrupsi timer, konversi analog ke digital (ADC), dll. Lalu setelah periode itu selesai master akan mengeluarkan clock yang pertAnda akan dimulainya proses komunikasi Serial.
Timing diagram 


2. Bagaimana cara menghubungkan rangkaian SPi saat menggunakan lebih dari satu slave 
Pada Multiple Slave, Pin SS lah yang akan berfungsi untuk memilih slave mana yang akan menerima dan mengirim data. Pins SS ini mempunyai konfigurasi active low, yang berarti kita harus memberikan pulsa 0 untuk memilih slave yang akan kita ajak bertukar data. SPI bus interface dengan beberapa slave device akan dijelaskan dalam diagram di bawah ini:




Rangkaian simulasi disini
Video simulasi disini
Flowchart disini
Listing Program master disini 
                           slave disini
HTML disini

Tidak ada komentar:

Posting Komentar