Anda di halaman 1dari 11

A.

TUJUAN PRAKTIKUM
1. Praktikan dapat memahami proses Interupsi Eksternal dalam program AVR.
2. Praktikan dapat memahami proses ADC Interupsi Eksternal dalam program AVR.
3. Praktikan dapat menggunakan model kit fisik ATMEGA8535 serta program Proteus untuk
simulasi skematik rangkaian ATMEGA8535.

B. LANGKAH PRAKTIKUM
1. Percobaan Interupsi Eksternal
Dimasukan program ke Code Vision AVR dengan kode seperti dibawah :

#include <mega8535.h>
unsigned char led=0;
void main (void)
{
DDRC=0xFF;
PORTC=led;
GICR|=0x40;
MCUCR=0x02;
GIFR=0x80;
#asm("sei")
while (1);
}
interrupt [EXT_INT0] void ext_int0_isr (void)
{
led++;
PORTC=~led;
if (led>>255)
{
led=0;
}
}

Jalankan dan amati hasil keluaran dalam modul kit LED 0-7 ATMEGA8535.
2. Percobaan ADC Interupsi Eksternal Kode (baca_adc)

Dimasukan program ke Code Vision AVR dengan kode seperti dibawah :

#include <mega8535.h>
#define mode_ADC 0x20
unsigned char baca_adc (unsigned char pin_adc)
{
ADMUX=pin_adc |mode_ADC;
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}
void main(void)
{
DDRC=0xFF;
ADMUX=mode_ADC;
ADCSRA=0x85;
while (1)
{
PORTC=~baca_adc(0);
}
}

Jalankan dengan simulasi Proteus dengan skematik seperti dibawah :

Gambar 1. Skematik Proteus Program ADC Interupsi Eksternal (baca_adc)

Amati hasil keluaran pada LED 0-7.


3. Percobaan ADC Interupsi Eksternal Dengan Modus Pilih (ext_int1)

Dimasukan program ke Code Vision AVR dengan kode yang dibuat terlebih dahulu, kode yang
digunakan adalah pengembangan dari kedua percobaan sebelumnya. Dari hasil pengembangan
didapatkan kode seperti dibawah :

#include <mega8535.h>
#define mode_ADC 0x20
unsigned char mode=0;
unsigned char mode2=0;
unsigned char baca_adc (unsigned char pin_adc)
{
ADMUX=pin_adc |mode_ADC;
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}
void main (void)
{
DDRC=0xFF;
PORTC=0xFF;
DDRB=0xFF;
PORTB=0xFF;
GICR|=0x80;
MCUCR=0x02;
GIFR=0x80;
#asm("sei")
ADMUX=mode_ADC;
ADCSRA=0x85;
while (1)
}
interrupt [EXT_INT1] void ext_int1_isr (void)
{
mode++;
switch(mode)
{
case 0x01 : PORTC=~baca_adc(1) ; break;
case 0x02 : PORTC=~baca_adc(0) ; break;
}
switch(mode)
{
case 0x01 : PORTB=0x80; break;
case 0x02 : PORTB=0x40; break;
}
if(mode==2)
{
mode=0;
}
}

Dengan pengembangan kode seperti diatas dibuat rangkaian skematik dalam program Proteus
seperti dibawah.
Gambar 2. Skematik Proteus Program ADC Interupsi Eksternal Dengan Modus Pilih (ext_int1)
C. Tugas Praktikum
1. Percobaan Interupsi Eksternal
Pada percobaan pertama digunakan model kit AVR ATMEGA8535 sehingga tidak
terdapat penjelasan visual untuk menggambarkan keluaran program maka untuk lebih jelasnya
akan digunakan program Proteus untuk membahas hasil penjalanan program seperti langkah
diatas. Kode yang digunakan adalah seperti pada langkah percobaan 1:

Gambar 3. Program Interupsi Eksternal

Dengan skematik Proteus yang digunakan adalah seperti dibawah :

Gambar 4. Skematik Proteus Program Interupsi Eksternal

