Tugas Pendahuluan 2 Modul 3




Tugas Pendahuluan 1 Modul 2
(Percobaan 2 Kondisi 1)

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.

2. Hardware dan Diagram Blok [Kembali]

Hardware :
1.Arduino Uno



2.Dipswitch


3.Seven Segment 2 Digit




4.Resistor

Diagram Blok :




3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

Rangkaian Simulasi :




Prinsip Kerja :

Pada modul 3, percobaan 2 kondisi 1, terdapat dua Arduino Uno yang digunakan, dimana satu Arduino bertindak sebagai master dan satunya lagi sebagai slave. Alat dan bahan yang digunakan seperti dipswitch, Arduino Uno (Master), Arduino Uno (Slave), dan seven segment. Pada rangkaian ini, dipswitch dihubungkan dengan Master Arduino dan output sevent segment terhubung dengan slave arduino. Rangkaian ini menggunakan komunikasi SPI Arduino, yaitu menggunakan pin MISO, MOSI, SCK, dan SS yang terhubung antara Master Arduino dan Slave Arduino. Seven segment akan menampilkan karakter angka sesuai dengan kondisi dipswitch yang aktif berdasarkan program. Pada saat setiap dipswitch di aktifkan, maka master arduino akan mengirimkan data menuju slave arduino secara paralel dan slave arduino akan menerima data sesuai program dan ditampilkan pada output seven segment. Dan pada percobaan kondisi ini pada saat 2 switch aktif muncul angka berbeda pada digit ke 1 seven segment, dan pada saat 3 switch aktif muncul angka berbeda pada digit ke 2.

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

#include <SPI.h>

const int segmentPins[] = {9, 8, 7, 6, 5, 4, 3, 2};
const int D1 = A1; // Definisi pin D1 sebagai A1
const int D2 = A3; // Definisi pin D2 sebagai A3

volatile boolean received = false;
volatile byte Slavereceived;
int index;

void setup() {
  pinMode(D1, OUTPUT); // Mengatur pin D1 sebagai OUTPUT
  pinMode(D2, OUTPUT); // Mengatur pin D2 sebagai OUTPUT

  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 communication
}

ISR (SPI_STC_vect) { // Interrupt 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 received from master
    int digit1 = Slavereceived / 10; // Mendapatkan digit pertama
    int digit2 = Slavereceived % 10; // Mendapatkan digit kedua

    displayCharacter(digit1, D1); // Menampilkan digit pertama pada pin D1
    delay(1000); // Delay untuk membaca digit pertama

    displayCharacter(digit2, D2); // Menampilkan digit kedua pada pin D2
    delay(1000); // Delay untuk membaca digit kedua
    received = false; // Set received to false after displaying digits
  }
}

void displayCharacter(int ch, int digitPin) {
  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]);
    }
    digitalWrite(digitPin, HIGH); // Membuat digit aktif
  }
}

5. Kondisi [Kembali]

Percobaan 2 Kondisi 1
(Setiap 2 Switch aktif muncul angka berbeda pada digit ke 1, Setiap 3 Switch aktif muncul angka pada digit ke 2)

6. Video Simulasi [Kembali]



7. Download File [Kembali]

File Rangkaian klik disini
Video Percobaan klik disini
Listing Program Master klik disini
Listing Program Slave klik disini
Datasheet Arduino klik disini
Datasheet Seven Segment klik disini
Datasheet DIP Switch klik disini

Tidak ada komentar:

Posting Komentar

  BAHAN PRESENTASI MATA KULIAH ELEKTRONIKA Nama: Vigo Danovan Saputra NIM: 2110951023 kelas: Elektronika C Dosen Pengampu ; Darwison,M.T Ref...