Raspberry Pi Pico adalah microcontroller board yang didukung oleh chip RP2040, menawarkan fleksibilitas tinggi untuk proyek IoT, robotika, dan embedded system. Beli sekarang Raspberry Pi Pico dan mulai proyek impianmu dengan perangkat yang cepat dan efisien di sini. Salah satu fitur penting yang sering digunakan dalam pemrograman microcontroller adalah interrupt. Interrupt memungkinkan microcontroller untuk merespons suatu peristiwa secara cepat tanpa harus terus-menerus memeriksa status input (polling). Pada artikel ini, kita akan mempelajari dasar-dasar interrupt di Raspberry Pi Pico, mulai dari pengertian, cara kerja, hingga contoh implementasi menggunakan MicroPython dan C/C++.
Apa itu Interrupt?
Interrupt (interupsi) adalah sinyal yang dikirim ke microcontroller untuk menghentikan sementara eksekusi program utama dan menjalankan fungsi khusus (Interrupt Service Routine/ISR) sebagai respons terhadap suatu peristiwa eksternal atau internal.
1. Sinyal yang Menghentikan Sementara Program Utama
- Interrupt adalah sinyal khusus yang memberitahu mikrokontroler bahwa ada sesuatu yang perlu ditangani segera.
- Saat sinyal interrupt datang, program utama dihentikan sementara, dan mikrokontroler fokus menangani hal itu.
2. Direspons dengan Menjalankan ISR (Interrupt Service Routine)
- ISR adalah fungsi khusus yang ditulis untuk menangani kejadian interrupt.
- Setelah ISR selesai dijalankan, mikrokontroler kembali ke program utama di titik terakhir yang ditinggalkan.
3. Bisa Disebabkan oleh Peristiwa Eksternal atau Internal
- Peristiwa eksternal: seperti tombol ditekan, sensor mendeteksi gerakan, sinyal dari pin GPIO.
- Peristiwa internal: seperti timer habis, komunikasi serial selesai, overflow counter.
4. Meningkatkan Efisiensi Program
- Tanpa interrupt, program harus terus menerus memeriksa status perangkat (polling).
- Dengan interrupt, CPU hanya merespons saat benar-benar diperlukan, jadi lebih hemat daya dan efisien.
5. Contoh Sederhana
Misalnya, kamu membuat proyek alarm:
- Saat sensor PIR mendeteksi gerakan, interrupt aktif → ISR berbunyi alarm.
- Program utama tetap bisa membaca suhu atau mengirim data, tanpa harus selalu cek sensor gerak.
Jenis-jenis Interrupt di Raspberry Pi Pico
1. External Interrupt
- Dihasilkan dari perubahan sinyal pada pin GPIO, misalnya saat tombol ditekan atau sensor memberikan sinyal HIGH/LOW.
- Contoh kasus:
- Tombol ditekan untuk menyalakan lampu.
- Sensor gerak (PIR) mendeteksi aktivitas.
- Kapan digunakan:
- Ketika ingin merespons input pengguna secara langsung dan cepat.
- Kelebihan:
- Hemat daya karena CPU tidak perlu mengecek status pin terus-menerus.
- MicroPython: Didukung melalui Pin.irq().
2. Timer Interrupt
- Dipicu oleh timer internal setelah waktu tertentu berlalu.
- Contoh kasus:
- Membaca sensor setiap 1 detik otomatis.
- Menyalakan atau mematikan beban secara berkala.
- Kapan digunakan:
- Untuk tugas-tugas periodik (berulang) tanpa mengganggu alur program utama.
- Kelebihan:
- Cocok untuk pengukuran waktu, delay presisi, atau sistem penjadwalan ringan.
3. Hardware Interrupt
- Dipicu oleh peristiwa dari modul internal, seperti UART, SPI, atau PWM.
- Contoh kasus:
- UART menerima data serial dari modul lain (misalnya sensor GPS).
- PWM menyelesaikan satu siklus sinyal.
- Kapan digunakan:
- Ketika ingin merespons cepat dari komunikasi data atau sinyal PWM.
- Kelebihan:
- Membantu menghindari kehilangan data dari perangkat eksternal.
Cara Kerja Interrupt di Raspberry Pi Pico
Ketika interrupt terjadi:
1. Microcontroller menyimpan konteks program yang sedang berjalan (register, program counter).
2. Melompat ke fungsi ISR (Interrupt Service Routine) yang telah ditentukan.
3. Setelah ISR selesai, program utama dilanjutkan dari titik sebelumnya.
Keuntungan menggunakan interrupt:
- Menghemat daya karena tidak perlu polling.
- Respon lebih cepat terhadap event eksternal.
- Efisiensi CPU karena tidak terus-menerus memeriksa input.
Contoh Penggunaan Interrupt di Raspberry Pi Pico dengan MicroPython
Berikut ini contoh sederhana menggunakan interrupt pada GPIO Raspberry Pi Pico dengan MicroPython:
1. Interrupt dengan Tombol (Button Press)
Kita akan membuat program yang menyalakan/mematikan LED saat tombol ditekan menggunakan interrupt.
Komponen yang Dibutuhkan:
- Raspberry Pi Pico
- LED
- Resistor 220Ω
- Push button
- Kabel jumper
Rangkaian:
- Hubungkan LED ke GPIO 15 melalui resistor.
- Hubungkan push button ke GPIO 14 dan 3.3V.
- Gunakan pull-down resistor (bisa diaktifkan secara software).
Kode MicroPython:
from machine import Pin
import time
# Konfigurasi LED dan tombol
led = Pin(15, Pin.OUT)
button = Pin(14, Pin.IN, Pin.PULL_DOWN)
# Variabel status LED
led_state = False
Fungsi Interrupt Service Routine (ISR)
def button_pressed(pin):
global led_state
led_state = not led_state
led.value(led_state)
print("Tombol ditekan! LED:", "ON" if led_state else "OFF")
# Set interrupt pada rising edge (tombol ditekan)
button.irq(trigger=Pin.IRQ_RISING, handler=button_pressed)
print("Program utama berjalan...")
while True:
time.sleep(1) # Program utama tetap berjalan
Penjelasan Kode:
- `button.irq()` mengatur interrupt pada pin GPIO 14 dengan trigger `IRQ_RISING` (saat tombol ditekan).
- Ketika tombol ditekan, fungsi `button_pressed()` dipanggil dan mengubah status LED.
- Program utama tetap berjalan tanpa perlu memeriksa status tombol terus-menerus.
Ingin langsung praktek? Beli sekarang Raspberry Pi Pico dan mulai eksperimenmu klik di sini.
Contoh Interrupt di Raspberry Pi Pico dengan C/C++
Jika Anda menggunakan C/C++ dengan SDK Raspberry Pi Pico, berikut contoh implementasi interrupt.
1. Interrupt GPIO dengan Tombol
Kode C:
#include "pico/stdlib.h"
#include "hardware/gpio.h"
#define LED_PIN 15
#define BUTTON_PIN 14
volatile bool led_state = false;
// Interrupt Handler
void gpio_callback(uint gpio, uint32_t events) {
if (gpio == BUTTON_PIN) {
led_state = !led_state;
gpio_put(LED_PIN, led_state);
printf("Tombol ditekan! LED: %s\n", led_state ? "ON" : "OFF");
}
}
int main() {
stdio_init_all();
gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, GPIO_OUT);
gpio_init(BUTTON_PIN);
gpio_set_dir(BUTTON_PIN, GPIO_IN);
gpio_pull_down(BUTTON_PIN);
// Set interrupt callback
gpio_set_irq_enabled_with_callback(BUTTON_PIN, GPIO_IRQ_EDGE_RISE, true, &gpio_callback);
printf("Program utama berjalan...\n");
while (1) {
tight_loop_contents(); // Program utama
}
}
Penjelasan Kode:
- `gpio_set_irq_enabled_with_callback()` mengaktifkan interrupt pada `BUTTON_PIN` dengan trigger `GPIO_IRQ_EDGE_RISE`.
- Ketika tombol ditekan, fungsi `gpio_callback()` dieksekusi.
- `volatile` digunakan karena variabel `led_state` diubah dalam ISR.
Tips dan Best Practice Menggunakan Interrupt
1. Minimalkan Beban di ISR
- Hindari delay atau operasi berat di ISR.
- Gunakan flag dan proses di loop utama jika perlu.
2. Debouncing untuk Tombol
- Interrupt bisa terpicu berulang kali karena noise (bouncing).
- Gunakan timer atau delay sederhana untuk debouncing.
Contoh Debouncing di MicroPython:
from machine import Pin, Timer
debounce_timer = Timer()
def button_pressed(pin):
debounce_timer.init(mode=Timer.ONE_SHOT, period=200, callback=lambda t: None)
# Logika interrupt
3. Hindari Shared Variable tanpa Proteksi
- Jika variabel diakses dari ISR dan program utama, gunakan mekanisme seperti disable interrupt sementara atau atomic operation.
Jangan lewatkan kesempatan belajar langsung! Beli sekarang E-book Raspberry Pi Pico dan mulailah eksplorasi interrupt di dunia nyata. Dengan hardware yang tepat, belajar mikrokontroler jadi jauh lebih menyenangkan dan aplikatif.
Baca juga : Perbedaan Raspberry Pi Pico dan Raspberry Pi Pico W: Edukasi Dasar untuk Pemula
Siap Untuk Membuat Proyek Impianmu Menjadi Kenyataan?
Klik di sini untuk chat langsung via WhatsApp dan dapatkan dukungan langsung dari tim ahli kami!
0 on: " Belajar Dasar Interrupt di Raspberry Pi Pico: Pengertian dan Contoh Penggunaan"