Kode program interupsi eksternal yang digunakan dapat dibaca pada buku “C dan AVR Rahasia
Kemudahan Bahasa C dalam Mikrokontroler ATMega8535” Agus Bejo (217) dengan penjelasan
selengkapnya adalah sebagai berikut:
▪ Baris 7 digunakan untuk mengaktifkan interupsi eksternal 0 dengan cara mengeset bit6
register GICR. Sumber interupt ini berasal dari masukkan pin INT0.
▪ Baris 8 digunakan untuk mengatur mode pemicu terjadinya interupsi eksternal 0. Dengan
mengisi register MCUCR=02 berarti interupsi akan terjadi apabila terdapat transisi turun
pada pin INT0. Jadi apabila ada kondisi LOW (0) pada pin INT0 akan menyebabkan
program program melompat ke subrutin interupsi eksternal 0.
▪ Baris 9 digunakan untuk mereset bendera interupsi eksternal 0dengan cara mengeset bit6
register GIFR. Bendera interupsi eksternal 0 secara otomatis akan direset pada waktu
program melompat ke subrutin interupsi eksternal 0.
▪ Baris 13 sampai dengan baris 21 merupakan subrutin interupsi eksternal 0. Jadi blok
program inilah yang akan dikerjakan jika terjadi permintaan interupsi eksternal 0 (terjadi
perubahan/transisi turun pada pin INT0).
▪ Baris 15 digunakan untuk menaikkan isi variabel led (led=led+1).
▪ Baris 16 digunakan untuk menampilkan data variabel led ke port C.
▪ Baris 17 sampai dengan 20 digunakan untuk membatasi penambahan variabel led. Jika
sudah melebihi 255, variabel led kembali ke kondisi 0.
Dengan sedikit perbedaan yaitu dengan menggunakan interupsi eksternal 0 dan memberikan
pembatasan variabel led 0-255.

Penjalanan kode program menghasilkan keluaran pada skematik seperti gambar dibawah :

Gambar 5. Skematik Proteus Penjalanan Program Interupsi Eksternal


2. Percobaan ADC Interupsi Eksternal Kode (baca_adc)
Percobaan 2 dilakukan dengan simulasi skematik program Proteus dengan kode program
yang digunakan telah dituliskan sebelumnya pada langkah praktikum.

Gambar 6. Program ADC Interupsi Eksternal Kode (baca_adc)


Skematik yang digunakan adalah seperti gambar dibawah :

Gambar 6. Skematik Proteus Program ADC Interupsi Eksternal Kode (baca_adc)


