Laporan Akhir (percobaan 2) modul 3








komponen yang digunakan:
1.simulino uno

Gambar 1.simulino uno

2.LED RED





Gambar 2.LED RED
3.button






Gambar 3.button





hardware:


Gambar 4.LED



Gambar 5.button





2. Rangkaian Simulasi [kembali]




Gambar 6.rangkaian simulasi








Gambar 8.flowchart




//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

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








6. Analisa [kembali]

PERCOBAAN 2 [SPI[:

1.Bisakah pada SPI menggunakan lebih dari 1 master? Jelaskan beserta alasannya

 Jawab:

Tidak bisa ,karena pada SPI hanya memiliki pin SS (slave select) yang berfungsi untuk memilih slave mana yang akan dikirimkan data oleh master.Jadi pada SPI hanya bisa 1 master dan banyak slave .Master dapat memilih slave yang mana yang akan di pakai .Pada SPI merupakan komunikasi serial  synchronous dimana sinyal clock dialirkan dari master ke slave untuk sinkronisasi.

2. Jelaskan pengaruh input pullup dan pulldown pada rangkaian !

Jawab:

Pengaruh input pullup yaitu hubungan antara pin I/O dan tegangan suplai,dengan sakelar terbuka yang dihubungkan antar I/O dan ground ,menjaga masukkan tetap tinggi sedangkan pulldown hubungan antar pin I/O dan ground ,dengan sakelar terbuka yang terhubung antara I/O dan +supply,menjaga masukan tetap rendah.Pull up dan Pulldown bekerja dengan konsep yang sama,keduanya adalah untuk mencegah terjadinya floating(kondisi mengambang).jadi pada rangkaian pull up berarti penambahan resistor ke sinyal high sedangkan pull down berarti penambahan resistor ke sinyal low.

 

3. Jelaskan prinsip kerja SPI pada rangkaian

Jawab:

Pada rangkaian terdapat dua simulino uno yaitu master dan slave ,button dan led red.Pin 10 master terhubung ke 10 slave,pin 11 master terhubung ke 11 slave ,pin 12 master terhubung ke 12 slave dan pin 13 master terhubung ke 13 slave.Pada pin 2 master terhubung ke button lalu terhubung ke ground yang mana menjadi inputnya.Pada pin 2 slave terhubung ke led red laluke ground yang akan menampilkan outputnya. Pada program Arduino master  pertama dideklarasikan library SPI ,setelah itu dideklarasikan button pada pin 2 ,lalu dibuat void setup dimana semua kode didalam fungsi ini hanya di baca satu kali.Setelah itu di set baud rate 115200,lalu dibuat digitalWrite(SS, HIGH), setelah itu dimatikan slave select SPI.begin (),setelah itu pembagi clock dengan 8.Setelah itu,dibuat fungsi void loop dimana semua kode yang berada dalam fungsi ini dibaca berulang.setelah itu dibuat char c  ,int nilai=digitalRead(button) ,jika  if(nilai==0) lalu digunakan enable select digitalWrite(SS, LOW),lalu dikirim test string maka dibuat for (const char * p = "Hello, world!\r" ; c = *p; p++) setelah itu dibuat  SPI.transfer , Serial.print(c) lalu dibuat disable slave select, digitalWrite(SS, HIGH) dan terdapat delay 2000.

Pada program slave,pertama dibuat library SPI dan dideklarasikan led sebagai output pada pin 2,lalu dibuat char buff [50],volatile byte indx ,volatile boolean process.setelah void setup () yang man dibaca sekali ,setelah itu di set baud rate 115200.lalu pinMode(led, OUTPUT) yaitu menjadikan led sebagai output.selanjutnya menghidupkan SPI pada mode slave  ,lalu diberi indeks =0 setalah itu jika proses false maka dibuat SPI.attachInterrupt() .lalu dibuat ISR (SPI_STC_vect), setelah itu dibaca byte berupa variabel c dari data register SPI. Lalu dibuat   if (indx < sizeof buff), buff [indx++] = c, if (c == '\r') lalu proses benar. Selanjutnya dibuat fungsi void loop dimana fungsi ini dapat dibaca secara berulang.Jika   if (process)  maka digitalWrite(led, HIGH),lalu proses false maka direset proses lalu dibuat Serial.println (buff)  dan indx = 0 .tearkhir ada delay 1000.dan selain kondisi itu else maka  digitalWrite(led, LOW) LED mati.

Pada rangkaian input diberikan oleh button saat ditekan dan tidak ditekan,lalu sinyal clock dialirkan dari master ke slave yang berfungsi untuk singkronisasi.master dapat memilih slave mana yang akan dikirimkan data melalui slave select,kemudian data dikirimkan dari master ke slave melalui MOSI .Jika master butuh respon data maka slave akan mentransfer data ke master melalui MISO.jika button ditekan maka data akan ditransmisikan melalui MOSI dan perlu disinkronisasikan ,sehingga led menyala walau agak ada delay dan apabila dibiarkan ditekan maka led mati lalu hidup kembali .jika button tidak ditekan maka akan ditransmisikan sesuai prinsip diatas sehingga led mati.

7. Link Download [kembali]

Download video simulasi disini
Download rangkaian simulasi disini
Download HTML disini
Download program arduino master disini
Download program arduino slave disini



Tidak ada komentar:

Posting Komentar