LM35 sangatlah gampang dipakai , hanya dengan memberikan tegangan VCC (kali ini pake 5V) dan ground, maka di pin output akan terjadi perubahan tegangan sebesar 10mV tiap perubahan 1 derajat Celcius.
Skematik dari termometer tidak jauh berbeda dengan project sebelumnya, hanya mengganti trimpot dengan LM35
klik untuk memperbesar
Karena LM35 menggunakan step per derajat sebesar 10mili volt dan mega 8 memiliki resolusi 10 bit dan step per bit adalah 4,9 mili volt, maka secara mudah pembacaan ADC dari LM 35 dapat langsung dirumuskan sebagai
SUHU = PEMBACAAN ADC / 2
Skrip dibawah ini merupakan cuplikan dari main program, untuk inisialisasi dan lainnya dapat dibaca pada pembahasan dasar adc sebelumnya.
int main(void) { uint16_t baca,decimal,pecahan; char derajat = 0xDF; // karakter derajat char dum; lcd_init(LCD_DISP_ON); lcd_clrscr(); lcd_gotoxy(0,0); lcd_puts("TEST ADC ATMEGA8"); initADC(); while(1) { baca=ReadADC(0); //baca ADC lcd_gotoxy(0,1); lcd_puts("Suhu="); itoa(baca/2,&dum); // konversi ke suhu lcd_puts(&dum); lcd_putc(','); itoa((baca%2)*5,&dum); // kasi resolusi 0.5 lcd_puts(&dum); lcd_putc(' '); lcd_putc(derajat); lcd_putc('C'); _delay_ms(100); } return 0; }
hasilnya seperti berikut :
MEMBUAT PEMBACAAN ADC LEBIH STABIL
Dari video diatas, kita lihat hasil pengukuran terlalu loncat2 ....wahh parah, walaupun mengikuti saran menambah filter LC ke AVCC seperti di datasheet dan C ke Aref
wahhh ...pusing juga belom sukses...akhirnya kita baca lagi datasheet dibagian "ADC NOISE CANCELER"
yang aku lakukan dengan menambah LC filter dinamakan analog noise canceler. Yang belum aku lakukan adalah menambahkan "ADC NOISE REDUCTION" yaitu memberikan posisi "SLEEP" saat sebelum konversi dilakukan ...
dan satu lagi, ketika sleep mode dan konversi, penggunaan output di minimalkan seperti dengan mematikan output ke 7 segment
void initADC() { ADMUX=(1<<REFS0);// Aref=AVcc; ADCSRA|=(1<<ADEN)|(1<<ADIE)|(7<<ADPS0); //interupt aktif sei(); } uint16_t ReadADC(uint8_t ch) { posisi(0); //MATIKAN OUTPUT KE 7 SEGMENT MCUCR |= _BV(SE); // Sleep Enable, jadi abis ini processor diturunkan loadnya MCUCR |=_BV(SM0); // mode ADC NOISE REDUTION //Select ADC Channel ch must be 0-7 ch=ch&0b00000111; ADMUX|=ch; //Start Single conversion ADCSRA|=(1<<ADSC); //Wait for conversion to complete while(!(ADCSRA & (1<<ADIF))); //Clear ADIF by writing one to it ADCSRA|=(1<<ADIF); return(ADC); MCUCR &= ~_BV(SE) ; //BANGUN DARI SLEEP }
dan voilaaa .....pembacaan ADC dari LM 35 menjadi lebih stabil
SELAMAT MENCOBA
Klu untuk menampilakan nilai pecahan pada seven segmentnya gimn ya...misal nilai suhu menjadi 33.4 C...
BalasHapus