Minggu, 28 April 2024

TUGAS PENDAHULUAN 2 MODUL 3




Tugas Pendahuluan 2 Modul 3
(Percobaan 2 Kondisi 3)

1. Prosedur
[Kembali]

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.
5. Selesai.

2. Hardware dan Diagram Blok [Kembali]

Hardware :

1. Arduino Uno




Spesifikasi:




2. Seven Segment


















3. Dip Switch





Spesifikasi:





Diagram Blok  :








3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

Rangkaian Simulasi Sebelum dirunning:











Rangkaian Simulasi Setelah dirunning:
















Prinsip Kerja : 

Pada percobaan ini kita menggunakan dip switch sebagai inputannya. Untuk outputnya kita menggunakan seven segment. Pada  percobaan ini kita menggunakan 2 buah arduino, arduino pertama berfungsi debagai master, sedangkan arduino kedua berfungsi sebagai slave.

MASTER:

1. Inisialisasi: Pada bagian setup(), komunikasi serial dimulai dengan kecepatan baud rate 9600. Selain itu, setiap pin input diprogram dengan mode INPUT_PULLUP untuk mengaktifkan resistor pull-up internal, sehingga ketika saklar terhubung, nilainya adalah LOW.

2. Pembacaan Saklar: Di dalam loop(), program membaca status saklar yang terhubung ke pin input. Ketika saklar aktif (terhubung), nilai LOW akan terdeteksi, dan nilai indeks saklar yang aktif disimpan dalam variabel x. Variabel activeSwitches digunakan untuk menghitung jumlah saklar yang aktif pada saat itu.

3. Komunikasi SPI: Jika jumlah saklar aktif adalah 3, maka program akan mengirimkan pesan ke perangkat slave melalui komunikasi SPI. Pesan yang dikirimkan adalah angka 3, yang kemudian ditampilkan pada perangkat slave sebagai respons atas kondisi saklar yang aktif. Kemudian terdapat logika yang akan mengatur tampilan di slave berdasarkan nilai pesan yang diterima.

4. Shift Bit: Jika jumlah saklar aktif adalah 4, program akan mengirimkan pesan berupa angka 4 ke perangkat slave melalui SPI. Namun, di sini, bit pesan akan di-shift kiri sebanyak 4 kali sebelum dikirimkan, yang artinya digit kedua akan diatur sebagai 4. Ini memungkinkan penggunaan digit pertama untuk menunjukkan jumlah saklar yang aktif dari 0 hingga 5.

Dengan cara ini, perangkat master mampu mendeteksi kondisi saklar yang aktif dan mengirimkan pesan ke perangkat slave untuk menampilkan respons yang sesuai.


SLAVE:

1. Inisialisasi: Pada bagian setup(), komunikasi serial dimulai dengan kecepatan baud rate 9600. Selain itu, pin-pins yang terhubung ke segmen-segmen dari display tujuh segmen diatur sebagai output.

2. SPI Slave Mode: Perangkat diatur dalam mode SPI slave. Ketika terjadi interupsi SPI (SPI_STC_vect), data yang diterima dari perangkat master disimpan dalam variabel Slavereceived.

3. Interupsi: Fungsi ISR (Interrupt Service Routine) dipanggil ketika data diterima dari perangkat master melalui SPI. Pada fungsi ISR, nilai yang diterima dari master disimpan dan flag received diatur menjadi true.

4. Logika Kontrol: Pada fungsi loop(), program memeriksa apakah data telah diterima dari perangkat master. Jika iya, maka nilai yang diterima diuji. Jika nilai adalah 3, maka display tujuh segmen akan menampilkan angka dari 0 hingga 5 secara berurutan, dengan digit kedua yang berubah setelah mencapai angka 5. Jika nilai adalah 4, maka display akan menampilkan angka dari 0 hingga 5 secara berurutan, tetapi dengan digit pertama yang berubah setelah mencapai angka 5. Jika nilai tidak 3 atau 4, display akan menampilkan angka dari 0 hingga 9 secara berurutan, dengan digit pertama yang berubah setelah mencapai angka 5.

5. Tampilan Karakter: Fungsi displayCharacter() mengubah karakter numerik menjadi pola bit yang sesuai untuk menyalakan segmen-segmen pada display tujuh segmen.

Dengan demikian, perangkat ini bertindak sebagai slave SPI yang menerima instruksi dari perangkat master melalui SPI dan menampilkan informasi yang sesuai pada display tujuh segmen berdasarkan instruksi yang diterima.


4. Flowchart dan Listing Program [Kembali]

Flowchart :

Flowchart di modul:
MASTER




SLAVE









Flowchart sesuai kondisi:
MASTER