Kode program interupsi eksternal yang digunakan dapat ditemukan sama seperti praktikum
sebelumnya yaitu pada buku “C dan AVR Rahasia Kemudahan Bahasa C dalam Mikrokontroler
ATMega8535” oleh Agus Bejo dengan penjelasan selengkapnya adalah sebagai berikut:
▪ Baris 2 digunakan untuk mendefinisikan sebuah konstanta yang bernama mode_adc
dengan nilai 0x20 dan nantinya akan digunakan untuk mengatur mode kerja ADC.
▪ Baris 3 sampai dengan baris 10 merupakan blok fungsi baca_adc yaitu sebuah subrutin
yang digunakan untuk melakukan konversi data analog ke digital. Fungsi baca_adc
memiliki argumen yang diberi nama pin_adc. Nilai dari argumen ini menunjukkan pin
mana yang digunakan sebagai masukkan analognya. Sebagai contoh baca_adc(0) berarti
mengkonversi data analog yang terhubung ke pin ADC0. Baca_adc(1) berarti
mengkonversi data analog yang terhubung ke pin ADC1 dan seterusnya.
▪ Baris 5 ADMUX diisi dengan data argumen pin_adc yang di OR kan dengan konstanta
mode_ADC. Seperti telah didefinisikan sebelumnya konstanta mode_ADC bernilai
0x20 sedangkan pin_adc merupakan argumen dari fungsi baca_adc. Nilai 0x20 berarti :
• Bit REFS1:0 bernilai ‘00’ sehingga tegangan referensi ADC yang digunakan
adalah tegangan yang terhubung ke AREF. Dalam hal ini tegangan referensinya
adalah 5V, karena pada skematiknya pin AREF dihubungkan ke VCC.
• Bit ADLAR diset ‘1’ sehingga data digital hasil konversi akan memiliki format
8bit MSB disimpan di register ADCH dan 2bit sisanya di register ADCL.
• Sedangkan nilai argumen pin_adc digunakan untuk menentukan pin masukkan
tegangan analognya.
• Baris 7 digunakan untuk menunggu proses konversi ADC selesai yang ditandai dengan
bit ADIF pada register ADCSRA bernilai 1.
• Baris 8 digunakan untuk mereset bit ADIF agar menjadi 0 secara software yaitu dengan
cara mengeset bit ADIF (bit ADIF diisi ‘1’ lagi).
• Baris 8 digunakan untuk mengembalikan nilai balik fungsi baca_adc dengan data register
ADCH. Atau dengan kata lain data register ADCH inilah data digital 8bit hasil konversi
ADC.
• Baris 11 sampai dengan baris 20 merupakan program utama (fungsi main).
• Baris 13 digunakan untuk mendefinisikan port C sebagai output. Hal ini diperlukan
karena data hasil konversi ADC nanti akan dikeluarkan ke port C.
• Baris 14 digunakan untuk mengatur inisial mode kerja ADC yaitu mengisi register
ADMUX dengan data 0x20 seperti telah dijelaskan pada baris 5.
• Baris 15 juga digunakan untuk mengatur inisial mode kerja ADC yaitu mengisi register
ADCSRA dengan data 0x85 pada register ADCSRA berarti :
• Bit ADEN diset 1 sehingga fasilitas ADC aktif.
• Bit ADPS2:0 bernilai 011 sehingga skala pembagi clock yang digunakan adalah
8. Jadi frekuensi clock ADC sama dengan 1/8 frekuensi osilator kristal yang
digunakan. Oleh karena pada contoh ini digunakan frekuensi kristal 8MHz
berarti frekuensi clock ADC adalah 1MHz.
Baris 16 - 19 adalah instruksi loop. Didalam instruksi loop ini hanya terdapat satu program
yang memiliki fungsi mengeluarkan data hasil konversi ADC ke port C. Karena led yang
terhubung ke port C bersifat active low (0) maka data hasil konversi tersebut harus
dikomplemenkan terlebih dahulu agar data yang bernilai 1 secara visual dapat dilihat melalui
nyalanya led.
Penjalanan kode program menghasilkan keluaran pada skematik program Proteus seperti gambar
dibawah :

3. Percobaan ADC Interupsi Eksternal Dengan Modus Pilih (ext_int1)


Gambar 7. Skematik Proteus Penjalanan Program ADC Interupsi Eksternal Kode (baca_adc)
Pada percobaan 3 ini praktikan diharapkan dapat mengembangkan kedua program
percobaan sebelumnya untuk membuat program ADC interrupt external dengan modus pilih
(ext_int1). Setelah diskusi kelompok didapatkan kode program seperti di langkah praktikum,
kemudian dimasukan kode program tersebut ke Program CV AVR seperti dibawah :

Gambar 8. Program ADC Interupsi Eksternal Dengan Modus Pilih (ext_int1)


Dari penjalanan program diatas didapatkan dua keluaran yaitu data keluar di ADC0 dan data
keluar di ADC1, hal ini ditunjukkan dengan nyala LED YELLOW bagian kiri gambar dibawah :

Gambar 9. Skematik Proteus Penjalanan Program ADC Interupsi Eksternal Dengan Modus
Pilih (ext_int1) ADC0

Gambar 10. Skematik Proteus Penjalanan Program ADC Interupsi Eksternal Dengan Modus
Pilih (ext_int1) ADC1
D. KESIMPULAN PRAKTIKUM

1. Praktikan memahami proses Interupsi Eksternal dalam program AVR.


2. Praktikan memahami proses ADC Interupsi Eksternal dalam program AVR.
3. Praktikan mampu menggunakan model kit fisik ATMEGA8535 serta program Proteus untuk
simulasi skematik rangkaian ATMEGA8535.

E. DAFTAR PUSTAKA
Agus Bejo. C dan AVR Rahasia Kemudahan Bahasa C dalam Mikrokontroler
ATMega8535. 2008. Graha Ilmu. Yogyakarta.

Anda mungkin juga menyukai