---
# System prepended metadata

title: CS_MBD2_AhmadMalikPrasetyo_2406416270

---

 oleh button# Case Study Sesi Siang — Modul 2

> Pembuat soal: **AX**

```text
Nama : Ahmad Malik Prasetyo
NPM  : 2406416270
Anggota Kelompok : 
1. David Alexander
2. Sabbia Meilandri
3.
```

---

## Soal

Mosheva, seorang mantan prajurit IDF yang merasa dikhianati, telah mengubah dirinya menjadi aktivis anti-Israel yang radikal. Dengan rasa dendam yang membara, dia memutuskan untuk menciptakan alat untuk melawan IDF, tapi ada satu masalah — dia tidak paham teknologi AVR.

Berganti jadi Musyaffa, ia memandang sekeliling ruangannya, mencari solusi. Lalu, dia melihat laptopnya dan memutuskan untuk meminta bantuan kepada seorang ahli.

> *"Hai, aku butuh bantuanmu,"* tulisnya di forum online. *"Aku ingin membuat sistem sederhana yang bisa mengontrol lampu merah dan hijau dengan tombol. Aku ingin mengirim sinyal darurat kepada sekutu. Ada yang bisa membantu?"* 🔴

**Apakah Anda bisa membantu Musyaffa menciptakan sistem yang dia inginkan?**

---

## Penjelasan Kriteria
1. Kode akan memiliki 1 tombol input yang terhubung ke pin PD3
2. Akan ada 2 LED dimana akan terhubung ke PD4 (anggap merah) dan PD5 (anggap hijau) masing - masing
3. Button akan bersifat pull up
4. Ketika tombol ditekan maka Lampu Merah (PD4) menyala, ketika Tidak ditekan maka lampu Hijau (PD5) yang akan menyala

## Code

```avrasm
#define __SFR_OFFSET 0x00
#include "avr/io.h"

.global main

main:
    SBI DDRD, 5    
    SBI DDRD, 4

    CBI DDRD, 3          
    SBI PORTD, 3    

    SBI PORTD, 5
    CBI PORTD, 4    
    CLR R20             

loop:
    SBIC PIND, 3        
    RJMP turn_off         

turn_on:
    SBI PORTD, 5   
    CBI PORTD, 4    
    LDI R20, 1         
    RJMP loop    

turn_off:
    CBI PORTD, 5    
    SBI PORTD, 4 
    CLR R20    
    RJMP loop         

d_outer:
    LDI R24, lo8(10000)
    LDI R25, hi8(10000)
d_inner:
    SBIW R24, 1
    BRNE d_inner
    DEC R18
    BRNE d_outer
    RET
```

## Foto Rangkaian

![notpressed](https://i.ibb.co.com/rRYJLjWy/Not-Pressed.jpg)
![image](https://i.ibb.co.com/S4nDCC09/Pressed.jpg)

---

## Soal Teori

### Teori

**1.** Jelaskan apa yang dimaksud dengan konfigurasi *pull-up* pada pin input ATmega328P. Bagaimana cara mengaktifkan internal pull-up resistor melalui register, dan apa pengaruhnya terhadap pembacaan nilai logika pada pin tersebut saat tombol ditekan maupun tidak ditekan?

Jawaban:

Konfigurasi pull-up pada pin input ATmega328P cukup dapat dilakukan dengan memberikan sinyal high kepada port yang diinginkan. Pin input button akan dibaca sebagai pull-up registor dengan line `SBI PORTD, 3` dimana akan dinyalakan fungsi pull-up oleh button.

---

### Analisis

**2.** Pada sistem Musyaffa, tombol dan LED menggunakan pin pada PORTD. Jelaskan bagaimana kode Assembly yang Anda buat mengonfigurasi pin PD3 sebagai **input** dengan pull-up dan pin PD4 serta PD5 sebagai **output**. Sebutkan register apa saja yang digunakan serta nilai yang di-set pada masing-masing register.

Jawaban:

Untuk menentukan pin PD3 sebagai input, kita dapat meng-initialize PD# dengan `CBI DDRD, 3` dimana kode ini akan menyatakan bahwa arah ke pin PD 3 adalah sebuah input (CBI).

Lalu untuk pin PD4 dan PD5 cukup disamakan dengan starting init `SBI DDRD, 4/5` untuk dinyatakan sebagai output.

Sebelum memulai, kita mengawali dengan memberikan input high kepada PD5 dengan `SBI PORTD, 5` dan low kepada PD4 `CBI PORTD, 4`.

---

**3.** Pada sistem Musyaffa, ketika tombol ditekan, lampu merah menyala dan lampu hijau mati. Jelaskan bagaimana program Assembly membedakan kondisi tombol ditekan dan tidak ditekan menggunakan instruksi seperti `SBIC`/`SBIS`, serta bagaimana instruksi `SBI`, `CBI`, dan `RJMP` digunakan untuk mengontrol kedua LED secara bergantian.

Jawaban:

Dengan bagian `loop`, terdapat register `SBIC` dimana akan melompat/skip arahan berikut ketika button/pin yang terhubung dipencet/mengirim input high. Setelah loop ini, program akan lanjut ke `turn_on` dimana lampu merah akan dimatikan `CBI PORTD, 4` dan lampu hijau akan dinyalakan `SBI PORTD, 5`. Setelah itu akan di lempar kembali ke `loop`.

Jika button di press, maka register `SBIC` akan melanjutkan kode ke bagian `turn_off` dimana kebalikan yang terjadi. Ini akan terus kembali ke `loop` hingga tidak ada power source.