Laporan Akhir 2 Modul 3



Percobaan 1

  1. Komponen [kembali]
    1. Arduino UNO
    2. LED
    3. Button
    4. Resistor

  2. Rangkaian Simulasi [kembali]
    Prinsip Kerja

    Rangkaian dirangkai untuk komunikasi SPI, output dari rangkaian terletak pada pin 2 pada SLAVE. Saat button ditekan, karena button diset PULLUP, maka akan masuk input ke Arduino berlogika LOW. Data akan dikirimkan dari MASTER ke SLAVE melalui pin MOSI dan diterima pada SLAVE pada pin MOSI juga. Saat data yang terbaca pada SLAVE berlogika LOW pin yang terhubung ke LED akan berlogika HIGH sehingga LED akan menyala

  3. Flowchart [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_DIV16); //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);
      }
      }

  5. Video Rangkaian [kembali]


  6. Kondisi [kembali]
    Jalankan rangkaian pada modul

    Analisa
    1. Bagaimana jika set baud rate yang di master dan di slave di change?
      Baud rate merupakan seberapa cepat data yang dikirimkan melalui komunikasi serial. Untuk menjalankan rangkaian harus digunakan baud rate yang sama. Semakin besar nilai baud rate yang digunakan maka data yang dikirimkan akan semakin cepat
    2. Jelaskan apakah percobaan berupa simplex, half duplex, atau full duplex
      Dari percobaan yang dilakukan, komunikasi antar Arduino terjadi secara full-duplex, karena pada pin MISO dan MOSI hidup atau berlogika HIGH disaat yang bersamaan, yang berarti MASTER mengirimkan data melalui MOSI dan SLAVE juga mengirimkan data melalui MISO sehingga terjadi komunikasi secara full-duplex.
    3. SPI_CLOCK_DIV8. Kenapa 8? Bagaimana jika diganti dengan DIV6?
      SPI_CLOCK_DIV berfungsi untuk konfigurasi clock data pada parameter SPI. DIV8 yang berarti kecepatan Arduino mengirimkan data SPI sebesar 8 Mhz. Pembagi clock pada Arduino yang dapat digunakan adalah DIV2, DIV4, DIV8, DIV16, DIV32, DIV64 atau DIV128. Sehingga jika diganti dengan DIV6 maka program tidak akan berjalan.

  7. Link Download [kembali]
    Klik disini << HTML
    Klik disini << Rangkaian Simulasi + Listing Program
    Klik disini << Video Simulasi
    Klik disini << Datasheet

Tidak ada komentar:

Posting Komentar