“Interrupt”
ahnaf.zainul.muttaqin@students.untidar.ac.id
A. Percobaan ini bertujuan agar mahasiswa memahami dan dapat mengerti cara kerja
dari Interupt
Pada mikrikontroler Arduino terdapat suatu fitur yang Bernama yang merupakan
singkatan dari Analog to Digital Converter. ADC ini yaitu sebuah metode yang dapat
mengkonversi data dalam bentuk analog menjadi dalam bentuk diskrit atau digital.
Proses pengkonvesian dari data analog menjadi digital diproses pada IC mikrokontroler
dengan menggunakan metode sampling (pencuplikan), kuantisasi(pengelompokan), dan
encoding(pengkodean). Resolusi yang digunakan pada Arduino yang menggunakan
ATMEGA328 adalah 10 bit sehingga memiliki nilai digital maksimal sebesar 1023
berdasarkan rumus (2n-1). Fungsi yang digunakan untuk membaca nilai analog yaitu
analogRead().
Dalam Arduino terdapat fungsi yang Bernama interrupt. Interupt sendiri
memungkinkan Arduino untuk merespon fungsi atau kejadian dari eksternal sambal
menjalankan sesuatu yang lain. Pada program Arduino yang sedang menjalankan dan
menampilkan beberapa fungsi, maka ketika interrupt terjadi, program utama akan
berhenti mengeksekusi dan fungsi yang lain akan dipanggil. Ketika fungsi tersebut
selesai maka program akan menjalankan fungsi utamanya dan melanjutkannya kembali.
Gambar 2. Interupt
Pada board Arduino uno interrupt hanya dapat digunakan pada pin tertentu, yaitu pin
digital 2 dan 3. Jenis interrupt pada ardunoa ada dua yaitu :
1. Rising Interrupt
Rising interupt artinnya interrupt akan dipicu ketika kondisi pada pin berubah
menjadi low ke high. Seperti yang diperlihatkan pada gambar 2 bahwa ketika
sinyal low berubah mejadi high maka disitu ada perubahan rising yang
mengakibatkan “Rising Interupt”.
2. Falling Interupt
Falling interupt artinnya interrupt akan dipicu ketika kondisi pada pin berubah
menjadi high ke low. Seperti yang diperlihatkan pada gambar 2 bahwa ketika
sinyal high berubah mejadi low maka disitu ada perubahan falling yang
mengakibatkan “Falling Interupt”.
Kode program diatas dimulai dengan pendefinisian variabel LED pada pin 10
dan variabel tombol pada pin 2 menggunakan syntax #define yang lebih hemat
memory. Selanjutnya ada deklarasi variabel led_nyala yang nilainya berupa false
menggunakan tipe data volatile Boolean. Volatile ini ini digunakan agar nilai dari
variabel led_nyala dapat diubah oleh sesuatu diluar kode dimana ia muncul, dalam
kasus ini perubahan akibat trigger dari falling interrupt.
Pada Void setup() terdapat fungsi digital IO berupa fungsi pinMode yang
digunakan untuk mengkonfigurasi variabel LED menjadi output dan variabel tombol
menjadi input. Selanjutnya ada fungsi interrupt yaitu attachInterrupt() untuk
menggunakan interrupt pada program. Paramater yang terdapat pada fungsi tersbut
yaitu digitalPinToInterrupt(2) untuk menggunakan pin digital 2 sebagai interrupt,
selanjutnya ada tombol_tekan yang merupakan fungsi ISR (Interupt Service Routine)
yang merupakan sebuah fungsi yang akan dieksekusi ketika interrupt telah dipicu,
dan yang terakhir merupalan FALLING yang merupakan jenis interrupt yang
digunakan yaitu interup yang akan dipicu ketika ada perubahan dari high ke low.
Pada fungsi void loop() kosong, maka selanjutnya yaitu deklarasi dari fungsi
ISR sebelumnya yaitu fungsi tombol tekan. Dalam fungsi tombol tekan terdapat
statement if else. Parameter dari if adalah variabel led_nyala, jika memenuhi kondisi
tersebut maka led_nyala = false dan menjalankan fungsi digitalWrite(LED,LOW)
sehingga led akan dalam keadaan mati. Selanjutnya pada statement else maka jika
memenuhi kondisi lainnya led_nyala = true dan akan menjalankan fungsi
digitalWrite(LED,HIGH) sehinggal led menjadi nyala.
B. Percobaan 2
Percobaan kedua pada praktikum kali ini yaitu mengubah kondisi dari LED
(High dan Low atau Nyala dan Mati) menggunakan Falling dan Rising interrupt.
Berbeda dengan percobaan pertama, percobaan du aini akan menggunakan dua psuh
button. Untuk merealisasikan hal tersebut maka dibuatlah kode program sebagai
berikut.
Gambar 6. Kode Program Percobaan 2
Kode program diatas dimulai dengan pendefinisian variabel LED pada pin 10,
variabel tombol_1 pada pin 2, dan variabel tombol_2 pada pin 3 menggunakan
syntax #define yang lebih hemat memory.
Pada Void setup() terdapat fungsi digital IO berupa fungsi pinMode yang
digunakan untuk mengkonfigurasi variabel LED menjadi output dan variabel
tombol_1 dan tombol_2 menjadi input. Selanjutnya ada fungsi interrupt yaitu
attachInterrupt() untuk menggunakan interrupt pada program. Paramater yang
terdapat pada fungsi tersbut yaitu digitalPinToInterrupt(2) dan
digitalPinToInterrupt(3) untuk menggunakan pin digital 2 dan 3 sebagai interrupt,
selanjutnya ada “LED_ON” dan “LED_OFF” yang merupakan fungsi ISR (Interupt
Service Routine) yang merupakan sebuah fungsi yang akan dieksekusi ketika
interrupt telah dipicu, dan yang terakhir merupakan FALLING yang merupakan jenis
interrupt yang digunakan yaitu interup yang akan dipicu ketika ada perubahan dari
high ke low. Sedangkan RISING merupakan interrupt yang akab dipicu ketika ada
perubahan sinyal dari low ke high.
Pada fungsi void loop() kosong, maka selanjutnya yaitu deklarasi dari fungsi
ISR sebelumnya yaitu fungsi “LED_ON” dan “LED_OFF”. Ketika interrupt pada pin
digital 2 yaitu FALLING interrupt dipicu maka akan menjalankan fungsi ISR
LED_ON yang didalam terdapat fungsi digitalWrite(LED, HIGH) sehingga led dapat
menyala. Sebalikanya ketika interrupt pada pin digital 3 yaitu RISING interrupt
dipicu maka akan menjalankan fungsi ISR LED_OFF() yang didalamnya terdapat
fungsi digitalWrite(LED, LOW) sehingga led mati.
Cara kerja dari rangkaian tersbut yaitu ketika tombol 1 ditekan maka Falling
interrupt akan terpicu sehingga LED akan menyala. Sebaliknya ketika tombol 2
ditekan maka Rising interrupt akan terpicu sehingga LED akan mati. Untuk Jelasnya
dapat dilihat pada rangkaian Arduino berikut.