LA 2 M3 Prak Mikro (Komunikasi SPI)

 [Menuju akhir]




1. Kondisi [Kembali]

Percobaan 2 kondisi 14 :

Tambahkan Buzzer sebagai input. Sehingga input yang tersedia adalah LED dan Buzzer.

2. Hardware [Kembali]

  

LED
 
 
Arduino
 
 
Resistor


 
  Power Supply

 

3. Rangkaian Simulasi [Kembali]

 

4. Listing Program [Kembali]

 // 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
#define Buzzer 3

char buff [50];
volatile byte indx;
volatile boolean process;

void setup (void) {
  Serial.begin (115200); // harus sama antara master dan slave
  pinMode(led, OUTPUT); // have to send on master in so it set as output
  pinMode (Buzzer, 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);
    tone (Buzzer, 100); //membunyikan Buzzer
    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);
    noTone(Buzzer); //tidak membunyikan Buzzer
  }
}

5. Video Simulasi [Kembali]


6. Analisa [Kembali]

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

Jawab :

SPI adalah  protokol komunikasi secara synchronous yang memisahkan antara jalur data dan jalur detak, serta merupakan  komunikasi serial full-duplex, yang memungkinkan  komunikasi dua arah antara master dan slave secara simultan.

Keempat jalur yang membangun komunikasi SPI pada Arduino Uno terletak pada pin 10 (SS), 11 (MOSI), 12 (MISO) dan 13 (SCK). Transmisi data SPI dimulai pada saat master mengirimkan clock melalui SCK dengan frekuensi lebih kecil atau sama dengan frekuensi maksimum pada slave. Kemudian, master memberi logika nol pada SS untuk mengaktifkan slave sehingga pengiriman data (berupa siklus clock) siap untuk dilakukan. Pada saat siklus clock terjadi transmisi data full-duplex terjadi dengan dua keadaan sebagai berikut:

1. Master mengirim sebuah bit pada jalur MOSI,  slave membacanya pada jalur yang sama.

2. Slave mengirim sebuah bit pada jalur MISO,  master membacanya pada jalur yang sama.

Transmisi dapat menghasilkan beberapa siklus clock. Jika tidak ada data yang dikirim lagi maka master menghentikan clock tersebut dan kemudian menon-aktifkan slave.

Timing Diagram


Diagram pewaktuan (timing diagram) SPI dimulai pada saat SS diaktifkan (low). Saat SS aktif, MISO/MOSI mulai mengirimkan data. Pada saat clock berubah maka proses pengiriman data dilanjutkan pada bit yang lebih rendah. Proses tersebut berlangsung sampai pengiriman data dan siklus clock berakhir serta SS kembali dinon-aktifkan (high). Pada saat ini biasanya slave mengirimkan interrupt ke master yang mengindikasikan bahwa pengiriman data telah selesai dan siap untuk melakukan pengiriman data selanjutnya.

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

Jawab :

Keempat jalur yang membangun komunikasi SPI pada Arduino Uno terletak pada pin 10 (SS), 11 (MOSI), 12 (MISO) dan 13 (SCK). Penggunaan kabel untuk SS (Slave Select) dapat bertambah, sesuai dengan jumlah slave. Satu buah slave akan ditangani oleh satu buah SS. Jika kita menggunakan 1 master dan 2 slave, maka pada master terdapat pin 9 (SS1), pin 10 (SS2), 11 (MOSI), 12 (MISO) dan 13 (SCK). Dengan demikian, diperlukan sebanyak N + 3 pin untuk master, dimana N adalah jumlah slave yang digunakan.


 

7. Link Download [Kembali]

Download Rangkaian 

Download Video Rangkaian 

Download Listing Program

 

 [Menuju Awal]

Comments

Popular posts from this blog