SLAVE






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;
  int activeSwitches = 0; // variabel untuk menghitung jumlah saklar yang aktif

  // Membaca status saklar dan menghitung berapa yang aktif
  for (int i = 0; i < 8; i++) {
    dipvalue[i] = digitalRead(dip[i]);
    if (dipvalue[i] == LOW) {
      x = dip[i];
      activeSwitches++;
    }
  }

  // Jika 3 saklar aktif, tampilkan counter 0-5 di digit pertama, kemudian counting 6-9 di digit kedua
  if (activeSwitches == 3) {
    // Tampilkan counter 0-5 di digit pertama
      digitalWrite(SS, LOW);
      Mastersend = 3;
      Serial.println(Mastersend);
      SPI.transfer(Mastersend);
      delay(100);
    // Lanjutkan counting dari 6-9 di digit kedua
    //for (int i = 6; i <= 9; i++) {
     // digitalWrite(SS, LOW);
     // Mastersend = i;
      //Serial.println(Mastersend);
      //SPI.transfer(Mastersend);
      //delay(100);
    }
  //}
  
  // Jika 4 saklar aktif, tampilkan counter 0-5 di digit kedua, kemudian counting 6-9 di digit pertama
  else if (activeSwitches == 4) {
    // Tampilkan counter 0-5 di digit kedua
      digitalWrite(SS, LOW);
      Mastersend = 4; // Shift 4 bit ke kiri untuk menetapkan digit kedua
      Serial.println(Mastersend);
      SPI.transfer(Mastersend);
      delay(100);
    // Lanjutkan counting dari 6-9 di digit pertama
    //for (int i = 6; i <= 9; i++) {
     // digitalWrite(SS, LOW);
     // Mastersend = i << 4; // Shift 4 bit ke kiri untuk menetapkan digit kedua
     // Serial.println(Mastersend);
      //SPI.transfer(Mastersend);
      //delay(100);
    //}
  }
}


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 dg1 = A1;
int dg2 = A0;

void setup() {
  Serial.begin(9600);
  for (int i = 0; i < 8; i++) {
    pinMode(segmentPins[i], OUTPUT);
  }
  pinMode(dg1, OUTPUT);
  pinMode(dg2, OUTPUT);
  SPCR |= _BV(SPE); // Turn on SPI in Slave Mode
  SPI.attachInterrupt(); // Interrupt ON is set for SPI communication
}

ISR (SPI_STC_vect) { // Interrupt routine function
  Slavereceived = SPDR; // Value received from master is stored in variable Slavereceived
  received = true; // Sets received as True
}

void loop() {
  if (received) { // Logic to SET LED ON OR OFF depending upon the value received from master
    Serial.println(Slavereceived);
    if (Slavereceived == 3) {
      for(int i=0;i<=9;i++){
        if(i <= 5){
          digitalWrite(dg1,HIGH);
          digitalWrite(dg2,LOW);
          displayCharacter(i);
          delay (100);
        }
        else{
          digitalWrite(dg2, HIGH);
          digitalWrite(dg1,LOW);
          displayCharacter(i);
          delay (100);
        }
      }
      
    }
    else if (Slavereceived == 4) {
      for(int i=0;i<=9;i++){
        if(i <= 5){
          digitalWrite(dg1,LOW);
          digitalWrite(dg2,HIGH);
          displayCharacter(i);
          delay (100);
        }
     
        else{
          digitalWrite(dg2, LOW);
          digitalWrite(dg1, HIGH);
          displayCharacter(i);
          delay (100);
        }
      }}

      else {
      for(int i=0;i<=9;i++){
        if(i <= 5){
          digitalWrite(dg1,LOW);
          digitalWrite(dg2,HIGH);
          displayCharacter(i);
          delay (100);
        }
     
        else{
          digitalWrite(dg2, LOW);
          digitalWrite(dg1, HIGH);
          displayCharacter(i);
          delay (100);
        }
         
      }
    }
      
    }
    
    received = false; // Reset received flag
  }

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]

Percobaan 2 Kondisi 3
Jika 3 Switch aktif maka counting 0 - 5 pada digit 1 dan 6 - 9 pada digit 2, Jika 4 Switch aktif maka counting 0 - 5 pada digit 2 dan 6 - 9 pada digit 1

6. Video Simulasi [Kembali]






7. Download File [Kembali]

HTML Download
File Rangkaian Download
Video Percobaan Download
Listing Program Download
Datasheet Arduino Download
Datasheet seven segment Download
Datasheet Dipswitch Download
















Tidak ada komentar:

Posting Komentar

Entri yang Diunggulkan

TUGAS BESAR PRAKTIKUM UP & UC (MODUL 4)

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