Menu

  • Home
  • Elektronika
  • Sensor
  • Praktikum ESD
  • Praktikum Up & Uc
    • Modul 1
    • Modul 2
    • Modul 3
    • Modul 4

      Laporan Akhir 1 (SPI)




      1. Komponen 

      a. Arduino Uno


      Gambar 1. Arduino Uno

      b. Button


      Gambar 2. Button


      c. LED

      Gambar 3. LED

      d. Ground
      Gambar 4. Ground


      [kembali]

      2. Rangkaian Simulasi 
      a. Rangkaian sebelum dijalankan
        


      Gambar 5. Rangkaian sebelum dijalankan

      b. Rangkaian setelah dijalankan


      Gambar 6. Rangkaian setelah dijalankan
      [kembali]

      3. Flowchart 


      Gambar 7. Flowchart Master



      Gambar 8. Flowchart Slave

      [kembali]

      4. Listing Program

      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(100);

        }

        else

        {

          digitalWrite(led, LOW);

        }

      }


      [kembali]

      5. Video 




      Jika pada rangkaian komunikasi SPI menggunakan 2 slave, bagaimana cara master untuk menentukan berkomunikasi dengan slavaenya, apakah berkominikasi dengan slave 1 atau 2, jelaskan secara rangkaian dan program!

      Jawab :

      SPI merupakan komunikasi serial pada 2 hardware antara mikroprosesor dan mikroprosesor ataupun antara mikroprosesor dan device lainnya. Pada SPI dapat menambahkan mikroprosesor lainnya dengan menggunakan slave select. Ketika master berlogika 1, maka agar dapat mentransfer data ke slave, slave 1 diberi logika 0 dan slave 1 diberi logika 1, karena pada komunikasi SPI hanya dapat mentransfer data satu persatu.

      Dapat dilihat pada rangkaian dengan menggunakan 2 slave, cara master untuk berkomunikasi dengan slave tersebut yaitu dengan  memilih slave dengan menggunakan slave select, dimana pada rangkaian ini program pada master berlogika 1 akan mentransferkan data ke slave, maka slave 1 pada program berlogika 0, untuk slave lainnya slave 2 diberi berlogika  1. Slave select pada slave 2 akan dihubungkan secara paralel pada jalur yang menghubungkan master dan slave 1. 

       

      Gambar 1. Rangkaian sebelum dijalankan

      Gambar 2. Rangkaian setelah dijalankan

      Pada rangkaian tersebut terdapat pebedaan pada program slavenya yaitu : pada slave 1 diberi logika LOW dan LOW sedangkan pada slave 2 diberi logika HIGH dan LOW.

      ·         Slave 1

      void loop (void) {

        if (process) {

          digitalWrite(led, LOW);

          process = false; //reset the process

          Serial.println (buff); //print the array on serial monitor

          indx = 0; //reset button to zero

          delay(100);

        }

        else

        {

          digitalWrite(led, LOW);

      }

      ·         Slave 2

      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(100);

        }

        else

        {

          digitalWrite(led, LOW);

        }


      [kembali]

      7. Link Download

      Download Rangkaian Simulasi  [ DOWNLOAD ]
      Download Video Praktikum [ DOWNLOAD ]
      Download Program Arduino Master [ DOWNLOAD ]
      Download Program Arduino Slave [ DOWNLOAD ]
      Download HTML [ DOWNLOAD ]

      [kembali]









      Tidak ada komentar:

      Posting Komentar