Home > Mikrokontroler, Tutorial > AVR Comparator Programming

AVR Comparator Programming

Salah satu komponen yang paling menarik dalam dunia elektronika adalah komparator. Komparator berfungsi untuk membandingkan dua nilai dengan menghasilkan satu buah output. output yang dihasilkan hanya ada dua kemungkinan yaitu Vmax dan Vmin. Komponen utama dari komparator adalah OpAmp. Biasanya komparator digunakan dalam dunia sensor yang akan di interface kan dengan mikrokontroller. Dalam perkembangan Mikrokontroller sekarang ini telah banyak ditemukan mikrokontroller yang built in dengan komparator, so kita tidak perlu repot-repot lagi membuat rangkain komparator. Dalam tulisan kali ini akan diambil contoh mikrokontroller seri ATMega8 dari jenis AVR yang sudah built in comparator. Program dibuat dengan bahasa C menggunakan compiler WinAVR dengan editor AVRStudio 4 SP 4. Lets Go….
Adapaun ilustrasi dari contoh program adalah sebagai berikut:
Input positif dari comparator (OpAmp) dihubungkan dengan voltage regulator 1.23V dengan mensetting bit ACGB pada register ACSR. sedangkan input negatif dari comparator (OpAmp) dihubungkan dengan tegangan luar (dipakai potensio meter–> pembagi tegangan) melalui pin ADC3 via multiplexer. sebagai indikator digunakn LED yang terhubung dengan PORTD0. Jika besarnya tegangan input negatif dibawah input positif maka led akan padam,sebaliknya jika tegangan input negatif lebih besar dari input positif maka led akan nyala. Nyala padam LED diatur pada saat terjadi interupt comparator dalam rutine ANA_COMP_vect.Berikut ini contoh programnya:

  1. include
  2. include
  3. define AINpin PA3
  4. define LED PD0

void Init(){
DDRA&=~(1<<AINpin);//as input
PORTA&=~(1<<AINpin);//no Pull-up
DDRD|=(1<<LED); //Led pin as output
PORTD|=(1<<LED);//Initally LED is OFF
SFIOR|=(1<<ACME);//enable multiplexer
ADCSRA&=~(1<<ADEN);//make sure ADC is OFF
ADMUX|=(0<<MUX2)|(1<<MUX1)|(1<<MUX0); //select ADC3 as negative AIN
ACSR|=(0<<ACD)|(1<<ACBG)|(1<<ACIE)| (0<<ACIC)| (0<<ACIS1)|(0<<ACIS0);
sei();//enable global interrupts
}
// Interrupt handler for ANA_COMP_vect
ISR(ANA_COMP_vect) {
if bit_is_clear(ACSR, ACO)
PORTD&=~(1<<LED);//LED is ON
else PORTD|=(1<<LED);//LED is OFF
}
// Main program
int main(void) {
Init();
while(1) {
}
}

Salam Hangat
Dayat Kurniawan

Categories: Mikrokontroler, Tutorial
  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: