0% found this document useful (0 votes)
16 views

Basic Interrupt in AVR

1. The document discusses experiments with AVR interrupts using an Arduino Mega 2560. 2. It covers single interrupts, delay in interrupts, PC interrupts, and multiple interrupts using INT0, INT1, and PCINT pins. 3. Key findings are that an interrupt service routine will preempt the main program on an interrupt, and higher priority interrupts can preempt lower priority interrupts.

Uploaded by

Ilyas Rois
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
16 views

Basic Interrupt in AVR

1. The document discusses experiments with AVR interrupts using an Arduino Mega 2560. 2. It covers single interrupts, delay in interrupts, PC interrupts, and multiple interrupts using INT0, INT1, and PCINT pins. 3. Key findings are that an interrupt service routine will preempt the main program on an interrupt, and higher priority interrupts can preempt lower priority interrupts.

Uploaded by

Ilyas Rois
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 18

LAPORAN RESMI MIKROKONTROLER

PRAKTIKUM 2
AVR INTERRUPT

Nama : Muhamad IlyasR ois


Kelas : 2 D3 Elektronika A
NRP :1103151015

POLITEKNIK ELEKTRONIKA NEGERI SURABAYA


2017
AVR INTERRUPT

A. TUJUAN
- Mahasiswa dapat memahami dasar-dasar penggunaan interrupt
- Mahasiswa mampu mengonfigurasi pin AVR sebagai sumber interrupt

B. TEORI
Eclipse adalah IDE multiplatform yang mempunyai dukungan banyak vendor dan
banyak aplikasi plugin. Eclipse banyak digunakan oleh developer PHP, developer
C++, Developer QT, Developer Java dalam mengembangkan aplikasi karena
kemudahan penggunaannya, dukungan highlight syntax dan code completion yang
sangat membantu dalam mempercepat pengembangan aplikasi. Pada praktikum ini,
Mahasiswa diharapkan dapat memulai menggunakan Eclipse untuk
mengembangkan aplikasi embedded C menggunakan plugins AVR.

C. PERALATAN
1. Software Eclipse
2. Plugins AVR Eclipse
3. Toolset GCC-AVR
4. AVR Development Board, Xtal 16 MHz, Bar LED Port A, Push Button
5. Programmer

D. PROSEDUR
1. Membuka Software Eclipse IDE yang ada pada komputer, lalu memilih File ->
New -> C Project

2. Pada nama Project avr2560-int1


3. Meng-Uncheck pilihan Debug --> Next
4. Pada MCU Type memilih Atmega2560 dan MCU Frequency masukkan
16000000
5. Kemudian muncul workspace baru seperti di bawah

6. Klik kanan pada project --> New --> Source File. Mengisi dengan main.c -->
Finish
7. Atur agar workspace disave secara otomatis pada menu window preference.
8. Pilih Downloader yang digunakan pada AVR --> Avrdude
9. Tulis Program pada main.c.

10. Klik build sebelum mengupload program ke board.


11. Mengupload program dengan menekan lambang AVR pada menu atas di
Eclipse IDE.

E. PROGRAM PERCOBAAN

1.SINGLE INTERRUPT (falling edge)

#include <avr/io.h> // memasukkan library AVR I/O


#include <avr/interrupt.h> //memasukan library interrupt
#include <util/delay.h> // memasukkan library delay

ISR (INTO_vect)
{
PORTB |=(1<<7); //port B bit 7 di set
_delay_ms (200);
PORTB &=~(1<<7); //port B bit 7 di reset
}
int main (void)
{
DDRA = 0xff; //membuat port A menjadi output
DDRB|= (1<<PB7); //led output enable
PORTD|=_BV(PD0); //pin int0 PD0 pull up
EIMSK|= (1<<INT0); //enable interrupt
EICRA|=_BV(ISC01)| _BV(ISC00); // Rising edge
sei(); //global interrupt while (1) {
PORT A=0x00; //port A menjadi output
for (unsigned char i=0;i<8;i++) //looping 8x
{
PORT A=~(1<<i); //bit ke-i pada PORTA direset yang lainnya diset
_delay_ms (500);
}
}
}

1.SINGLE INTERRUPT (Rising edge)

#include <avr/io.h> // memasukkan library AVR I/O


#include <avr/interrupt.h> //memasukan library interrupt
#include <util/delay.h> // memasukkan library delay

ISR (INTO_vect)
{
PORTB |=(1<<7); //port B bit 7 di set
_delay_ms (200);
PORTB &=~(1<<7); //port B bit 7 di reset
}
int main (void)
{
DDRA = 0xff; //membuat port A menjadi output
DDRB|= (1<<PB7); //led output enable
PORTD|=_BV(PD0); //pin int0 PD0 pull up
EIMSK|= (1<<INT0); //enable interrupt
EICRA|=_BV(ISC01)| _BV(ISC00); // Rising edge
sei(); //global interrupt
while (1) {
PORT A=0x00; //membuat port A menjadi output
for (unsigned char i=0;i<8;i++) //looping 8x
{
PORT A=~(1<<i); //bit ke-i pada PORTA direset yang lain diset
_delay_ms (500);
}
}
}

PROGAM 2-efek delay pada interrupt

#include <avr/io.h> // memasukkan library AVR I/O


#include <avr/interrupt.h> //memasukan library interrupt
#include <util/delay.h> // memasukkan library delay

ISR (INTO_vect)
{
PORTB |=(1<<7); //port B bit 7 di set
_delay_ms (1000);
PORTB &=~(1<<7); //port B bit 7 di reset
}
int main (void)
{
DDRA = 0xff; //menjadikan seluruh PORTA menjadi output
DDRB |=_BV(PDO); //pin int0 PDO pull up
EIMSK |=(1<<INTO); //bit INT0 pada EIMSK diset yang lain direset
EICRA |=_BV(ISC01); //trigger falling edge pada INT00
EICRA &=_BV(ISC00); //falling edge
sei(); //global interrupt
while(1){
PORTA=0x00; //membuat port A menjadi output
for (unsigned char i=0;i<8;i++) //looping 8x
{
PORTA =~(1<<i); //bit ke-i pada PORTA direset yang lain diset
_delay_ms(500);
}
}
}

PERCOBAAN 3-PC INT

#include <avr/io.h> // memasukkan library AVR I/O


#include <avr/interrupt.h> //memasukan library interrupt
#include <util/delay.h> // memasukkan library delay

ISR (INTO_vect)
{
PORTB |=(1<<7); //port B bit 7 di set
_delay_ms (1000);
PORTB &=~(1<<7); //port B bit 7 di reset
}
int main (void)
{
DDRA=0xff; //membuat port A menjadi output
DDRB|=(1<<PB7); //bit PB7 pada DDRB diset yang lain reset
PORTB|=(1<<PB4); //bit PB4 pada PORTB diset yang lain reset
PCMSK0|=(1<<PCINT4); //bit PCINT4 pada PCMSK0 diset yang lain reset
PCICR|=_BV(PCIE0);
sei(); //global interrupt
while(1){
PORTA=0x00; //membuat port A menjadi output
for (unsigned char i=0;i<8;i++) looping 8x
{
PORTA=~(1<<i); //bit ke-i pada PORTA direset yang lain diset
_delay_ms(500);
}
}
}

F. ANALISA

Percobaan ke-1
Pada program percobaan pertama kami mengamai kapan interrupt tepatnya terjadi.
Program percobaan pertama diatur agar interrupt terjad saat trigger beralih dari
kondisi HIGH menuju LOW. Untuk itu kami menggunakan function generator
sebagai trigger agar tidak terjadi bounching sehingga mudah diamati. Dari hasil
percobaan diketahui bahwa saat trigger beralih dari LOW ke kondisi HIGH
program masih berjalan seperti biasa. Saat trigger berada pada konsisi HIGH
program masih berjalan seperti biasa. Namun saat trigger beralih dari kondisi
HIGH menuju LOW programinterrupt dijalankana.

Percobaan ke-2
Pada program percobaan ke dua kami mengamati delay pada interrupt. Kami
mengamati apa yang terjadi pada program utama dan program interrupt saat
interrupt terjadi. Pada percobaan ini kami menggunakan INT0 yang berada pada
pin 21 atau PB7 arduino mega 2560. Interrupt diatur dengan mode fallng edge. saat
terjadi interrupt program utama berhenti, dan program interrupt dijalankan. Setelah
program utama dijalankan, arduino akan kembali melanjutkan program utama.

