Anda di halaman 1dari 12

LAPORAN PRAKTIK SISTEM MIKROKONTROLER

TP10. APLIKASI INTERRUPT

Kode Kelompok Nama


1. Lusi Damayanti (PIC)
2. Omar Rais D.S
B3 3. Sheren Regina P.

Tujuan Praktik :
A.Mahasiswa mampu menganalisis rangkaian antarmuka dan program Arduino Uno yang menggunakan Inte

B.Mahasiswa mampu membuat sendiri aplikasi pengontrolan berbasis Arduino Uno yang menggunakan Inter

TP10-1. Basic Interrupt


A. Jelaskan cara kerja Interrupt pada Arduino Uno.
Interrupt menyebabkan mikrokontroler menghentikan sementara eksekusi instruksi
yang sedang berjalan untuk menangani fungsi khusus yang disebut Interrupt Service
Routine (ISR). Setelah ISR dijalankan, mikrokontroler akan melanjutkan kembali
instruksi yang dihentikan sebelumnya.
Interrupt pada Arduino adalah suatu keadaan dimana saat pemicu program interrupt
dipicu baik secara eksternal ataupun internal, program interrupt akan menghentikan
sejenak program yang sedang dijalankan oleh arduino dan melaksanakan program
interrupt tersebut. Interrupt dapat digunakan pada Arduino dengan menambahkan
program berikut pada program yang ingin kita berikan fungsi interrupt:
attachInterrupt(interrupt, function, mode)
attachInterrupt memiliki maksud bahwa kita akan memasang interrupt. Kemudian
pada bagian “interrupt” dapat kita ganti dengan “0” jika ingin menggunakan pin
interrupt 0 pada arduino uno atau “1” jika ingin menggunakan pin interrupt 1 pada
arduino uno. Arduino uno memiliki 2 pin interrupt yaitu INT0 pada pin 2 digital dan
INT1 pada pin 3 digital. Di bagian function dapat diisi dengan program yang ingin kita
jalankan saat pin interrupt itu dipicu. Yang terakhir adalah mode dimana arduino
memiliki 4 keadaan yang dapat memicu interrupt, yaitu:
1. LOW = interrupt akan dieksekusi terus menerus selama pin membaca logika LOW
2. RISING = interrupt akan dieksekusi jika terjadi perubahan nilai pembacaan dari
LOW ke HIGH(dieksekusi 1 kali pas terjadi perubahan).
3. CHANGE = interrupt akan dieksekusi jika terjadi perubahan nilai pembacaan, baik
itu dari HIGH ke LOW ataupun LOW ke HIGH (dieksekusi 1 kali pas terjadi perubahan).

1
4. FALIING = interrupt akan dieksekusi jika terjadi perubahan nilai pembacaan dari
HIGH ke LOW (dieksekusi 1 kali pas terjadi perubahan)

B. Jelaskan kelebihan metode interrupt dibandingkan polling.


Polling adalah prosesor tidak terus menerus menanyakan status dari peripheral
tetapi peripheral yang akan memberitahukan statusnya sekarang (menginterupsi
prosesor). Bedanya dengan metode interrupt, sementara menunggu peripheral
menyelesaikan tugasnya, prosesor dapat melakukan instruksi-instruksi lain. Jika
peripheral memberikan sinyal interupsi pada prosesor, maka prosesor akan
menyelesaikan instruksi yang sedang dikerjakannya sekarang, kemudian menyimpan
semua state pada instruksi yang sedang dikerjakannya saat ini, kemudian
mengeksekusi suatu rutin yang dinamakan Interrupt Service Routine (ISR) atau
interrupt handler. Saat ISR selesai, maka prosesor kembali ke state sebelum
interupsi. Kelebihan interrupt adalah interrupt lebih menghemat resource
dibandingkan polling, tapi kekurangannya adalah interrupt memiliki jeda waktu
(overhead) yang lebih lama dibanding polling. Kelebihan lain dai interrupt yaitu
ketika ada proses lain yang masuk, akan disanggah dan difilter proses mana yang
akan dikerjakan terlebih dahulu yang memungkinkan interrupt bisa multitasking,
dimana hal ini berbeda dibandingan polling yang hanya menyelesaikan satu tugas
saja sehingga prosesnya akan begitu lama.
C. Jelaskan hasil eksekusi program TP10-1.
Pada program Basic Interrupt, LED hijau akan terus melakukan looping dengan delay
0,1 detik sehingga LED hijau terus menyala berkedap-kedip. Lalu, apabila push button
switch ditekan, LED merah akan menyala, dan jika push button switch ditekan
kembali, LED merah kembali tidak menyala, dan begitu seterusnya.

