1. Konsep Dasar GPIO
GPIO (General Purpose Input/Output) adalah pin pada mikrokontroler yang dapat dikonfigurasi sebagai input atau output sesuai kebutuhan program. Setiap pin GPIO dapat membaca sinyal digital (input) atau mengirim sinyal digital (output).
Karakteristik GPIO
- Bidirectional - Dapat sebagai input atau output
- Digital Only - Hanya sinyal HIGH (1) atau LOW (0)
- Configurable - Diatur melalui software
- Voltage Levels - Biasanya 5V atau 3.3V
- Current Limited - Arus maksimum 20-40mA per pin
Register GPIO pada AVR
| Register | Fungsi | Contoh | Keterangan |
|---|---|---|---|
| DDRx | Data Direction Register | DDRB, DDRC, DDRD | Mengatur arah pin (0=input, 1=output) |
| PORTx | Data Output Register | PORTB, PORTC, PORTD | Mengatur output level (HIGH/LOW) |
| PINx | Data Input Register | PINB, PINC, PIND | Membaca status input pin |
| Pull-up Resistor | Internal Pull-up | PORTx dengan DDRx=0 | Mengaktifkan pull-up internal |
Tips Konfigurasi GPIO
- Selalu set DDRx sebelum menggunakan PORTx atau PINx
- Gunakan bit manipulation untuk kontrol individual pin
- Untuk input, aktifkan pull-up resistor jika diperlukan
- Perhatikan current rating untuk menghindari kerusakan
2. Simulator Kontrol LED
Simulator Kontrol LED dengan GPIO
Klik pada pin untuk mengubah konfigurasinya, lalu gunakan kontrol untuk mengatur LED
ATMega328P - PORT B
Kontrol LED
Pentingnya Current Limiting Resistor
LED membutuhkan resistor pembatas arus untuk mencegah kerusakan. Tanpa resistor, arus yang mengalir akan terlalu besar dan merusak LED maupun pin mikrokontroler. Nilai resistor biasanya 220-470 ohm untuk LED standar.
3. Pemrograman LED Dasar
Program LED Blink Sederhana
Penjelasan Kode
Bit Manipulation pada AVR
DDRB |= (1 << DDB5)- Set bit 5 DDRB menjadi 1 (output)PORTB |= (1 << PORTB5)- Set bit 5 PORTB menjadi 1 (HIGH)PORTB &= ~(1 << PORTB5)- Clear bit 5 PORTB menjadi 0 (LOW)_delay_ms(500)- Delay 500 milidetik
Variasi Program LED
4. LED Pattern Generator
Generator Pola LED 8-bit
Nilai PORTB: 0x00 | Binary: 00000000
5. Best Practices GPIO Programming
Tips dan Trik Pemrograman GPIO
Praktik Terbaik
- Initialization - Selalu inisialisasi DDRx sebelum menggunakan PORTx
- Bit Manipulation - Gunakan operasi bit untuk kontrol individual pin
- Pull-up Resistors - Aktifkan untuk input yang membutuhkan state default HIGH
- Current Limiting - Selalu gunakan resistor untuk LED dan komponen output
- Debouncing - Implementasikan software debouncing untuk input mekanis
Common Mistakes to Avoid
Kesalahan Umum
- Lupa mengatur DDRx sebelum menggunakan pin
- Melebihi current rating pin (max 20-40mA)
- Tidak menggunakan resistor current limiting untuk LED
- Menggunakan PINx register untuk output
- Tidak implement debouncing untuk push buttons
#include
#include
// Definisi pin untuk kemudahan maintenance
#define LED_PIN PB5
#define BUTTON_PIN PB0
// Inisialisasi GPIO
void gpio_init() {
// Set LED pin sebagai OUTPUT
DDRB |= (1 << LED_PIN);
// Set button pin sebagai INPUT dengan pull-up
DDRB &= ~(1 << BUTTON_PIN);
PORTB |= (1 << BUTTON_PIN);
}
// Fungsi debouncing sederhana
uint8_t button_pressed() {
if (!(PINB & (1 << BUTTON_PIN))) {
_delay_ms(50); // Debounce delay
if (!(PINB & (1 << BUTTON_PIN))) {
return 1;
}
}
return 0;
}
int main(void) {
gpio_init();
while(1) {
if (button_pressed()) {
// Toggle LED
PORTB ^= (1 << LED_PIN);
// Tunggu sampai button dilepas
while (!(PINB & (1 << BUTTON_PIN)));
_delay_ms(50); // Debounce release
}
}
return 0;
}
Latihan Praktikum
Tugas untuk menguasai pemrograman GPIO dan kontrol LED
Tugas 1: Program LED Dasar
Buat program untuk mengontrol LED dengan berbagai pola:
- LED blink dengan periode dapat diatur
- Running light dari kiri ke kanan dan sebaliknya
- Binary counter 0-255 dengan LED
- Knight rider pattern (seperti KITT car)
Tugas 2: Kontrol LED dengan Input
Implementasikan kontrol LED menggunakan push button:
- Toggle LED dengan single button press
- Change LED pattern dengan multiple buttons
- Adjust LED brightness menggunakan PWM
- Implementasikan debouncing untuk button
Tugas 3: Project Mini - Traffic Light
Buat simulasi traffic light dengan 3 LED (Merah, Kuning, Hijau):
- Implementasikan sequence: Merah -> Merah+Kuning -> Hijau -> Kuning -> Merah
- Tambahkan pedestrian crossing button
- Buat timing yang dapat disesuaikan
- Tambahkan mode blink untuk maintenance