LA 2 Modul 3

 

PERCOBAAN 2 SPI




1. Komponen [Kembali]

1. Arduino


Arduino adalah kit elektronik atau papan rangkaian elektronik open source yang di dalamnya terdapat komponen utama yaitu sebuah chip mikrokontroler dengan jenis AVR dari perusahaan Atmel. Arduino yang kita gunakan dalam praktikum ini adalah Arduino Uno yang menggunakan chip AVR ATmega 328P. Dalam memprogram Arduino, kita bisa menggunakan komunikasi serial agar Arduino dapat berhubungan dengan komputer ataupun perangkat lain. 


2. LED





Light Emitting Diode atau sering disingkat dengan LED adalah komponen elektronika yang dapat memancarkan cahaya monokromatik ketika diberikan tegangan maju. LED merupakan keluarga Dioda yang terbuat dari bahan semikonduktor. Warna-warna Cahaya yang dipancarkan oleh LED tergantung pada jenis bahan semikonduktor yang dipergunakannya. LED juga dapat memancarkan sinar inframerah yang tidak tampak oleh mata seperti yang sering kita jumpai pada Remote Control TV ataupun Remote Control perangkat elektronik lainnya.

3. Push Button

Saklar tekan yang berfungsi sebagai pemutus atau penyambung arus listrik dari sumber arus ke beban listrik. Suatu sistem saklar tekan push button terdiri dari saklar tekan start, stop reset dan saklar tekan untuk emergency. Push button memiliki kontak NC (normally close) dan NO (normally open). Prinsip kerja Push Button adalah apabila dalam keadaan normal tidak ditekan maka kontak tidak berubah, apabila ditekan maka kontak NC akan berfungsi sebagai stop (memberhentikan) dan kontak NO akan berfungsi sebagai start (menjalankan) biasanya digunakan pada sistem pengontrolan motor – motor induksi untuk menjalankan mematikan motor pada industri – industri.

2. Rangkaian Simulasi [Kembali]


3. Flowchart [Kembali]

MASTER

SLAVE


4. Listing Program [Kembali]

//MASTER

#include<SPI.h>                             //Library for SPI 
#define LED 7           
#define ipbutton 2
int buttonvalue;
int x;
void setup ()

{
  Serial.begin(115200);                   //Starts Serial Communication at Baud Rate 115200 
  
  pinMode(ipbutton,INPUT);                //Sets pin 2 as input 
  pinMode(LED,OUTPUT);                    //Sets pin 7 as Output
  
  SPI.begin();                            //Begins the SPI commnuication
  SPI.setClockDivider(SPI_CLOCK_DIV16);    //Sets clock for SPI communication at 8 (16/8=2Mhz)
  digitalWrite(SS,HIGH);                  // Setting SlaveSelect as HIGH (So master doesnt connnect with slave)
}

void loop()
{
  byte Mastersend,Mastereceive;          

  buttonvalue = digitalRead(ipbutton);   //Reads the status of the pin 2

  if(buttonvalue == HIGH)                //Logic for Setting x value (To be sent to slave) depending upon input from pin 2
  {
    x = 1;
  }
  else
  {
    x = 0;
  }
  
  digitalWrite(SS, LOW);                  //Starts communication with Slave connected to master
  
  Mastersend = x;                            
  Mastereceive=SPI.transfer(Mastersend); //Send the mastersend value to slave also receives value from slave
  
  if(Mastereceive == 1)                   //Logic for setting the LED output depending upon value received from slave
  {
    digitalWrite(LED,HIGH);
    delay(500);
    digitalWrite(LED,LOW);
          //Sets pin 7 HIGH
    Serial.println("Master LED ON");
  }
  else
  {
   digitalWrite(LED,LOW);               //Sets pin 7 LOW
   Serial.println("Master LED OFF");
  }
  delay(250);
}

// SLAVE PROGRAM


#include<SPI.h>
#define LEDpin 7
#define buttonpin 2
volatile boolean received;
volatile byte Slavereceived,Slavesend;
int buttonvalue;
int x;
void setup()

