Menjembatani desain hardware dan firmware: memahami GPIO, interrupt, dan boundary tanggung jawab, serta menulis interface spec yang menyelamatkan proyek dari konflik antar tim.

Setelah di episode 10 kalian mampu mengukur dan men-debug board, pada episode ini kita membuka babak yang lebih strategis: interface antara hardware dan firmware. Di dunia kerja nyata, hardware engineer tidak bekerja sendiri — dan titik pertemuan dengan firmware engineer adalah tempat paling sering terjadi salah paham.
Mengapa interface ini penting? Karena hampir semua "bug yang tidak jelas" di produksi berakar dari boundary yang tidak pernah disepakati: pin yang dipakai dua fungsi, interrupt yang salah diasumsikan, atau level logika yang berbeda dari ekspektasi firmware. Interface spec yang baik adalah kontrak yang membuat kedua tim berbicara bahasa yang sama.
GPIO (General Purpose Input/Output) adalah pin MCU yang bisa dikonfigurasi sebagai input atau output. Meski sederhana, di sinilah banyak miskomunikasi dimulai.
Setiap pin GPIO yang dipakai butuh kesepakatan tentang lima hal:
Pin : PA0
Fungsi: INPUT - tombol "MODE"
Tipe : Pull-up internal, aktif LOW (menekan tombol = logika 0)
Debounce: 50ms (kebisingan mekanis tombol)
Toleransi: 3.3V, tidak boleh terhubung ke 5VKesalahan klasik: hardware memakai resistor pull-down eksternal sementara firmware mengaktifkan pull-up internal — hasilnya logika terbalik dan debug berjam-jam. Semua ini dicegah dengan satu tabel di interface spec.
MCU PA1 (open-drain) ----R 4.7k---- +5V
|
+---- input logika 5V
MCU hanya menarik LOW; saat tidak menarik, pull-up 5V mengangkat ke 5V.
Hasil: MCU 3.3V bisa "berbicara" dengan logika 5V tanpa level shifter.Firmware tidak selalu menunggu — hardware bisa menyela (interrupt) firmware saat ada kejadian penting. Interrupt adalah cara paling efisien menangani kejadian real-time: tombol ditekan, data UART tiba, timer habis.
Dua jenis pemicu interrupt:
| Pemicu | Kapan Terjadi | Contoh |
|---|---|---|
| Edge (tepi) | Saat sinyal berubah (naik/turun) | Tombol ditekan, pulse encoder |
| Level (level) | Selama sinyal berada di level tertentu | Sensor alarm aktif |
Kesalahan desain yang umum: memakai level interrupt untuk sinyal yang berubah sangat cepat — firmware bisa di-interrupt terus menerus (interrupt storm). Untuk kejadian berulang cepat, edge interrupt jauh lebih aman.
Kontak mekanis (tombol, relay, encoder) tidak pernah "bersih": saat ditekan, level memantul ribuan kali dalam milidetik sebelum stabil. Tanpa debounce, satu kali tekan tombol bisa terdeteksi sebagai 5-20 kali tekan.
TANPA debounce: 1-----0-1-0-1-0-1-0-----1 (bouncing ~5-20ms)
DENGAN debounce: 1-----0---------------1 (satu transisi stabil)
Debounce bisa hardware (RC filter + Schmitt) atau firmware (delay/multisample).
Firmware adalah pilihan paling umum: 30-50ms sampling cukup untuk mayoritas.Tip
Keputusan debounce sebaiknya diambil di tahap desain, bukan debugging: tanya dulu — tombol ini akan dibaca firmware dengan polling atau interrupt? Jika interrupt, pastikan hardware memberi sinyal yang "bersih" atau firmware wajib mendebounce. Menulis keputusan ini di interface spec menghilangkan seluruh kelas bug di masa depan.
Batasan tanggung jawab yang jelas mencegah "perang antar tim". Aturan umumnya:
| Aspek | Tanggung Jawab Hardware | Tanggung Jawab Firmware |
|---|---|---|
| Level logika & tegangan | Menentukan dan menjamin | Harus mematuhi |
| Pin muxing (fungsi alt) | Menentukan default yang dipakai | Tidak mengubah tanpa koordinasi |
| Waktu sinyal (timing) | Memberikan margin | Mematuhi timing diagram |
| Interrupt & debounce | Menyediakan sinyal sesuai spec | Mengimplementasikan sesuai spec |
| Proteksi & toleransi | Desain di batas aman | Tidak melanggar batas |
Aturan emasnya: setiap pin di papan punya satu pemilik yang jelas. Jika sebuah pin bisa dikonfigurasi dua fungsi alternatif, keputusan akhir ada di satu tempat — biasanya interface spec — bukan di kedua tim secara paralel.
Dokumen interface spec adalah hasil utama episode ini. Berikut template yang langsung bisa dipakai:
# Interface Spec: [Nama Board]
## 1. Ringkasan
MCU yang dipakai, versi, dan blok utama.
## 2. Tabel Pin (WAJIB untuk setiap pin yang dipakai)
| Pin MCU | Nama Net | Arah | Fungsi | Level | Pull | Catatan |
|---|---|---|---|---|---|---|
| PA9 | MCU_TX | Output | UART1 TX | 3.3V | - | 115200 baud |
| PA10 | MCU_RX | Input | UART1 RX | 3.3V | - | - |
| PA0 | BTN_MODE| Input | Tombol | Active-low | Pull-up int | Debounce 50ms |
| PB1 | LED_STATUS| Output| LED | Active-high | - | Max 10mA |
## 3. Interrupt & Event
| Sinyal | Pin | Edge | Prioritas | Konsumen |
|---|---|---|---|---|
| Tombol mode | PA0 | Falling | Tinggi | Aplikasi |
## 4. Konvensi
- Level logika: 3.3V CMOS
- Default semua unused pin: input pull-down
- Perubahan pin wajib koordinasi 2 arah + update dokumen
## 5. Change Log
| Tanggal | Perubahan | Oleh |
|---|---|---|
| 2026-08-16 | Inisialisasi | - |Setelah spec ditulis dan disepakati, setiap perubahan wajib melalui revisi — dan perubahan harus disepakati dua arah sebelum masuk ke skematik atau firmware. Ini yang membuat kedua tim bergerak sinkron.
Warning
Kesalahan paling mahal di boundary ini: firmware menyalakan pull-up internal pada pin yang hardware-nya sudah menarik ke level tertentu (atau sebaliknya). Sebelum board difabrikasi, review bersama tabel pin — hardware dan firmware membaca spec yang sama. Satu jam review ini menyelamatkan berminggu-minggu debugging setelah board jadi.
Pada episode 11 ini, kalian telah memahami bahwa interface hardware-firmware adalah kontrak yang harus ditulis, disepakati, dan dijaga kedua tim.
Inti yang harus dibawa pulang:
Di episode 12 selanjutnya kita memasuki dunia yang paling "ajaib" bagi pemula: RF & wireless design — antena, matching network, dan layout RF yang membuat perangkat terhubung dengan andal. Sampai jumpa di episode 12!