LA 2 M3

 



Percobaan 2

 Komunikasi SPI Menggunakan Arduino 


1. Foto Hardware dan Diagram Blok [Kembali]

        1. Arduino Uno






        2. DIP SWITCH


      3. SEVEN SEGMENT







4. Kabel Jumper

5. Papan Breadboard



Diagram Blok:


2. Prosedur Percobaan  [Kembali]

Rangkai semua komponen 
+ buat program di aplikasi arduino IDE
+ setelah selesai masukkan program ke arduino 
+ jalankan program pada simulasi dan cobakan dengan modul






Prinsip Kerja

Pada percobaan 2 ini, digunakan komunikasi SPI antara dua Arduino, yaitu Arduino Master dan Arduino Slave. Arduino Master terhubung dengan delapan sakelar DIP sebagai input. Ketika sakelar diposisikan, Arduino Master membaca nilai digital dari setiap sakelar dan mengirimkan nomor pin yang sesuai melalui komunikasi SPI ke Arduino Slave. Arduino Slave menerima data dari Arduino Master melalui komunikasi SPI. Data yang diterima digunakan untuk menentukan pola yang akan ditampilkan pada display seven-segment yang terhubung dengan delapan pin output. Program Arduino Slave menggunakan matriks dua dimensi untuk menyimpan pola-pola biner yang merepresentasikan angka 0 hingga 9. Berdasarkan data yang diterima dari Master, program Slave akan mengambil pola biner yang sesuai dari matriks dan menyalakan pin-pin output yang terhubung dengan display seven-segment, sehingga angka yang sesuai akan ditampilkan.


4. Flowchart dan Listing Program [Kembali]

  • Flowchart





  • Listing Program:
Master
//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
#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]);
 }
 }
}


5. Kondisi [Kembali]

    Percobaan 2 pada Modul 3 Comunication SPI pada Arduino


Download File HTML klik disini

Download Video Percobaan klik disini

Download File Program Master klik disini

Download File Program Slave klik disini

Download File Datasheet Arduino klik disini

Download Datasheet Dipswitch klik disini

Download Datasheet seven segment  klik disini


    










Komentar

Postingan populer dari blog ini