M3 Percobaan 2
1. Prosedur
[Kembali]1. Rangkai rangkaian pada alat sesuai dengan modul.
2. Tulis program untuk arduino di software Arduino IDE.
3. Compile program tadi, lalu upload ke dalam arduino.
4. Setelah program selesai di upload, jalankan rangkaian.
2. Tulis program untuk arduino di software Arduino IDE.
3. Compile program tadi, lalu upload ke dalam arduino.
4. Setelah program selesai di upload, jalankan rangkaian.
2. Hardware dan Diagram Blok
[Kembali]
3. Rangkaian Simulasi dan Prinsip Kerja
[Kembali]
Rangkaian Simulasi :
Prinsip Kerja :
Rangkaian ini menggabungkan dua perangkat Arduino yang saling berkomunikasi melalui antarmuka Serial Peripheral Interface (SPI), yang memungkinkan pertukaran data cepat antara perangkat-perangkat tersebut. Perangkat Master bertindak sebagai pengontrol utama, sementara perangkat Slave bertugas menampilkan informasi berdasarkan instruksi yang diterima dari Master.
Pada sisi Master, rangkaian dibangun dengan input berupa serangkaian sakelar yang terhubung langsung ke pin digital Arduino. Saat program dijalankan, Master membaca status dari setiap sakelar menggunakan fungsi digitalRead(), dan kemudian menyampaikan informasi tersebut melalui antarmuka SPI ke perangkat Slave. Input dari sakelar memungkinkan pengguna untuk mengontrol tindakan yang ingin dilakukan oleh sistem. Misalnya, sakelar dapat digunakan untuk memilih mode operasi, mengatur parameter, atau mengendalikan fungsi-fungsi tertentu dalam sistem.
Di sisi Slave, perangkat ini memiliki output berupa display tujuh segmen yang mampu menampilkan digit angka. Setiap segmen dari display ini dikendalikan melalui pin digital Arduino yang sesuai. Ketika perangkat Slave menerima data dari Master melalui antarmuka SPI, prosesnya dimulai dengan menginterpretasikan nilai yang diterima. Nilai ini kemudian diubah menjadi representasi angka yang sesuai dengan digit yang akan ditampilkan pada display tujuh segmen. Output dari Slave, yaitu tampilan digit pada display, memberikan pengguna informasi visual yang relevan berdasarkan instruksi yang diterima dari Master.
Selain itu, proses komunikasi antara Master dan Slave didukung oleh mekanisme interrupt. Ini memungkinkan perangkat Slave untuk secara efisien menanggapi pesan yang diterima dari Master tanpa harus terus-menerus memeriksa status komunikasi. Dengan demikian, rangkaian ini tidak hanya menyediakan kontrol digital yang efisien, tetapi juga memastikan respons yang cepat dan akurat dari perangkat Slave terhadap perintah yang diberikan oleh Master. Dengan kombinasi input dari sakelar dan output pada display tujuh segmen, rangkaian ini memberikan penggunaan yang fleksibel dan beragam, dari aplikasi sederhana hingga yang lebih kompleks.
4. Flowchart dan Listing Program
[Kembali]
Flowchart :
//Master Arduino
#include<SPI.h> //Library for SPI
int dip[] = {2,3,4,5,6,7,8,9};
int dipvalue[] = {};
void setup (){
Serial.begin(9600); //Starts Serial Communication at Baud Rate 115200
for(int i = 0; i < 8; i++){
pinMode(dip[i], INPUT_PULLUP);
}
SPI.begin(); //Begins the SPI commnuication
SPI.setClockDivider(SPI_CLOCK_DIV8); //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(void){
byte Mastersend;
int x = 1;
for(int i = 0; i < 8; i++){
dipvalue[i] = digitalRead(dip[i]);
if(dipvalue[i] == LOW){
x = dip[i];
}
}
digitalWrite(SS, LOW); //Starts communication with Slave connected to master
Mastersend = x;
Serial.println(Mastersend);
SPI.transfer(Mastersend); //Send the mastersend value to slave also receives value from slave
delay(1000);
}
//Slave
//Slave Arduino:
#include<SPI.h>
const int segmentPins[] = {9, 8, 7, 6, 5, 4, 3, 2};
volatile boolean received = false;
volatile byte Slavereceived;
int index;
void setup(){
Serial.begin(9600);
for (int i = 0; i < 8; i++) {
pinMode(segmentPins[i], OUTPUT);
}
SPCR |= _BV(SPE); //Turn on SPI in Slave Mode
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(){
Serial.println(Slavereceived);
if(received){//Logic to SET LED ON OR OFF depending upon the value recerived from master
displayCharacter(Slavereceived);
delay(1000);
}
}
void displayCharacter(int ch) {
byte patterns[10][7] = {
{0, 0, 0, 0, 0, 0, 1}, // 0
{1, 0, 0, 1, 1, 1, 1}, // 1
{0, 0, 1, 0, 0, 1, 0}, // 2
{0, 0, 0, 0, 1, 1, 0}, // 3
{1, 0, 0, 1, 1, 0, 0}, // 4
{0, 1, 0, 0, 1, 0, 0}, // 5
{0, 1, 0, 0, 0, 0, 0}, // 6
{0, 0, 0, 1, 1, 1, 1}, // 7
{0, 0, 0, 0, 0, 0, 0}, // 8
{0, 0, 0, 0, 1, 0, 0} // 9
};
if ((ch >= 0 && ch <= 9)) {
// Get the digit index (0-9) from the character
int index = ch;
// Write the pattern to the segment pins
for (int i = 0; i < 7; i++) {
digitalWrite(segmentPins[i], patterns[index][i]);
}
}
}
Percobaan 2 : Komunikasi SPI menggunakan Arduino
6. Video Demo [Kembali]
7. Soal Analisa
[Kembali]
1. Pada percobaan kenapa clock harus diatur di listing program?
2. Kenapa harus ada interupt pada listing percobaan?
8. Download File
[Kembali]
HTML klik disini
File Rangkaian klik disini
Video Percobaan klik disini
Video Percobaan klik disini
Listing Program klik disini
Datasheet Arduino klik disini
Datasheet Button klik disini
Datasheet Led klik disini
Datasheet Resistor klik disini
Tidak ada komentar:
Posting Komentar