M3 LA1

Laporan Akhir 1 M3
Komunikasi 
SPI
 
*Klik teks untuk menuju

1. Prosedur [Kembali]

Langkah-langkah percobaan :

1. Siapkan alat dan bahan yaitu dengan komponen utama Arduino Uno, Infrared Sensor, IC I2C, Keypad dan Motor DC

2. Rangkai sesuai gambar percobaan

3. Rancang kerja rangkaian sesuai flowchat

4. Tekan tombol “Play” untuk menjalankan simulasi


2. Hardaware dan Diagram Blok [Kembali]

  • Arduino
  • Dual Seven Segment
  • Dipswitch

3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]






 Prinsip Kerja
  Rangkaian ini bekerja dengan menggunakan komunikasi SPI (Serial Pheripheral Interface) yang mana menggunakan pin MOSI, MISO, SCK dan SS. Komunikasi dilakukan antara master dan juga Slave. Master melakukan pengontrolan terhadap slave dengan mengirimkan kondisi dipswitch yang sedang aktif menuju slave dengan memanfaatkan pin MOSI (Master Out Slave input). Data yang diteruskan dari master dilakukan tanpa memerlukan checking eror pada slave, ini membuat komunikasi antara keduanya sangat cepat.

Namun karena tidak ada pengecekan eror pada komunikasi SPI maka sering terjadi kesalahan data yang diterima oleh slave.


4. Flowchart dan listing Program [Kembali]

Flowchart :
Master


Slave





Listing Program :

    Master 
//Master Arduino
#include<SPI.h> //Library for SPI 
int dip[] = {2,3,4,5,6,7};
int dipvalue[] = {};
void setup (){
 Serial.begin(9600); //Starts Serial Communication at Baud Rate 115200 
 for(int i = 0; i < 6; 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 < 6; i++){
 dipvalue[i] = digitalRead(dip[i]);
 if(dipvalue[i] == LOW){
 x = dip[i];
 }
 }
 digitalWrite(SS, LOW);
Mastersend = x;
 Serial.println(Mastersend); 
 SPI.transfer(Mastersend); //Send the mastersend value to slave also receives value from slave
 delay(1000);


        Slave

#include <SPI.h>

const int segmentPins[] = {9, 8, 7, 6, 5, 4, 3, 2};
volatile boolean received = false;
volatile byte Slavereceived;
int index;
int currentNumber = 9; // Inisialisasi angka saat ini
int switchCount = 0; // Counter untuk menghitung jumlah switch aktif

void setup() {
  Serial.begin(9600);
  
  for (int i = 0; i < 8; i++) {
    pinMode(segmentPins[i], OUTPUT);
  }
  
  SPCR |= _BV(SPE); // Mengaktifkan SPI dalam mode Slave
  SPI.attachInterrupt(); // Menetapkan interrupt untuk komunikasi SPI
}

ISR (SPI_STC_vect) { // Fungsi rutin interrupt
  Slavereceived = SPDR; // Menyimpan nilai yang diterima dari master
  received = true; // Set nilai received menjadi true 
}

void loop() {
  Serial.println(Slavereceived);
  
  if (received) {
    if (Slavereceived == 1) { // Jika switch aktif
      switchCount++;
      
      if (switchCount >= 3) { // Jika sudah terdeteksi 3 switch aktif
        switchCount = 0; // Reset counter
        currentNumber = 9; // Mulai perhitungan dari 9 lagi
      }
    }
    received = false; // Reset nilai received
    
    displayCharacter(currentNumber); // Menampilkan angka saat ini di 7 segment
    delay(1000); // Delay sebelum menampilkan angka selanjutnya
    
    currentNumber--; // Mengurangi angka saat ini untuk perhitungan selanjutnya
    if (currentNumber < 0) { // Jika mencapai 0, kembali ke 9
      currentNumber = 9;
    }
  }
}

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)) {
    // Mendapatkan indeks digit (0-9) dari karakter
    int index = ch;
    // Menulis pola ke pin-pins segment
    for (int i = 0; i < 7; i++) {
      digitalWrite(segmentPins[i], patterns[index][i]);
    }
  }
}



5. Video Simulasi [Kembali]







6. Kondisi [Kembali]

    Setiap 3 switch yang aktif akan melakukan counting 9 - 0 pada digit 1 dan 2 secara berseling

7. Download File [Kembali]
HTML Disini
Simulasi Disini
Video Simulasi Disini
Listing Program Di sini
DataSheet LCD Disini 
Datasheet LDR Disini
DataSheet L293D Disini

Tidak ada komentar:

Posting Komentar

TP-2 Modul 1

Tugas Pendahuluan 2 - Modul 1 [KEMBALI KE MENU SEBELUMNYA] DAFTAR ISI     1. Kondisi     2. Gambar     3. Video Simulasi     4. ...