Tugas Pendahuluan 2 uP dan uC (Modul 2)




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. Dip Switch




3. 7 Segment 2 Digit



4. Resistor



Block Diagram:



3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

Rangkaian Simulasi :


Prinsip Kerja :

Rangkaian ini terdiri dari 4 buah kompnen yaitu Arduino, 7-Segment 2 digit, Dipswitch, dan Resistor. Dipswith berguna sebagai input dari Arduino yang dihubungkan ke kaki A0-A3 arduino. sedangkan untuk outputnya yaitu 7-segment 2 digit yang masing masing pinnya dihubungkan ke pin 4-13 Arduino. 

Ketika 2 buah dipswitch on, maka arduino akan mengeluarkan output berupa counting pada 7-segment dari angka 15 hingga 0 lalu reset counting lagi ke 15. karena 7-segement ini tidak bisa menampilkan 2 digit angka sekaligus maka, kami memprogram pada arduino, dimana ketika countingnya diatas atau sama dengan 10, maka angka puluhan dan angka satuannya akan tampil secara berseling pada kedua display 7 segment dengan delay waktu yang cukup singkat. namun ketika countingnya dibawah 10, maka 7-segment yang dikiri akan mati, dan hanya akan menampilkan digit pada 7-segment dikanan. Jika Dipswitch yang aktif lebih dari 2 atau kurang dari 2, maka tidak akan terjadi proses counting


4. Flowchart dan Listing Program [Kembali]

Flowchart :



Listing Program:

// Mendefinisikan nomor pin untuk segmen-segmen a sampai g dan titik desimal (dp) pada display 7-segmen
#define a 6
#define b 7
#define c 8
#define d 9
#define e 10
#define f 11
#define g 12
#define dp 13

// Mendefinisikan nomor pin untuk dua digit (D1 dan D2) pada display 7-segmen
#define D1 4
#define D2 5

// Mendefinisikan nomor pin untuk empat tombol switch (Dsw1 sampai Dsw4)
#define Dsw1 A0
#define Dsw2 A1
#define Dsw3 A2
#define Dsw4 A3

// Inisialisasi array dengan nomor pin segmen-segmen untuk memudahkan kontrol segmen
int segments[] = {a, b, c, d, e, f, g};

// Membuat array dua dimensi untuk menentukan pola yang dinyalakan (1) atau dimatikan (0) untuk masing-masing angka 0-9, dp, dan kondisi kosong
byte digitPatterns[16][7] = {
    {1, 1, 1, 1, 1, 1, 0}, // 0
    {0, 1, 1, 0, 0, 0, 0}, // 1
    {1, 1, 0, 1, 1, 0, 1}, // 2
    {1, 1, 1, 1, 0, 0, 1}, // 3
    {0, 1, 1, 0, 0, 1, 1}, // 4
    {1, 0, 1, 1, 0, 1, 1}, // 5
    {1, 0, 1, 1, 1, 1, 1}, // 6
    {1, 1, 1, 0, 0, 0, 0}, // 7
    {1, 1, 1, 1, 1, 1, 1}, // 8
    {1, 1, 1, 1, 0, 1, 1}, // 9
    {0, 0, 0, 0, 0, 0, 1}, // dp (titik desimal)
    {0, 0, 0, 0, 0, 0, 0}, // kondisi kosong
};

void setup() {
    // Mengatur pin-pin segmen sebagai OUTPUT
    for (int i = 0; i < 7; i++) {
        pinMode(segments[i], OUTPUT);
    }
    // Mengatur pin dp dan digit sebagai OUTPUT
    pinMode(dp, OUTPUT);
    pinMode(D1, OUTPUT);
    pinMode(D2, OUTPUT);

    // Mengatur pin-pin switch sebagai INPUT_PULLUP (menggunakan resistor pull-up internal)
    pinMode(Dsw1, INPUT_PULLUP);
    pinMode(Dsw2, INPUT_PULLUP);
    pinMode(Dsw3, INPUT_PULLUP);
    pinMode(Dsw4, INPUT_PULLUP);

    // Memulai komunikasi serial pada baud rate 9600 untuk debugging
    Serial.begin(9600);
}

