Você está na página 1de 6

ANALOG TO DIGITAL CONVERTER (ADC)

Mikrokontroler ATmega8535 memiliki fasilitas analog yang sudah build in didalam chip. Fitur internal ADC inilah yang menjadi salah satu kelebihan mikrokontroler ini jika dibandingan dengan beberapa jenis mikrokontroler lainnya. Atmega memiliki resolusi ADC 10 bit (dapat juga menggunakan ADC 8 bit) dengan 8 channel (PA0-PA7) input ADC dan mendukung 16 macam penguat beda. ADC ini bekerja dengan teknik succecive approximation. Rangkaian internal ADC memiliki catu daya tersendiri yaitu pin AVCC. Untuk lebih jelasnya silakan download datasheet ATmega8535 disini. Data hasil konversi ADC 10 bit (1024) adalah: ADC=(Vin*1024)/Vref Jika menggunakan compiler Codevision, kita dapat dengan mudah CodeWizardAVR, berikut adalah cara mensetting ADC pada codevision AVR. menggunakan

Jika ingin menggunakan ADC 8 bit maka tinggal meng-klik saja pada use 8 bit. Volt Ref merupakan sumber pemilihan tegangan referensi ADC, sedangkan Clock adalah banyaknya frekuensi sampling ADC. Dan Auto Trigger Source merupakan mode ADC yang akan digunakan. Sedangkan instruksi untuk pembacaan ADC pada program CodeVision AVR adalah sebagai berikut: int ADC;//variabel ADC dengan tipe data integer ADC=read_adc(0);//baca data ADC dari channel 0 (ADC0/PA1) Berikut adalah contoh program ADC 10 bit, dengan tegangan input berasal dari potensiometer yang difungsikan sebagai pembagi tegangan. Cara kerjanya adalah terdapat tiga buah potensiometer dan nilai ADC dari ketiganya ditampilkan pada LCD. Jika salah satu potensio tersebut mempunyai nilai yang paling besar maka LED akan menyala sesuai dengan potensio tersebut.

Berikut adalah listing program lengkapnya: #include <mega16.h> #include <stdlib.h> #include <lcd.h> #include <delay.h> int potensio1, potensio2, potensio3; char temp[6]; // Alphanumeric LCD Module functions #asm .equ __lcd_port=015 ;PORTC #endasm #define ADC_VREF_TYPE 000 // Read the AD conversion result unsigned int read_adc(unsigned char adc_input) { ADMUX=adc_input | (ADC_VREF_TYPE & 0xff); // Delay needed for the stabilization of the ADC input voltage delay_us(10); // Start the AD conversion ADCSRA|=040; // Wait for the AD conversion to complete while ((ADCSRA & 010)==0); ADCSRA|=010; return ADCW; } void main(void) { PORTD=0xff; DDRD=007; //Bit PD2-0 sebagai output untuk menghidupkan LED // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=080;

SFIOR=000; // ADC initialization // ADC Clock frequency: 750.000 kHz // ADC Voltage Reference: AREF pin // ADC Auto Trigger Source: None ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=084; // LCD module initialization lcd_init(16); while (1) { potensio1=read_adc(0);//baca ADC channel 0 (ADC0 atau PA0) potensio2=read_adc(1);//baca ADC channel 1 (ADC1 atau PA1) potensio3=read_adc(2);//baca ADC channel 2 (ADC2 atau PA2) if (potensio1>potensio2 && potensio2>potensio3) {PORTD=0b11111110;}//jika paling besar nilai potensio 1, nyalakan led1 if (potensio2>potensio1 && potensio2>potensio3) {PORTD=0b11111101;}//jika paling besar nilai potensio 2, nyalakan led2 if (potensio1<potensio2 && potensio2<potensio3) {PORTD=0b11111011;}//jika paling besar nilai potensio 3, nyalakan led3 lcd_clear( ); lcd_gotoxy(0,0); lcd_putsf(ElectrO-cOntrOl); itoa(potensio1,temp);//menampilkan nilai ADC potensio1 lcd_gotoxy(0,1) ; lcd_puts(temp); itoa(potensio2,temp);//menampilkan nilai ADC potensio2 lcd_gotoxy(5,1) ; lcd_puts(temp); itoa(potensio3,temp);//menampilkan nilai ADC potensio3 lcd_gotoxy(10,1) ; lcd_puts(temp); delay_ms(300); }; }

APLIKASI PEMBACAAN SUHU LM35 DENGAN PENAMPIL LCD MENGGUNAKAN CODEVISION AVR

Aplikasi pembacaan suhu (monitoring suhu) ini, menggunakan sensor LM35 yang merupakan sebuah sensor suhu dengan harga yang relatif murah dan output nya sudah berupa tegangan yang sudah linear. Menurut datasheet LM35, untuk kenaikan 1 derajat Celcius akan mengakibatkan perubahan 10mV terhadap output tegangannya. Dimana saat suhu 0 Celcius sensor ini mempunyai tegangan offset sebesar 0 V. Untuk mendapatkan datasheet LM35, silakan download disini. Disini saya akan melakukan pembacaan suhu dalam satuan derajat Celcius dengan range pengukuran 0-100 Celcius. Sehingga tegangan output dari LM35 adalah 0-1 V. Tegangan output tersebut sudah dapat dibaca oleh mikrokontroler melalui ADC tanpa diperlukan sebuah penguat tegangan. Aplikasi ini telah saya buat dalam bentuk real (sesungguhnya) dan juga saya simulasikan menggunakan Proteus. Schematic LM35 yang kemudian ditampilkan pada LCD dapat dilihat diatas. Sedangkan untuk programnya menggunakan CodeVision AVR, berikut adalah listing program lengkapnya. int SUHU; char temp[8]; float suhu_celcius; #include <mega16.h> #include <stdlib.h> #include <lcd.h> #include <delay.h> // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x15 ;PORTC

#endasm #define ADC_VREF_TYPE 0x40 // Read the AD conversion result unsigned int read_adc(unsigned char adc_input) { ADMUX=adc_input | (ADC_VREF_TYPE & 0xff); // Delay needed for the stabilization of the ADC input voltage delay_us(10); // Start the AD conversion ADCSRA|=0x40; // Wait for the AD conversion to complete while ((ADCSRA & 0x10)==0); ADCSRA|=0x10; return ADCW; } void main(void) { // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00; // ADC initialization // ADC Clock frequency: 750.000 kHz // ADC Voltage Reference: AVCC pin // ADC Auto Trigger Source: None ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0x84; // LCD module initialization lcd_init(16); lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("ElectrO-cOntrOl"); lcd_gotoxy(0,1); lcd_putsf("SENSOR SUHU LM35"); delay_ms(1000); while (1) { lcd_clear( ); SUHU = read_adc(0); suhu_celcius = (float)SUHU*500/1023;//rumus untuk mengubah kedalam derajat celcius lcd_gotoxy(0,0); lcd_putsf("ElectrO-cOntrOl"); ftoa(suhu_celcius,1,temp);//mengubah tipe data float ke tipe data array yg akan ditampilkan di LCD lcd_gotoxy(0,1); lcd_puts(temp); lcd_gotoxy(5,1);

lcd_putchar(0xdf);//menampilkan karakter derajat lcd_putsf("C"); delay_ms(500); }; }

Você também pode gostar