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