NIM : 2110951004

.

Senin, 06 Mei 2024

M3_TP 2_Prak UpUc




1. Prosedur
[Kembali]
  1. Rangkai seluruh komponen alat dan bahan yang diperlukan sesuai dengan kondisi percobaan yang dipilih.
  2. Buat program arduino pada aplikasi Arduino IDE sesuai dengan kondisi percobaan. Pastikan aplikasi Arduino IDE sudah mendownload library yang dibutuhkan dan sudah memilih board arduino yang sesuai.
  3. Verifikasi atau upload program pada arduino. 
  4. Jalankan atau uji coba rangkaian yang telah dibuat sesuai dengan kondisi.
  5. Perhatikan rangkaian dan output apakah sesuai dengan kondisi.
  6. Rangkaian telah selesai dibuat.
2. Hardware dan Diagram Blok [Kembali]
a. Hardware
 
1. Arduino Uno
 Spesifikasi:

2. Dipswitch
 
Spesifikasi:

3. 7-segment
 

b. Diagram Blok

3. Rangkaian Simulasi dan Prinsip kerja [Kembali]
    a). Rangkaian Simulasi

    b) Prinsip kerja

Program di atas merupakan contoh implementasi komunikasi SPI antara dua Arduino, di mana satu Arduino berperan sebagai master dan yang lainnya sebagai slave. Berikut adalah prinsip kerja dari program tersebut:

Master (Arduino pertama) :
1. Mendefinisikan pin untuk DIP switch dan variabel untuk menyimpan nilai DIP switch.
2. Mengatur pin DIP switch sebagai input dengan pull-up resistor internal.
3. Memulai komunikasi SPI dan mengatur pembagi clock SPI.
4. Melakukan loop untuk membaca status DIP switch dan menghitung jumlah switch yang aktif.
5. Mengirim jumlah switch yang aktif ke slave melalui SPI setiap detik.

Slave (Arduino kedua) :
1. Mendefinisikan pin untuk display segment dan variabel untuk menyimpan data yang diterima.
2. Mengatur pin display segment sebagai output.
3. Mengaktifkan SPI dan menunggu data dari master.
4. Ketika data diterima, menampilkan karakter yang sesuai dengan data yang diterima pada display segment.

Prinsip kerja komunikasi SPI pada kedua Arduino ini memungkinkan pertukaran data antara keduanya, di mana Arduino master mengirimkan data jumlah switch yang aktif ke slave, dan slave menampilkan karakter yang sesuai dengan data yang diterima.

4. Flowchart dan Listing Program [Kembali]
    a) Flowchart
Master

Slave

    b) listring program

Master

#include <SPI.h>

int dip[] = {2, 3, 4, 5, 6, 7, 8, 9};//Mendefinisikan pin DIP switch
int dipvalue[8] = {};//Mendefinisikan array untuk menyimpan nilai DIP switch

void setup() {
  Serial.begin(9600);
  for (int i = 0; i < 8; i++) {
    pinMode(dip[i], INPUT_PULLUP);//Mengatur pin DIP switch sebagai input dengan pull-up resistor internal
  }
  SPI.begin();//Memulai komunikasi SPI
  SPI.setClockDivider(SPI_CLOCK_DIV8);//Mengatur pembagi clock SPI
  digitalWrite(SS, HIGH);//Mengatur pin SS (Slave Select) sebagai HIGH (nonaktif)
}

void loop() {
  byte Mastersend = 0;//Mendefinisikan variabel untuk menyimpan data yang akan dikirim
  int x = 0;//Mendefinisikan variabel untuk menghitung jumlah DIP switch yang aktif
  for (int i = 0; i < 8; i++) {
    dipvalue[i] = digitalRead(dip[i]);
    if (dipvalue[i] == LOW) {
      x++;
    }
  }//Loop untuk membaca status DIP switch dan menghitung jumlah yang aktif
  digitalWrite(SS, LOW);//Mengaktifkan komunikasi dengan slave dengan menurunkan pin SS
  Mastersend = x;
  Serial.println(Mastersend);
  SPI.transfer(Mastersend);//Mengirim data ke slave
  delay(1000);//Delay selama 1 detik sebelum membaca ulang status DIP switch
}

Slave

#include <SPI.h>

const int segmentPins[] = {9, 8, 7, 6, 5, 4, 3, 2};
volatile boolean received = false;
volatile byte Slavereceived;

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

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

void loop() {
  if (received) {
    displayCharacter(Slavereceived);
    delay(1000);
    received = false;
  }
}

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 <= 8) {
    int index = ch;
    for (int i = 0; i < 7; i++) {
      digitalWrite(segmentPins[i], patterns[index][i]);
    }
  }
}

5. Kondisi [Kembali]
    Percobaan 2 Kondisi 5
    Setiap 1 Switch aktif muncul angka sesuai jumlah switch yang aktif pada digit 1

6. Video Simulasi [Kembali]
7. Download File [Kembali]
File Rangkaian 
Share:

0 komentar:

Posting Komentar

Blogger news

Blogger templates