Laporan Akhir 2 M3

PERCOBAAN 2





SPI


1. Hardware [kembali]



//MASTER

#include <SPI.h>

#define button 2
void setup() 
{
  Serial.begin(9600);
  digitalWrite(SS,HIGH);
  pinMode(button,INPUT_PULLUP);
  SPI.begin();
  SPI.setClockDivider(SPI_CLOCK_DIV8);
  
}

void loop()

{
  char c;
  int nilai = digitalRead(button);
  if (nilai == 0){
  digitalWrite(SS,LOW);
  for(const char *p= "Hello,World\r"; c = *p;p++)
  {
    SPI.transfer (c);
    Serial.print (c);
  }
  }
  else{
    
  }
  digitalWrite (SS,HIGH);
  delay(2000);

}


//SLAVE

#include <SPI.h>

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

#define led 5

void setup() {
  pinMode(led, OUTPUT);
  Serial.begin(9600);
  pinMode(MISO, OUTPUT);
  SPCR |= _BV(SPE);
  indx = 0;
  process = false;
  SPI.attachInterrupt();
}
ISR (SPI_STC_vect)
{
  byte c = SPDR;
  if (indx < sizeof buff)
  {
    buff[indx++] = c;
    if (c == '\r')
      process = true;
  }
}
void loop() {
 // digitalWrite(SS,LOW);
  if (process)
  {
    Serial.println (buff);
    indx = 0;
    digitalWrite (led, HIGH);
    delay (2000);
    digitalWrite (led, LOW);
    process = false;
  }
  else {
    Serial.println("error");
  }

}

1. Bagaimana proses pengiriman data SPI ?
Dari percobaan yang telah kita lakukan proses pengiriman data SPI dimulai dari saat master mengirimkan clock melalui SCK ke slave, dimana fungsi clock sendiri untuk mensinkronkan data antara master dan clock. Setelah itu master memilih slave mana yang akan dikirimkan data melalui slave select. Data tersebut di kirimkan melalui jalur MOSI (Master Output Slave Input) atau MISO (Master Input Slave Output). Ketika button ditekan maka LED akan menyala dan ketika tidak ada lagi data maka clock akan menghentikan slave.





Video Praktikum disini
HTML disini 

Tidak ada komentar:

Posting Komentar