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
Do
Locate 1 , 1
Lcd "Nilai ="
W = Getadc(channel)
Locate 1 , 9
Lcd " "
Locate 1 , 9
Lcd W
Waitms 100
Loop
End
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.
#include <mega16.h>
#include <delay.h>
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
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();
}
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;
while (1)
{
lcd_gotoxy(0,0);
lcd_putsf(ElectrO-cOntrOl);
lcd_gotoxy(0,1);
lcd_putsf(TIDAK ADA INT);
};
}