Tugas Pendahuluan 2 (M3)

 [KEMBALI KE MENU SEBELUMNYA]

Percobaan 2 Kondisi 6

Komunikasi SPI Menggunakan Arduino

1. Prosedur 

1. Rangkai rangkaian di proteus sesuai dengan kondisi percobaan.
2. Tulis program untuk arduino di software Arduino IDE.
3. Compile program tadi, lalu upload ke dalam arduino.
4. Setelah program selesai di upload, jalankan simulasi rangkaian pada proteus.

2. Hardware dan Diagram Blok 

Hardware :
1.Arduino Uno



2.Dipswitch


3.Seven Segment 2 Digit




4.Resistor

Diagram Blok :



3. Rangkaian Simulasi dan Prinsip Kerja

Rangkaian Simulasi :



Prinsip Kerja :

Pada arduino master bertugas untuk pembacaan kondisi tombol dan pengiriman pesan ke Arduino slave berdasarkan kondisi tersebut. Dalam setiap iterasi loop, Arduino master membaca status tombol-tombol yang terhubung, mengidentifikasi dua tombol yang aktif, dan mengirimkan dua digit yang berbeda ke Arduino slave melalui SPI (Serial Peripheral Interface). Ketika dua tombol dipilih, nilai dari tombol-tombol tersebut disimpan di variabel digit1 dan digit2. Setelah itu, Arduino master mengirimkan kedua digit tersebut ke slave melalui koneksi SPI. Arduino master kemudian menunggu selama satu detik sebelum mengulangi proses tersebut.

Pada arduino slave bertugas untuk penerimaan pesan dari Arduino master dan menampilkan dua digit yang diterima secara bergantian pada display. Ketika Arduino slave menerima pesan dari master melalui koneksi SPI, ISR (Interrupt Service Routine) akan diaktifkan. Di dalam ISR, slave menerima dua byte secara berurutan dari master dan menyimpannya di variabel Slavereceived1 dan Slavereceived2. Selanjutnya, di dalam loop, slave memanggil fungsi displayCharacter() dengan dua nilai yang diterima dari master untuk menampilkan dua digit secara bergantian pada display. Setelah menampilkan digit pertama, slave menunggu sebentar sebelum menampilkan digit kedua. Proses ini terus berlanjut, sehingga display pada slave akan menampilkan dua digit yang dikirim dari master secara bergantian saat dua tombol aktif pada master.
4. Flowchart dan Listing Program

Flowchart :


Arduino Master


Arduino Slave

Listing Program :

Master

#include <SPI.h> // Mengimpor library SPI untuk komunikasi serial

// Mendeklarasikan pin-pin untuk dip switch
int dip[] = {2, 3, 4, 5, 6, 7, 8, 9};
int dipvalue[] = {}; // Array untuk menyimpan nilai pembacaan dari dip switch
int dipCount = 0; // Variabel untuk menghitung jumlah dip switch yang aktif

void setup() {
  Serial.begin(9600); // Memulai komunikasi serial dengan baud rate 9600
  // Mengatur semua pin dip switch sebagai input dengan pull-up resistor
  for (int i = 0; i < 8; i++) {
    pinMode(dip[i], INPUT_PULLUP);
  }
  // Memulai komunikasi SPI
  SPI.begin();
  // Mengatur pembagi clock SPI untuk mengontrol kecepatan data transfer
  SPI.setClockDivider(SPI_CLOCK_DIV8);
  // Mengatur Slave Select (SS) pin ke HIGH. Ini menandakan bahwa tidak ada komunikasi SPI yang aktif
  digitalWrite(SS, HIGH);
}

void loop() {
  byte Mastersend = 0; // Variabel untuk menyimpan data yang akan dikirim ke slave
  // Membaca nilai dari setiap dip switch dan menghitung berapa yang aktif (dalam posisi LOW)
  for (int i = 0; i < 8; i++) {
    dipvalue[i] = digitalRead(dip[i]);
    if (dipvalue[i] == LOW) {
      dipCount++; // Menambahkan jumlah dip switch yang aktif
    }
  }

  // Mengatur nilai Mastersend berdasarkan jumlah dip switch yang aktif
  if (dipCount == 1) {
    Mastersend = 1; // Jika hanya satu dip switch yang aktif, kirim 1
  } else if (dipCount == 4) {
    Mastersend = 4; // Jika empat dip switch yang aktif, kirim 4
  }

  dipCount = 0; // Mereset jumlah dip switch yang aktif untuk iterasi berikutnya

  // Mengirim nilai Mastersend ke slave melalui SPI
  digitalWrite(SS, LOW); // Mengaktifkan slave dengan mengatur SS ke LOW
  SPI.transfer(Mastersend); // Mengirim data ke slave
  delay(100); // Memberikan delay untuk memastikan slave memiliki waktu yang cukup untuk memproses data yang diterima
}

 Slave

#include <SPI.h>

#define a 9
#define b 8
#define c 7
#define d 6
#define e 5
#define f 4
#define g 3
#define dp 2
#define D1 A0
#define D2 A1

const int segmentPins[] = {a, b, c, d, e, f, g}; // Koneksi digit 1 ke pin 1, digit 2 ke pin 0

volatile boolean received = false;
volatile byte Slavereceived;

void setup() {
  pinMode(D1, OUTPUT);
  pinMode(D2, OUTPUT);
  Serial.begin(9600);
  for (int i = 0; i < 7; i++) {
    pinMode(segmentPins[i], OUTPUT);
  }
  SPCR |= _BV(SPE);
  SPI.attachInterrupt();
}

ISR(SPI_STC_vect) {
  Slavereceived = SPDR;
  received = true;
}

void displayCharacter(int digit, int digitPosition) {
  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
  };

  // Write the pattern to the segment pins
  for (int i = 0; i < 7; i++) {
    digitalWrite(segmentPins[i], patterns[digit][i]);
  }

  // Aktifkan digit yang sesuai
  if (digitPosition == D1) {
    digitalWrite(D1, HIGH);
    digitalWrite(D2, LOW);
  } else if (digitPosition == D2) {
    digitalWrite(D1, LOW);
    digitalWrite(D2, HIGH);
  }

  delay(5); // Delay kecil untuk memastikan penampilan stabil
}

void loop() {
  if (received) {
    if (Slavereceived == 1) {
      displayCharacter(8, D1); // Menampilkan angka 1 hanya pada digit 1
      displayCharacter(0, D2); // Matikan digit 2
    } else if (Slavereceived == 4) {
      displayCharacter(4, D1); // Menampilkan angka 4 pada kedua digit
      displayCharacter(4, D2);
    }
    delay(100);
    received = false;
  }
}

5. Kondisi [Kembali]

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


    Download HTML
    Download Rangkaian
    
Download Program
    
Download Video Simulasi
    Download Datasheet SW-SPDT
    Download Datasheet Resistor
    
Download Datasheet Arduino Uno
    
Download Datasheet LED

Tidak ada komentar:

Posting Komentar

BAHAN PRESENTASI UNTUK PRAKTIKUM uP & uC 2023 Oleh : Farrel Luis Fadhlika NIM. 2110952049   Dosen Pengampu : Dr. Darwison, S. T., M. T. ...