Senin, 29 April 2024

Laporan Akhir 1 - Modul 3

  





Percobaan 2

Komunikasi SPI Menggunakan Arduino

1. Foto Hardware dan Diagram Blok [Kembali]

a. Hardware

 

    1. Arduino Uno


Spesifikasi Arduino Uno:


2. Dipswitch
Spesifikasi:
Slide Type, Tin Plated, SPST DIP Switch Series
Spesifikasi Teknis:
- Contact Resistance = 50 - 100 M{o}
- Contact Rating = 24VDC, 25mA at Make & Brake
50VDC, 100mA at Steade State

3. Seven Segment


Spesifikasi: 
- Jumlah digit 1 - Warna : Red Super Bright - Common : Anoda - Dimensi : 5" (inch)

b. 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


3. RANGKAIAN SIMULASI DAN PRINSIP KERJA[Kembali]






Prinsip Kerja :

Master Arduino:

Pada program master arduino, prinsip kerja utamanya adalah mengontrol komunikasi SPI antara master dan slave, serta membaca nilai dari dip switch untuk menentukan nilai yang akan dikirimkan ke slave. Pertama, diatur pin-pin yang terhubung dengan dip switch sebagai input pull-up. Kemudian, inisialisasi komunikasi Serial dan SPI dilakukan di dalam setup(). Komunikasi SPI diatur pada mode slave dengan memastikan pin SS (Slave Select) tetap tinggi sehingga tidak ada koneksi dengan slave pada awalnya. Pada loop(), nilai dari dip switch dibaca dan dipilih nilai yang akan dikirim ke slave. SS kemudian diturunkan untuk memulai komunikasi dengan slave, nilai dipilih dikirimkan ke slave menggunakan SPI.transfer(), dan nilai dari slave juga diterima melalui SPI.transfer(). Ada penundaan 1 detik sebelum proses berulang kembali.

Slave Arduino:

Pada program slave arduino, kode mengatur tampilan tujuh segmen berdasarkan nilai yang diterima dari master. Pada setup(), komunikasi Serial diinisialisasi dan pin-pin segment ditetapkan sebagai output. Mode SPI diatur pada mode slave dan interupsi SPI diaktifkan untuk mengatasi data yang diterima dari master. Di dalam loop(), nilai yang diterima dari master digunakan untuk menampilkan karakter pada tujuh segmen. Fungsi displayCharacter() digunakan untuk menetapkan pola pencahayaan pada segmen-segmen berdasarkan nilai yang diterima dari master. Proses ini diulang setelah penundaan 1 detik untuk menampilkan karakter yang baru.


4. FLOWCHART DAN LISTING PROGRAM [Kembali]

a. Flowchart
Master Arduino



Slave Arduino





b. Listing Program

Master Arduino

//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

//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]
  

Modul 3 - Percobaan 2 Komunikasi SPI Menggunakan Arduino

6. VIDEO RANGKAIAN [Kembali]






7. ANALISA [Kembali]





8. LINK DOWNLOAD [Kembali]

HTML                                   klik disini

Program Arduino Master      klik disini

Program Arduino Slave        klik disini

Video Percobaan                 klik disini

Datasheet Arduino               klik disini 

Datasheet Dipswitch            klik disini

Datasheet Seven Segment   klik disini










Tidak ada komentar:

Posting Komentar

MODUL 4

  [KEMBALI KE MENU SEBELUMNYA] DAFTAR ISI     1. Pendahuluan     2. Tujuan     3. Alat dan Bahan     4. Dasar Teori     5. Perc...