D. Tuliskan dan analisislah sketch (code breakdown) TP10-1.


 Pertama-tama mendeklarasikan pin yang digunakan beserta variablenya. Pada
ISR menggunakan variable ledState untuk menyimpan status pin. Pada program
ini, ledState diinisialisasi dengan menggunakan variable volatile int karena
volatile adalah C keyword yang diterapkan pada variable yang berarti bahwa nilai
ledState dapat berubah dan berubah pada sesuatu yang program tidak dapat
prediksikan. Volatile juga bermanfaat untuk melindungi dari optimasi compiler
yang tidak disengaja.
//Program P10-2: Basic Interrupt

#define greenPin 13
#define redPin 12
#define buttonPin 2

volatile int ledState = 0;

2
 Pada void setup() digunakan untuk inisialisasi yang hanya dijalankan sekali di
awal program. pinMode mendefinisikan pin yang digunakan sebagai
keluaran/masukan. Pin LED sebagai output dan pin button sebagai input. Fungsi
attachInterrupt() digunakan untuk menentukan jenis interrupt, ISR yang
dipanggil, dan mode operasi pulsa sinyal interrupt yang dideteksi. Cara
menuliskan statement berdasarkan sintaksnya yaitu:
 attachInterrupt(digitalPinToInterrupt(pin), ISR, mode). Dalam hal ini, mode yang
digunakan adalah RISING yang berarti interrupt akan dieksekusi jika terjadi
perubahan nilai pembacaan dari LOW ke HIGH (dieksekusi 1 kali pas terjadi
perubahan).
void setup()
{ pinMode(greenPin,
OUTPUT); pinMode(redPin,
OUTPUT);
pinMode(buttonPin, INPUT);
attachInterrupt(digitalPinToInterrupt(buttonPin), toggleISR, RISING);
//attachInterrupt(0, toggleISR, RISING); //Interrupt pin D2
}

 Pada void loop() digunakan untuk proses pengulangan program pada sebuah
masukan atau keluaran. greenPin akan dieksekusi LOW sehingga LED hijau tidak
menyala dengan delay 0,1 detik lalu greenPin dieksekusi HIGH sehingga LED
hijau menyala dengan delay 0,1 detik.
void loop()
{ digitalWrite(greenPin,
LOW); delay(100);
digitalWrite(greenPin, HIGH);
delay(100);
}

 Pada void toggleISR() merupakan instruksi interrupt menggunakan toggle ISR


yang menyebabkan mikrokontroler menghentikan sementara eksekusi instruksi
yang sedang berjalan. Sehingga apabila ledState dibaca, maka LED merah akan
dieksekusi.
void toggleISR()
{
ledState = !ledState;
digitalWrite(redPin, ledState);
}

3
TP10-2. Counter Interrupt
A. Jelaskan mengapa pada program P10-2 digunakan mode interrupt “RISING”.
Mode interrupt RISING digunakan karena mode interrupt ini akan dieksekusi jika
terjadi perubahan nilai pembacaan dari LOW ke HIGH. Program ini membaca nilai
LOW ke HIGH dari push button switch.

B. Jelaskan mengapa pada program P10-2, switch menggunakan pin D2 dan D3.
Pada program P10-2, switch menggunakan pin D2 dan D3 karena Arduino UNO
memiliki 2 pin interrupt yaitu INT0 pada pin 2 digital dan INT1 pada pin 3 digital.
Program ini menggunakan 2 proses interrupt yang dilakukan (ISR) yaitu button2ISR
dan button3ISR.

C. Jelaskan hasil eksekusi program TP10-2.


Setelah program dijalankan, pertama-tama pada LCD akan menampilkan teks
“Program TP10-2” dan “CounterInterrupt” selama 2 detik, setelah itu LCD akan
menampilkan proses counter up dan jika kita menekan push button switch yang
pertama maka pada LCD menampilkan proses counter up dan juga teks “Interrupt 1”.
Dan jika push button switch yang kedua ditekan, maka pada LCD menampilkan
proses counter up yang sedang berjalan, teks “Interrupt 2” dan led merah akan
menyala.
D. Tuliskan dan analisislah sketch (code breakdown) TP10-2.
// Program TP10-2 : Counter Interrupt
 Pertama-tama, menggunakan library `LiquidCrystal.h` untuk mengontrol
tampilan pada LCD Karakter yang digunakan. Statement LiquidCrystal
lcd(8,9,4,5,6,7); digunakan sebagai inisialisasi (konfigurasi) library untuk LCD
karakter sesuai pin yang digunakan yaitu untuk RS pada pin 8, EN pada pin 9, D4
pada pin 4, D5 pada pin 5, D6 pada pin 6, D7 pada pin 7. Kemudian,
mendeklarasikan variable yang bersifat konstanta untuk pin push button switch
1, pin push button switch 2, dan pin led merah. Variabel volatile int output =
LOW; digunakan untuk kondisi awal dari output yaitu LOW dan variable i dimulai
dari 0.
#include<LiquidCrystal.h>
LiquidCrystal lcd(8,9,4,5,6,7);

const int buttonPin2 = 2;


const int buttonPin3 = 3;
const int ledPin = 13;

volatile int output = LOW;


int i = 0;

 Pada fungsi setup() akan digunakan untuk inisialisasi yang hanya dijalankan
sekali di awal program. Statement lcd.begin(16,2) digunakan untuk menentukan
kolom dan baris dari lcd yang akan digunakan yaitu kolom 16 dan baris 2.

4
lcd.setCursor(0,0) digunakan untuk meng-set posisi awal kursor di awali dengan
kolom 0 dan baris 0. Lalu, statement lcd.print("Program TP10-2"); digunakan
untuk menampilkan teks “Program TP10-2” pada LCD. Lalu, diatur posisi kolom 0
dan baris 1 dan menampilkan teks “CounterInterrupt”. Statement
pinMode(ledPin,OUTPUT); digunakan untuk mengatur pin led merah sebagai
output. Kemudian statement attachInterrupt(digitalPinToInterrupt(buttonPin2),
button2ISR, RISING); digunakan sebagai fungsi melakukan proses interrupt yang
terdiri dari deklarasi pin yang digunakan yaitu pin D2, nama ISR (Interrupt Service
Routine) yaitu button2ISR, dan jenis mode yang digunakan yaitu RISING.
Statement attachInterrupt(digitalPinToInterrupt(buttonPin3), button3ISR,
RISING); digunakan sebagai fungsi melakukan proses interrupt yang terdiri dari
deklarasi pin yang digunakan yaitu pin D3, nama ISR (Interrupt Service Routine)
yaitu button3ISR, dan jenis mode yang digunakan yaitu RISING.
void setup()
{
lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.print("Program TP10-2");
lcd.setCursor(0,1);
lcd.print("CounterInterrupt");
delay(2000);
lcd.clear();
pinMode(ledPin, OUTPUT);
attachInterrupt(digitalPinToInterrupt(buttonPin2), button2ISR, RISING);
attachInterrupt(digitalPinToInterrupt(buttonPin3), button3ISR, RISING);
}

 Pada fungsi loop(), fungsi ini akan dijalankan setelah setup (fungsi void setup)
selesai. Setelah dijalankan satu kali fungsi ini akan dijalankan lagi, dan lagi secara
terus menerus sampai catu daya (power) dilepaskan. lcd.clear() digunakan untuk
hapus layar tampilan pada LCD. Lalu, LCD akan menampilkan teks “COUNTER : “
dan akan menampilkan nilai i sebagai angka counter up dan di delay 1 s. Statement
digitalWrite(ledPin, output); digunakan untuk mengatur pin led merah sebagai
output.
void loop()
{
lcd.clear();
lcd.print("COUNTER : ");
lcd.print(i);
i++;
delay(1000);
digitalWrite(ledPin, output);
}

5
 Pada fungsi button2ISR() merupakan proses interrupt service routine saat
keadaan push button switch 1 ditekan maka pada LCD akan menampilkan teks
“Interrupt 1” pada kolom 0 dan baris 1.
void button2ISR()
{
output = LOW;
lcd.setCursor(0,1);
lcd.print("Interrupt 1");
}

 Pada fungsi button3ISR() merupakan proses interrupt service routine saat


keadaan push button switch 2 ditekan maka pada LCD akan menampilkan teks
“Interrupt 2” pada kolom 0 dan baris 1 dan lampu led merah akan menyala.
void button3ISR()
{
output = HIGH;
lcd.setCursor(0,1);
lcd.print("Interrupt 2");
}

TP10-3. Motion Interrupt


A. Gambarkan rangkaian skematik P10-3 jika PIR diganti push button switch dan modenya
“FALLING”.

B. Jelaskan kegunaan fungsi serialPrintISR() pada program P10-3.


Pada fungsi serialPrintISR() digunakan sebagai proses interrupt service routine yang
menyebabkan mikrokontroler menghentikan sementara eksekusi instruksi yang
sedang berjalan, saat keadaan sensor PIR itu HIGH maka pada virtual terminal akan
menampilkan teks “Interrupt” dan led merah akan menyala.

C. Jelaskan hasil eksekusi program TP10-3.

6
Setelah program dijalankan, jika keadaan logic state sensor PIR “0” tidak akan
menampilkan apapun pada virtual terminal dan led merah tidak menyala
dikarenakan tidak ada proses interrupt, sedangkan jika logic state sensor PIR “1”
terjadi proses interrupt yaitu pada virtual terminal akan menampilkan teks
“Interrupt” dan led merah akan menyala.

D. Tuliskan dan analisislah sketch (code breakdown) TP10-3.


// Program TP10-3 : Motion Interrupt
 Pertama-tama, mendeklarasikan variableyang bersifat konstanta untuk pin led
merah yaitu pin D13, dan pin sensor PIR yaitu pin D2. Variabel volatile int
motionState = LOW; digunakan untuk kondisi awal dari sensor PIR atau gerakan
yaitu LOW.
const byte ledPin = 13;
const byte pirPin = 2;
volatile byte motionState = LOW;

 Pada fungsi setup() akan digunakan untuk inisialisasi yang hanya dijalankan
sekali di awal program. Serial begin digunakan untuk mengatur kecepatan data
untuk komunikasi serial (bit/s). Statement pinMode(ledPin,OUTPUT); digunakan
untuk mengatur pin led merah sebagai output. Dan statement
attachInterrupt(digitalPinToInterrupt(pirPin), serialPrintISR, RISING); digunakan
sebagai fungsi melakukan proses interrupt yang terdiri dari deklarasi pin sensor
yang digunakan yaitu pin D2, nama ISR (Interrupt Service Routine) yaitu
serialPrintISR, dan jenis mode yang digunakan yaitu RISING.
void setup()
{
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
attachInterrupt(digitalPinToInterrupt(pirPin), serialPrintISR, RISING);
}

 Pada fungsi loop(), fungsi ini akan dijalankan setelah setup (fungsi void setup)
selesai. Setelah dijalankan satu kali fungsi ini akan dijalankan lagi, dan lagi secara
terus menerus sampai catu daya (power) dilepaskan. Jika keadaan sensor PIR itu
HIGH maka led merah akan menyala dan diberi delay 500 ms.
void loop()
{
if (motionState == HIGH)
{
digitalWrite(ledPin, HIGH);
delay(500);
}
}

7
 Pada fungsi serialPrintISR() merupakan proses interrupt service routine saat
keadaan sensor PIR itu high maka pada virtual terminal akan menampilkan teks
“Interrupt”.
void serialPrintISR()
{
motionState = HIGH;
Serial.println("Interrupt");
}

TP10-4. LED Variations


A. Jelaskan kegunaan struktur switch-case pada Program P10-4.
Kegunaan struktur switch case pada P10-4 adalah mendeklarasikan case yang akan
ditampilkan, pada kasus ini adalah mengatur arah nyala dan mati LED secara
bergantian.

B. Jelaskan kegunaan fungsi variationISR() pada Program P10-4.


Kegunaan variationISR() pada P10-4 adalah untuk mengeksekusi case yang telah
dideklarasikan. Fungsi variationISR() merupakan proses interrupt service routine,
pertama-tama diberi delay 100 ms kemudian variable variationState akan membaca
nilai bertambah ke atas yang nilainya akan ditampilkan pada virtual terminal dengan
teks awal “Variation State = “.

C. Jelaskan hasil eksekusi program TP10-4.


Saat program di running, LED menyala dari arah kanan lalu kekiri, tampilan pada
serial monitor kosong. Ketika tombol button ditekan, LED menyala dari arah kiri lalu
kekanan, tampilan pada serial monitor “Variation state = 1”. Ketika tombol button
ditekan lagi, LED menyala dari tengah lalu membagi 2 arah kekiri dan kekanan,
tampilan pada serial monitor “Variation state = 2”. Jika tombol button ditekan lagi,
LED menyala dari arah kanan lalu kekiri, tampilan pada serial monitor “Variation
state
= 3” dan begitupun seterusnya.
D. Tuliskan dan analisislah sketch (code breakdown) TP10-4.
// Program TP10-4 : LED Variations
 Pertama-tama, mendeklarasikan variable yang bersifat konstanta untuk ke-
delapan LED yang digunakan dan pin untuk push button switch. Kemudian
mendeklarasikan variable int variationState = 0; yang digunakan untuk keadaan
awal dari variasi led dan int ledTime = 50; digunakan untuk menentukan waktu
delay sebesar 50 ms.
const int ledPin[]={4,5,6,7,8,9,10,11};
const int buttonPin = 2;
int variationState = 0;
int ledTime = 50;

8
 Pada fungsi setup() akan digunakan untuk inisialisasi yang hanya dijalankan sekali
di awal program. Serial begin digunakan untuk mengatur kecepatan data untuk
komunikasi serial (bit/s). Pada fungsi for dibawah digunakan untuk inisialisa ke-
delapan LED yang digunakan sebagai outout. Dan statement
attachInterrupt(digitalPinToInterrupt(buttonPin), variationISR, RISING);
digunakan sebagai fungsi melakukan proses interrupt yang terdiri dari deklarasi
pin sensor yang digunakan yaitu pin D2, nama ISR (Interrupt Service Routine) yaitu
variationISR, dan jenis mode yang digunakan yaitu RISING.
void setup()
{
Serial.begin(9600);
for (int i=0; i<8; i++)
{
pinMode(ledPin[i], OUTPUT);
}
attachInterrupt(digitalPinToInterrupt(buttonPin), variationISR, RISING);
}

 Pada fungsi loop(), fungsi ini akan dijalankan setelah setup (fungsi void setup)
selesai. Setelah dijalankan satu kali fungsi ini akan dijalankan lagi, dan lagi secara
terus menerus sampai catu daya (power) dilepaskan. Pada fungsi switch dibawah
untuk menyebutkan variasi-variasi yang digunakan dalam menyalakan ke-delapan
LED yang digunakan.
void loop()
{
switch(variationState)
{
case 0:
right2left();
break;

case 1:
left2right();
break;

case 2:
middleRightLeft();
break;

default:
break;
}
}

9
 Pada fungsi variationISR() merupakan proses interrupt service routine, pertama-
tama diberi delay 100 ms kemudian variable variationState akan membaca nilai
bertambah ke atas yang nilainya akan ditampilkan pada virtual terminal dengan
teks awal “Variation State = “.
void variationISR()
{
delay(100);
variationState++;
Serial.print("Variation State = ");
Serial.println(variationState);
if(variationState > 2) variationState = 0;
}

 Pada fungsi right2left() merupakan proses yang akan menyalakan led secara
