Our Story.
Share anything about our laboratorium

Mikro 2023 Modul 3 Percobaan 2

Percobaan II

Komunikasi SPI

1. Foto Hardware dan Diagram Blok [Kembali]

2. Prosedur Percobaan  [Kembali]

  • Rangkailah seperti rangkaian berikut
  • Buka Arduino IDE dan masukan listing Program
  • Upload program ke arduino
  • Mencoba rangkaiannya dengan memvariasikan input pada dipswitch.

Gambar 1. 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:

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 9600
  for(int i = 0; i < 8; i++){
    pinMode(dip[i], INPUT);
  }
  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 sebagai 1 maka slave tidak terkoneksi
}

void loop(void){
  byte Mastersend;
  int x = 1;          
  for(int i = 0; i < 8; i++){
    dipvalue[i] = digitalRead(dip[i]);
    if(dipvalue[i] == HIGH){
      x = dip[i];
    }
  }
  digitalWrite(SS, LOW);                  //Memulai komunikasi dengan slave terkoneksi dengan master
  Mastersend = x;                          
  SPI.transfer(Mastersend); //Mengirim data yang diterima di master di berikan ke 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(){
  if(received){//Logic to SET LED ON OR OFF depending upon the value recerived from master 
  displayCharacter(Slavereceived);
  delay(1000);
  }
}

void displayCharacter(int ch) { // Setting nilai bit untuk menampilkan ke seven segment
  byte patterns[][9] = {
    {0, 0, 0, 0, 0, 0, 1, 1}, // 0
    {1, 0, 0, 1, 1, 1, 1, 1}, // 1
    {0, 0, 1, 0, 0, 1, 0, 1}, // 2
    {0, 0, 0, 0, 1, 1, 0, 1}, // 3
    {1, 0, 0, 1, 1, 0, 0, 1}, // 4
    {0, 1, 0, 0, 1, 0, 0, 1}, // 5
    {0, 1, 0, 0, 0, 0, 0, 1}, // 6
    {0, 0, 0, 1, 1, 1, 1, 1}, // 7
    {0, 0, 0, 0, 0, 0, 0, 1}, // 8
    {0, 0, 0, 0, 1, 0, 0, 1}, // 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++) {
    }
  }
}

5. 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
᭒ Aplikasi↠ klik disini
Gambar Rangkaian↠ klik disini
Video Percobaan↠ klik disini
᭒ Datasheet 74LS249 (Decoder BCD to Seven Segment) ↠ klik disini



labor eldi labor eldi Author

About



Welcome to the website of Industrial Electronics Laboratory. The Laboratory is located in the Department of Electrical Engineering, Faculty of Engineering, Andalas University

Find Us

Pageview

Followers