void displayDigit(int digit, int digitPosition) {
    // Menyalakan segmen-segmen berdasarkan pola digit yang diinginkan
    for (int i = 0; i < 7; i++) {
        digitalWrite(segments[i], digitPatterns[digit][i]);
    }
    // Mengaktifkan digit yang sesuai berdasarkan posisi yang diinginkan
    if (digitPosition == D1) {
        digitalWrite(D1, HIGH); // Aktifkan digit 1
        digitalWrite(D2, LOW); // Pastikan digit 2 non-aktif
    } else if (digitPosition == D2) {
        digitalWrite(D1, LOW); // Pastikan digit 1 non-aktif
        digitalWrite(D2, HIGH); // Aktifkan digit 2
    }
}

void displayNumber(int number) {
    // Fungsi untuk menampilkan angka pada display 7-segmen
    if (number < 10) {
        // Jika angka kurang dari 10, tampilkan hanya pada digit pertama
        digitalWrite(D1, HIGH);
        digitalWrite(D2, LOW);
        displayDigit(0, D2); // Menampilkan angka 0 pada digit kedua
        displayDigit(number, D1); // Menampilkan angka pada digit pertama
    } else {
        // Jika angka 10 atau lebih, pecah menjadi dua digit dan tampilkan secara bergantian
        int tensDigit = number / 10; // Digit puluhan
        int unitsDigit = number % 10; // Digit satuan
        displayDigit(tensDigit, D2); // Tampilkan digit puluhan pada digit kedua
        delay(200); // Tunda untuk visibility
        displayDigit(unitsDigit, D1); // Tampilkan digit satuan pada digit pertama
    }
    delay(1000); // Tunda untuk memastikan angka terlihat dengan jelas
}

void loop() {
    // Membaca status dari tombol-tombol dan menentukan apakah tombol ditekan (LOW karena menggunakan INPUT_PULLUP)
    bool sw1 = digitalRead(Dsw1) == LOW;
    bool sw2 = digitalRead(Dsw2) == LOW;
    bool sw3 = digitalRead(Dsw3) == LOW;
    bool sw4 = digitalRead(Dsw4) == LOW;

    // Menghitung jumlah tombol yang ditekan
    int pressedCount = sw1 + sw2 + sw3 + sw4;

    // Variabel untuk menyimpan waktu terakhir tombol ditekan dan counter untuk angka yang ditampilkan
    static unsigned long lastTime = 0; 
    static int count = 15; 

    if (pressedCount == 2) {
        // Jika ada dua tombol yang ditekan secara bersamaan, kurangi nilai counter dan tampilkan angka
        if (millis() - lastTime > 1000) { // Menggunakan debounce time 1 detik
            lastTime = millis();
            if (count >= 10) {
                // Jika counter >= 10, gunakan fungsi displayNumber untuk menampilkan angka
                displayNumber(count);
            } else {
                // Jika counter < 10, cukup gunakan displayDigit untuk menampilkan angka pada digit pertama
                displayDigit(0, D2); // Menampilkan 0 pada digit kedua sebagai placeholder
                displayDigit(count, D1); // Menampilkan angka pada digit pertama
                delay(1000); // Tunda untuk visibility
            }
            count--;
            if (count < 0) {
                count = 15; // Reset counter ke 15 setelah mencapai 0
            }
        }
    } else {
        count = 15; // Reset counter jika tidak ada dua tombol yang ditekan secara bersamaan
    }
}


5. Kondisi [Kembali]
    
    Percobaan 3 Kondisi 2
        -Ketika 2 switch aktif 7-Segment menghitung mundur dari 15

6. Video Simulasi [Kembali]



7. Download File [Kembali]

HTML                    klik disini
Program                  klik disini
File Rangkaian       klik disini
Video Percobaan    klik disini


Tidak ada komentar:

Posting Komentar

Modul 4 Praktikum uP dan uC

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