{
  Serial.begin(115200);
  
  pinMode(buttonpin,INPUT);               // Setting pin 2 as INPUT
  pinMode(LEDpin,OUTPUT);                 // Setting pin 7 as OUTPUT
  pinMode(MISO,OUTPUT);                   //Sets MISO as OUTPUT (Have to Send data to Master IN 

  SPCR |= _BV(SPE);                       //Turn on SPI in Slave Mode
  received = false;

  SPI.attachInterrupt();                  //Interuupt ON is set for SPI commnucation
  
}

ISR (SPI_STC_vect)                        //Inerrrput routine function 
{
  Slavereceived = SPDR;         // Value received from master if store in variable slavereceived
  received = true;                        //Sets received as True 
}

void loop()
{ if(received)                            //Logic to SET LED ON OR OFF depending upon the value recerived from master
   {
      if (Slavereceived==1) 
      {
        digitalWrite(LEDpin,HIGH);
        delay(500);    
        digitalWrite(LEDpin, LOW);//Sets pin 7 as HIGH LED ON
        Serial.println("Slave LED ON");
      }else
      {
        digitalWrite(LEDpin,LOW);          //Sets pin 7 as LOW LED OFF
        Serial.println("Slave LED OFF");
      }
      
      buttonvalue = digitalRead(buttonpin);  // Reads the status of the pin 2
      
      if (buttonvalue == HIGH)               //Logic to set the value of x to send to master
      {
        x=1;
        
      }else
      {
        x=0;
      }
      
  Slavesend=x;                             
  SPDR = Slavesend;                           //Sends the x value to master via SPDR 
  delay(250);
}
}

5. Video [Kembali]


Prinsip kerja:
Ketika button di tekan (ON),maka rangkaian akan terhubung,sehingga akan menjadi input pada master.Sinyal clock di alirkan dari master menuju slave melalui pin SCK (pin 13) yang memiliki fungsi untuk sinkronisasi. Untuk pin SS (pin 10) berguna untuk memilih slave mana yang akan di kirim data. Kemudian karna inputnya master dan outputnya slave,maka untuk komunikasi disini kita mengunakan pin MOSI (Master Input Serial Output) . Setelah data terbaca di slave ,maka akan diteruskan menuju pin 2 pada slave sebagai output sehingga LED akan ON. Sedangkan jika button tidak di tekan (OFF) maka LED pada slave nantinya akan OFF.

6. Kondisi [Kembali]

Kondisinya sama dengan modul

Analisa:
1. Bagaimana jika set baud rate yang di master dan di slave di change?
Jawab:
Set baud rate yang digunakan  pada master dan slave adalah 115200. Ketika baud rate master diubah menjadi 9600 maka rangkaian tetap berjalan seperti sebelumnya. Begitu juga saat baud rate slave diubah menjadi 9600, rangkaian tetap berjalan seperti biasa.  Hal ini dikarenakan pada percobaan merupakan komunikasi full duplex yang bisa bertukar informasi secara bersamaan,  sehingga tidak terjadi penumpukan data yang menyebabkan error atau noise.

2. Jelaskan apakah percobaan berupa simplex, half duplex, atau full duplex (analisa dari program, apakah dari master/slave, lalu pin apa yang aktif)
Jawab:
Percobaan ini merupakan komunikasi full duplex, dimana Full duplex adalah jenis komunikasi serial yang menyatakan hubungan antara dua perangkat keras (Master dan Slave). Jika Master sedang melakukan pengiriman data maka pada saat yang sama master dapat menerima data dari slave, begitu juga sebaliknya saat slave sedang melakukan pengiriman data maka pada saat yang sama slave dapat menerima data dari master . Hal ini dapat terlihat pada pin MOSI dan MISO yang dihubungkan,

3. SPI_CLOCK_DIV8. Kenapa 8? (coba ganti dg  angka 12)
Jawab:
SPI_CLOCK_DIV8 berarti membagi clock pada komunikasi menjadi 16/8 yaitu 2 Mhz. Digunakan div 8 karena pembagi yang tersedia pada papan AVR adalah 2,4,8,16,32,64, dan 128. Saat diganti menjadi 12 maka rangkaian tidak jalan karena pembagi 12 tidak tersedia pada papan AVR.

7. Link Download [Kembali]

Datasheet arduino uno    download
Datasheet LED                download
Datasheet push button     download
File rangkaian                  download
Listing program               download
File video                         download
File html                           download

Tidak ada komentar:

Posting Komentar