LA 2 M3

 [KEMBALI KE MENU SEBELUMNYA]


DAFTAR ISI
1. Foto Hardware dan Diagram Blok
2. Prosedur Percobaan
3. Rangkaian Simulasi dan Prinsip Kerja
4. Flowchart dan Listing Program
5. Kondisi
6. Video Demo
7. Link Download

Percobaan 2

 Komunikasi SPI Menggunakan Arduino


1. Foto Hardware dan Diagram Blok [Kembali]

       
  1. Arduino Uno



        2. Seven Segment 

   
        2. Dipswitch

                                                


     

Diagram Blok:



2. Prosedur Percobaan  [Kembali]

Rangkai semua komponen 
+ Buka Arduino IDE dan masukan listing Program
+ Upload program ke arduino
+ jalankan program pada simulasi dan cobakan dengan modul




Prinsip Kerja

    Dalam rangkaian ini, dua Arduino berfungsi sebagai master dan slave, dengan komunikasi yang dilakukan melalui SPI (Serial Peripheral Interface). Master mengirimkan data yang disambungkan ke dipswitch, sementara slave menerima data tersebut dan mengendalikan seven segment display.

Master Arduino mengambil data dari pin 9. Jika pin 9 memiliki logika 1 (nilai tinggi), maka master Arduino akan mengirimkan data "9" ke slave Arduino melalui SPI. Slave Arduino kemudian menerima data "9" dan menampilkan angka 9 pada seven segment display.

Jika tidak ada dipswitch yang aktif, maka angka yang ditampilkan adalah 1. Namun, jika ada dipswitch yang aktif, angka yang ditampilkan akan disesuaikan dengan pin yang menyala atau memiliki logika 1. Misalnya, jika pin 2 menyala, maka akan ditampilkan angka 2.

Dengan cara ini, master dapat mengontrol seven segment display pada slave dari jarak jauh, mengirimkan instruksi digital melalui SPI, dan slave menerjemahkan instruksi tersebut untuk menampilkan angka yang sesuai pada seven segment display.


4. Flowchart dan Listing Program [Kembali]

Master Arduino:



Slave Arduino: 





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


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. 

    

Komentar

Postingan populer dari blog ini

MODUL 1

TUGAS BESAR

MODUL 1 Up & Uc