bergatian dari kanan ke kiri menggunakan fungsi for, setiap LED diberi delay 50
ms dan akan menampilkan nilai variationState pada virtual terminal.
void right2left()
{
for (int i=0; i<8; i++)
{
digitalWrite(ledPin[i], HIGH);
delay(ledTime);
digitalWrite(ledPin[i], LOW);
delay(ledTime);
if(variationState != 0) break;
}
}

 Pada fungsi left2right() merupakan proses yang akan menyalakan led secara
bergatian dari kiri ke kanan menggunakan fungsi for, setiap LED diberi delay 50
ms dan akan menampilkan nilai variationState pada virtual terminal.
void left2right()
{
for (int i=7; i>-1; i--)
{
digitalWrite(ledPin[i], HIGH);
delay(ledTime);
digitalWrite(ledPin[i], LOW);
delay(ledTime);
if(variationState != 1) break;
}
}

1
 Pada fungsi middleRightLeft() merupakan proses yang akan menyalakan led
secara bergatian dari tengah lalu ke kanan dan kiri menggunakan fungsi for dan
juga menggunakan variable oddNumber = 1 dalam prosesnya, setiap LED diberi
delay 50 ms dan akan menampilkan nilai variationState pada virtual terminal.
void middleRightLeft()
{
int oddNumber = 1;
for (int i=3; i>-1; i--)
{
digitalWrite(ledPin[i], HIGH);
digitalWrite(ledPin[i + oddNumber],
HIGH); delay(ledTime);
digitalWrite(ledPin[i], LOW);
digitalWrite(ledPin[i + oddNumber], LOW);
delay(ledTime);
oddNumber += 2;
if(variationState != 2) break;
}
}

Kesimpulan

2. Pada program aplikasi Basic Interrupt merupakan program interrupt yang menggunakan push button switch
button2ISR dan button3ISR.

1
3. Pada program aplikasi Counter Interrupt merupakan program interrupt yang
menggunakan 2 buah push button switch, 3 buah resistor, 1 buah led merah, dan LCD
Karakter 16x2. Setelah program diajalnkan, pertama-tama pada LCD akan
menampilkan teks “Program TP10-2” dan “CounterInterrupt” selama 2 detik, setelah
itu LCD akan menampilkan proses counter up dan jika kita menekan push button
switch yang pertama maka pada LCD menampilkan proses counter up dan juga teks
“Interrupt 1”. Dan jika push button switch yang kedua ditekan, maka pada LCD
menampilkan proses counter up yang sedang berjalan, teks “Interrupt 2” dan led
merah akan menyala.
4. Pada program aplikasi Motion Interrupt merupakan program interrupt yang
menggunakan sensor PIR, resistor, led merah, dan virtual terminal. Setelah program
dijalankan, jika keadaan logic state sensor PIR “0” tidak akan menampilkan apapun
pada virtual terminal dan led merah tidak menyala dikarenakan tidak ada proses
interrupt, sedangkan jika logic state sensor PIR “1” terjadi proses interrupt yaitu pada
virtual terminal akan menampilkan teks “Interrupt” dan led merah akan menyala.

5. Program LED Variations merupakan aplikasi yang mengontrol arah nyala lampu
menggunakan button. Arah mati dan nyala lampu tersebut diatur oleh program
switch(case) berbasis program interrupt. Saat program di running, LED menyala dari
arah kanan lalu kekiri, tampilan pada serial monitor kosong. Ketika tombol button
ditekan, LED menyala dari arah kiri lalu kekanan, tampilan pada serial monitor
“Variation state = 1”. Ketika tombol button ditekan lagi, LED menyala dari tengah lalu
membagi 2 arah kekiri dan kekanan, tampilan pada serial monitor “Variation state =
2”. Jika tombol button ditekan lagi, LED menyala dari arah kanan lalu kekiri, tampilan
pada serial monitor “Variation state = 3”.

Anda mungkin juga menyukai