Output dari sensor kita hubungkan dengan PORTA.0 (chanel ADC 0). Untuk kodenya kita gunakan aja CodeWizard agar lebih efisien n kita gak usah pusing2 hafalin register2 AVR.
Oke sekarang langsung aja:
1. klik icon CodeWizard di CodeVision AVR. Lalu klik tab ADC
2. Pada tampilan tab ADC, centang ADC ENABLED utk mengaktifkan ADC
Use 8 Bits: untuk memilih apakah ADC menggunakan resolusi 10 bit atau 8 bit. Biarkan kosong(jangan di centang) agar ADC menggunakan resolusi 10 bit.
ADC Interrupt: Interrupt ADC diaktifkan apa tidak.
High Speed: mode high speed digunakan apa tidak.
Volt. Ref: referensi tegangan ADC. ubah ke AVCC pin, agar ADC menggunakan referensi teg. 5 volt.
ADC Clock: untuk memilih frekuensi clock ADC.
Ada pertanyaan menarik dari Mas HaPE, tentang ADC Clok ini:
di keterangan Clok ADC memang tertulis 125.000 kHz.
Itu bukan 125ribu kHz (125Mhz)
Tapi 125,000 kHz (125,0 kHz)
Inget orang Inggris nulis koma pake titik.
Auto Trigger Source: untuk menentukan sumber trigger ADC
...Ok let's finish this thing....
3. sekarang tinggal klik File ---> Generate, Save and Exit
lalu kasih nama dan simpen File2nya.
Contoh program ADC untuk LM35 :
#includeProgram diatas untuk membaca nilai suhu dari sensor LM35 trus hasilnya digunakan sebagai acuan untuk menyalakan Heater yg terhubung ke PORTB.0
#include.
#include
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x18
#endasm
#include
#define heater PORTB.0//heater di hubungkan dg PORTB.0
#define ADC_VREF_TYPE 0x40
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input|ADC_VREF_TYPE;
ADCSRA|=0x40;
delay_us(10);
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
unsigned char buff[33];
void lcd_putint(unsigned int dat)
{
sprintf(buff,"%d ",dat);
lcd_puts(buff);
}
void main(void)
{
unsigned int suhu;
float adc;
DDRB=0xff;
PORTB=0x00;
// ADC initialization
// ADC Clock frequency: 125.000 kHz
// ADC Voltage Reference: AVCC pin
// ADC High Speed Mode: Off
// ADC Auto Trigger Source: None
ADMUX=ADC_VREF_TYPE;
ADCSRA=0x85;
SFIOR&=0xEF;
// LCD module initialization
lcd_init(16);
while (1)
{
// Place your code here
adc = read_adc(0);
adc=adc/255;
suhu=adc*175;
suhu=suhu-12;
if (suhu<27)heater=1;
if (suhu>32)heater=0;
lcd_putsf("Suhu= ");
lcd_putint(suhu);
delay_ms(1000);
lcd_clear();
};
}
Dalam program diatas terdapat code:
adc=adc/255;Fungsi kode diatas untuk mengkalibrasi nilai ADC agar sesuai dengan suhu sebenarnya. Setiap rangkaian memiliki error yg berbeda-beda. jadi nilai untuk kalibrasi harus di sesuaikan.
suhu=adc*175;
suhu=suhu-12;
http://hgenius-electrical-eng.blogspot.com/2011/03/mengenal-adc.html
0 komentar:
Posting Komentar