Praktikum up&uc_Modul 3_SPI

Percobaan II

Komunikasi SPI

1. Prosedur[Kembali]

  • Rangkailah seperti rangkaian berikut
  • Buka Arduino IDE dan masukan listing Program
  • Upload program ke arduino
  • Variasikan kombinasi bit dipswitch dan perhatikan outputnya.

2. Hardware dan Diagram Blok [Kembali]


Diagram Blok:



Gambar 2. Rangkaian Simulasi.

Prinsip Kerja:

    Jalan kerja rangkaian ini ialah dimana dipswitch berfungsi sebagai input di master arduino dan output berupa seven segment di slave arduino, master arduino berfungsi sebagai inputan di pin keberapa yang berlogika 1 apabila ada di pin 9 maka master arduino akan mengirimkan data 9 ke slave arduino. setelah di terimanya data 9 oleh slave arduino maka akan di tampilkan pada seven segment.

4. Flowchart dan Listing Program [Kembali]

Flowchart:
Master arduino:
Flowchart Master Arduino


Slave arduino:
Flowchart Slave Arduino

Listing Program:

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

5. Video Demo [Kembali]

6. Kondisi [Kembali]

    Ketika tidak terdapat dipswitch on maka angka yang ditampilkan ialah 1 ketika terdapat yang nyala akan disesuaikan dengan pada pin berapa yang menyala atau berlogika 1, jika pada pin 2 maka akan menampilkan angka 2. dan lain-lainnya

᭒ HTML↠ klik disini
᭒ Simulasi ↠ klik disini
᭒ Gambar Hardware ↠ klik disini
᭒ Gambar Simulasi ↠ klik disini
᭒ Video Demo ↠ klik disini
᭒ Video Simulasi ↠ klik disini
᭒ Listring Program ↠ klik disini



Komentar

Postingan Populer