Percobaan ke-3
Pada percobaan ke tiga PCINT kami mengamati interrupt menggunakan PCINT.
Pada percobaan ini interrupt PCINT berada pada grup interrupt 0 tepatnya pada
grup PCINT4 yng berada pada PB4. Seperti halnya interrupt menggunakan INT,
sebelum melakukan interrupt kita harus meneneblekan grup0 sebagai interrupt
dengan menset PCIE0 yang berada pada register PCICR. Saat terjadi interrupt
maka program utama akan berhenti sementara mikrokonroler menjalankan
program interrupt.

Percobaan ke-4
Pada program ke empat multiple interrupt kami mengamati apa yang terjadi pada
program utama dan dua program interrupt saat terjadi interrupt saat mikrokontroler
menjalankan program interrupt lain. Kedua interrupt itu masingmasing kita pasang
pada INT0 dan INT1 yang berada pada pin20 dan pin21 arduino MEGA2560. Dari
hasil pengamatan sebuah program interrupt akan ditunda untuk dijalankan sampai
program interrupt lain selesai dijalankan. Misalkan mikrokontroler sedang
menjalankan program utama. Saat terjadi interrupt pertama mikrokontroler akan
menjalankan interrupt program utama. Jika sudah selesai akan melanjutkan
program utama. Namun jika sebelum mikrokintroler menjalankan program
interrupt pertama terjadi interrupt ke dua, maka interrupt ke dua akan ditunda
sampai interrupt pertama selesai dijalankan. Tentu saja program interrupt yang
ditunda ada batasnya. Jika sudah melebihi batas maka program interrupt tidak
ditunda tapi diabaikan. Namun pada praktikum kaili ini kita tidak mengamati
berapa programinterrupt yang dapat ditunda.

Percobaan tugas
Pada program tugas kami menggunakan dua interrupt PCINT yang ada pada dua
grup yang berbeda. Pada percobaan ini kami menggunakan PCINT10 yang berada
pada grup1 dan PCINT23 yang berada pada grup2. Dari hasil pengamatan
diketahui bahwa PCINT pada grup1 lebih diperioritaskan dari pada PCINT pada
grup2. Saat mikrokontroler menjalankan program utama kemudian terjadi interrupt
pada grup2 maka mikrokontroler akan menjalankan program interrupt pada grup2.
Jika program pada grup2 sudah selesai, maka mikrokontroler akan menjalankan
program utama. Namun bila program interrupt pada grup2 belum selesai dijalankan
terjadi interrupt pada grup1, maka mikrokontroler akan mengerjakan interrupt pada
grup1. Saat mikrokontroler menjalankan program utama kemudian terjadi interrupt
pada grup1 maka mikrokontroler akan menjalankan program interrupt pada grup1.
Jika program pada grup1 sudah selesai, maka mikrokontroler akan menjalankan
program utama. Namun bila program interrupt pada grup1 belum selesai dijalankan
terjadi interrupt pada grup2, maka interrupt pada grup ke dua akan ditunda sampai
interrupt pada grup1 selesai dijalankan.

G. KESIMPULAN

1. Untuk menjadikan sebuah pin sebagai interrupt kita harus menganablekan global
interrupt, grup interrupt, dan pin tersebut sebagai interrupt. Kita juga harus
mengatur mode interrupt yang digunakan
2. Saat terjadi interrupt mikrokontroler akan menjalankana program interrupt
sedangkan program utama akan berhenti sementara.
3. Pada interrupt menggunakan INT jika terjadi interrupt saat miktrokontroler
menjalankan interrupt lain, maka interrupt yang baru aka ditunda.
4. Pada interrupt menggunakan PCINT jika terjadi interrupt saat mikrokontroler
menjalankan program interrupt lain, maka mikro kontroler akan tetap melanjukan
interrupt pertama dan menunda interrupt ke dua jika interrupt pertama lebih
diperioritaskan dan akan menjalankan interrupt ke dua jika interrupt ke dua lebih
diperioritaskan.

You might also like