Anda di halaman 1dari 12

PRAKTIKUM SISTEM MIKROKONTROLLER – MODUL 7

“Interrupt”

Ahnaf Zainul Muttaqin – 1910501062

Jurusan Teknik Elektro, Fakultas Teknik, Universitas Tidar

Jalan Kapten Suparman, 39, Magelang, Jawa Tengah, 56116

ahnaf.zainul.muttaqin@students.untidar.ac.id

7.1 Tujuan Percobaan

A. Percobaan ini bertujuan agar mahasiswa memahami dan dapat mengerti cara kerja
dari Interupt

7.2 Dasar Teori


Arduino UNO R3 merupakan suatu board yang menggunakan mikrokontroler
Atmega328 sebagai otaknya. Modul ini sudah dilengkapi dengan berbagai hal yang
dibutuhkan untuk mendukung mikrokontroler untuk bekerja, tinggal sambungkan ke
power supply atau sambungkan melalui kabel USB ke PC . Arduino Uno R3 ini
memiliki 14 pin digital dengan 6 pin yang dapat digunakan sebagai PWM, 6 pin analog,
16 MHz osilator kristal, port usb konektor, konektor sumber tegangan, header ICSP, dan
tombol reset. Arduino memiliki kelebihan tersendiri dibanding board mikrokontroler
yang lain selain bersifat open source, arduino juga mempunyai bahasa pemrogramannya
sendiri yang berupa bahasa C. Bentuk board Arduino uno dapat dilihat pada gambar 1.
Gambar 1. Arduino Uno R3

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”.

7.3 Hasil dan Pembahasan


A. Percobaan 1
Percobaan pertama pada praktikum kali ini yaitu mengubah kondisi dari LED
(High dan Low atau Nyala dan Mati) menggunakan Falling interrupt. Untuk
merealisasikan hal tersebut maka dibuatlah kode program sebagai berikut.

Gambar 3. Kode Program Percobaan 1

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.

Gambar 4. Rangkaian Simulasi Percobaan 1


Gambar 5. Rangkaian Percobaan 1

Rangkaian di atas akan mengendalikan kondisi led (high dan low)


menggunakan falling interrupt yang di trigger oleh pull down resistor. Keadaan awal
pull down resistor yaitu low sehingga ketika push button ditekan akan langsung
mentrigger falling interrupt. Varibel led_nyala awalnya berupa false dan led mati
akan diubah menjadi true dan led nyala oleh falling interrupt. Perubahan value dari
variabel led_nyala ini karena variabel tersebut menggunakan tipe data volatile
sehingga valuenya dapat diubah oleh hal diluar kode.

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.

Gambar 7. Rangkaian Simulasi Percobaan 2

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.

1. Tombol 1 ditekan LED menyala


Ketika tombol 1 ditekan maka maka akan memicu Falling Interrupt
sehingga led akan menyala.
Gambar 8. Rangkaian Percobaan 2 LED menyala

2. Tombol 2 ditekan LED mati


Ketika tombol 2 ditekan maka akan memicu Rising Interrupt sehingga
led akan mati.

Gambar 9. Rangkaian Percobaan 2 LED mati


7.4 Tugas
Tugas pada praktikum ini yaitu mengaplikasikan delay pada interrupt, dimana delay /
interrupt tidak akan berjalan semestinya, membuat perbandingan antara delay dan delay
microsecond yang diterapkan pada interuupt. Untuk kode program yang digunakan sama
hanya berbeda pada jenis delay yang digunakan yaitu delay biasa dan
delayMicroseconds.

Gambar 10. Kode Program Tugas


