Anda di halaman 1dari 6

Aplikasi ADC pada ATMega8 dengan Bahasa Bascom

AVR
Untuk aplikasi ADC menggunakan bahasa Bascom AVR sangatlah sederhana, kita tidak perlu memahami
lebih dalam tentang proses yang terjadi pada LCD dan ADC. Kita cukup tau perintah yang digunakan
untuk mengakses perangakat tersebut melalui bahasa pemrograman. Pada aplikasi ini saya mencoba
menggunakan ATMega8 yang tidak jauh berbeda dengan ATMega8535, yang berbeda hanyalah
beberapa fitur dan jumlah Port. Gambar rangkaiannya cukup sederhana seperti gambar dibawah ini.

Berikut ini adalah contoh program sederhana yang dapat di pahami dan dikembangkan dengan mudah dalam aplikasi
yang kompleks. Mudah-mudahan bermanfaat. Terima kasih.

Contoh Program :
$regfile = "m8def.dat"
$crystal = 4000000
Config Portb = Output
Config Lcd = 16 * 2
Config Lcdpin = Pin, Rs = Portd.4, E = Portd.5, Db4 = Portd.0
Config Lcdpin = Pin, Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3
Config Adc = Single , Prescaler = Auto

Start Adc
'With STOP ADC, you can remove the power from the chip
'Stop Adc

Dim W As Word , Channel As Byte


Channel = 0
'Baca Nilai ADC dari channel 0

Do
Locate 1 , 1
Lcd "Nilai ="
W = Getadc(channel)
Locate 1 , 9
Lcd " "
Locate 1 , 9
Lcd W
Waitms 100
Loop
End

INTERUPSI EKSTERNAL AVR


23APR
Untuk Atmega8535 ada 3 sumber interupsi eksternal yaitu INT0 (PD2), INT1 (PD3) dan INT2 (PB2). Ketiga interupsi
itu dapat dipicu dengan adanya perubahan level baik transisi naik (rising edge) maupun transisi turun (falling edge).
Untuk pengaturan mode dan cara kerjainterupsi eksternal dilakukan melalui 2 buah register MCUCR dan register
MCUCSR. Untuk lebis jelasnya tentang register-register tersebut lebih baik teman-teman baca datasheetnya. Tetapi
tenang saja, jika menggunakan compiler CodeVision AVR, kita tidak perlu dituntut untuk tau tentang kedua register
tersebut, karena secara otomatis CodeVision AVR akan mensettingnya saat kita menset CodeWizard AVR.

Disini saya akan coba membuat sebuah aplikasi dengan menggunakan 3 buah interupsi eksternal, yang cara
kerjanya, jika tidak ada interupsi maka LCD akan menampilkan tidak ada INT, dan jika terjadi interupt eksternal
maka LCD akan menampilkan terjadi INT.X selama 2 detik, nilai X sesuai dengan interupsi eksternal yang terjadi
(INT0, INT1 atau INT2). Untuk pemicunya saya gunakan pushbutton.

Berikut adalah schematicnya dan setting pada CodeVision CodeWizard AVR:


Pada setting CodeWizard AVR diatas saya memilih Falling edge yang artinya interupsi ekternal akan terjadi jika ada
perubahan level logika dari HIGH ke LOW. Dalam hal ini saat pushbutton tidak ditekan maka berlogika HIGH (5V)
sedangkan saat ditekan berlogika LOW (GND).

Berikut adalah listing program lengkapnya:

#include <mega16.h>
#include <delay.h>

#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>

// External Interrupt 0 service routine


interrupt [EXT_INT0] void ext_int0_isr(void)
{
lcd_gotoxy(0,0);
lcd_putsf(ElectrO-cOntrOl);

lcd_gotoxy(0,1);
lcd_putsf(TERJADI INT.0);
delay_ms(2000);
lcd_clear();
}
// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
lcd_gotoxy(0,0);
lcd_putsf(ElectrO-cOntrOl);

lcd_gotoxy(0,1);
lcd_putsf(TERJADI INT.1);
delay_ms(2000);
lcd_clear();
}

// External Interrupt 2 service routine


interrupt [EXT_INT2] void ext_int2_isr(void)
{
lcd_gotoxy(0,0);
lcd_putsf(ElectrO-cOntrOl);

lcd_gotoxy(0,1);
lcd_putsf(TERJADI INT.2);
delay_ms(2000);
lcd_clear();
}

void main(void)
{
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Falling Edge
// INT1: On
// INT1 Mode: Falling Edge
// INT2: On
// INT2 Mode: Falling Edge
GICR|=0xE0;
MCUCR=0x0A;
MCUCSR=0x00;
GIFR=0xE0;

// Timer(s)/Counter(s) Interrupt(s) initialization


TIMSK=0x00;

// Analog Comparator initialization


// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// LCD module initialization
lcd_init(16);

// Global enable interrupts


#asm(sei)

while (1)
{
lcd_gotoxy(0,0);
lcd_putsf(ElectrO-cOntrOl);

lcd_gotoxy(0,1);
lcd_putsf(TIDAK ADA INT);
};
}

Anda mungkin juga menyukai