Laporan Akhir Modul III Percobaan 2

 



Percobaan 2
Komunikasi SPI Menggunakan Arduino 

1. Prosedur [Kembali]

  • Rangkai semua komponen 
  • Buat program di aplikasi arduino IDE
  • Setelah selesai masukkan program ke arduino 
  • Jalankan program pada simulasi dan cobakan dengan modul
  • Lihatlah karakter yang ditampilkan pada dual 7-segment apakah sesuai dengan switch yang ditekan

1.) Dipswitch
2.) Dual 7-Segment

3.) Arduino UNO




  • Diagram Blok




  • Rangkaian Simulasi


  • Prinsip Kerja
       Pada rangkaian ini digunakan dua buahArduino Uno (Atmega328) yang masing-masing akan berperan sebagai Slave dan Masternya. Dimana Arduino yang berperan sebagai master akan terhubung dengan input berupa dipswitch sebanyak delapan buah yang nanti akan memberikan perintah/instruksi yang telah dituliskan pada program Arduino IDE, perintah tersebut nantinya akan akan tersampaikan ke Arduino yang berperan sebagai Slave yang terhubung dengan Output berupa dual 7-Segment.

       Dimana ketika semua dipwtich dalam keadaan mati/logika 0 maka pada dual 7-segmnet akan menampilkan angka 1, ketika switch pertama di on kan maka pada dual 7-segment akan menampilkan angka 2, ketika switch ke-2 di on kan maka pada dual 7-segment akan menampilkan angka 3, begitu seterusnya untuk kedelapan buah switch yang nanti akan menampilkan beragam angka sampai dengan angka sembilan secara berurutan berdasarkan switch yang diaktifkan.

     Jenis komunikasi data yang digunakan oleh Arduino pada percobaan ini adalah SPI.

  • Flowchart
(flowchart master)



(flowchart slave)


  • 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
//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]);
}
}

} 



6. Kondisi dan Analisa [Kembali]





Download Datasheet Arduino

Download Datasheet Dipswitch

Download Datasheet 7-Segment


Komentar