Kode program diatas dimulai dengan pendefinisian variabel LED_1, LED_2,
dan LED_3 pada pin 10, 11 ,dqn 13 dan variabel tombol_1 dan tombol_2 pada pin 2
dan 3 menggunakan syntax #define yang lebih hemat memory.
Pada Void setup() terdapat fungsi digital IO berupa fungsi pinMode yang
digunakan untuk mengkonfigurasi variabel LED_1, LED_2, dan LED_3 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 “variasi1” dan “variasi2” yang merupakan fungsi ISR (Interupt
Service Routine) yang merupakan sebuah fungsi yang akan dieksekusi ketika
interrupt telah dipicu, dan yang terakhir merupakan RISING yang merupakan jenis
interrupt yang digunakan yaitu interup yang akan dipicu ketika ada perubahan dari
low ke high.
Pada fungsi void loop() kosong, maka selanjutnya yaitu deklarasi dari fungsi
ISR sebelumnya yaitu fungsi “variasi1” dan “variasi2”. Ketika interrupt pada pin
digital 2 yaitu RISING interrupt dipicu maka akan menjalankan fungsi ISR variasi1
yang didalam terdapat fungsi digitalWrite(LED_1, HIGH) dengan
delayMicroseconds(16000) dan seterusnya sampai LED_3. Sebalikanya ketika
interrupt pada pin digital 3 yaitu RISING interrupt dipicu maka akan menjalankan
fungsi ISR variasi2 yang didalamnya terdapat fungsi digitalWrite(LED_1, LOW)
dengan delayMicroseconds(16000) dan seterusnya sampai LED_3.

Gambar 11. Rangkaian Simulasi Tugas


Umumnya, ISR harus sesingkat dan secepat mungkin. Jika kode program
menggunakan beberapa ISR, maka hanya satu yang dapat dijalankan pada satu
waktu, interrupt lainnya akan dieksekusi setelah yang sebelumya selesai dalam
urutan yang bergantung pada prioritas yang mereka miliki. millis() bergantung pada
interupsi untuk menghitung, sehingga tidak akan pernah bertambah di dalam ISR.
Karena delay() membutuhkan interupsi untuk bekerja, maka tidak akan berfungsi jika
dipanggil di dalam ISR. micros() bekerja pada awalnya tetapi akan mulai berperilaku
tidak menentu setelah 1-2 ms. delayMicroseconds() tidak menggunakan penghitung
apa pun, sehingga akan berfungsi seperti biasa. Untuk rangkaian Arduino dapat
dilihat pada gambar berikut.
1. Tombol 1 ditekan LED menyala

Gambar 12. Rangkaian Percobaan 2 LED menyala

2. Tombol 2 ditekan LED mati


Gambar 13. Rangkaian Percobaan 2 LED mati
7.5 Kesimpulan
Berdasarkan prikatikum mikrokontroler ke 7 ini dapat disimpilkan bahwa interrupt
dapat dilakukan dengan menambahkan push button dengan tipe interruptnya yaitu
Falling Interrupt dan Rising Interrupt. Selain itu penggunaan delay pada interrupt tidak
dapat dilakukan dan hanya dapat menggunakan delayMicrosecond() karena delay()
membutuhkan interupsi untuk bekerja, sehingga tidak akan berfungsi jika dipanggil di
dalam ISR.

7.6 Daftar Pustaka


[1] 2019, “Tipe Data Pemrograman Arduino IDE | Belajar Arduino dari Dasar”,
https://www.robotikindonesia.com/2019/11/tipe-data-pemrograman-arduino-
ide.html, diakses pada 17 September 2021 pukul 08.23.
[2] Jufrika, 2017, “Mengetahui Tipe Data Pada Arduino dan Contohnya”,
https://www.jufrika.com/2017/10/tipe-data-pada-arduino-dan-contohnya.html,
diakses pada 17 September 2021 pukul 08.25
[3] Muhammad, Bahasa Pemrograman Arduino, Yogyakarta : K-Media, 2020
[4] Richard, Dasar Elektronika, Yogyakarta : ANDI Yogyakarta, 2004
[5] Pauzan, 2021, “Interrupt Pada Arduino”, http://pauzan.com/interrupt-pada-
arduino/, diakses pada 20 November 2021 pukul 19.11

Anda mungkin juga menyukai