Hello Guys,
I'm trying to read values from my lm35 temp. sensor. I've written a code, but I always get a still value, which is too high, in my opinion. It's 1023. I'm assuming a lower value, because it's ADC/2=temperature, in Celsious. According my readings.
I use atmega128. And the lm35 is on the PF0;
What should I change in the code?
Plus, in the ISR, if I devide the ADC_val by 2, I see nothing on the LCD. oO
#include#include "lcd_head.h" #include #define F_CPU 16000000UL void ADC_Init(void); void ReadADC (void); volatile unsigned int ADC_val=0; volatile unsigned char a=0; void main() { DDRF=0x00; DDRB=0xF0; ADC_Init(); LCD_Init(); LCD_SendCommand(0x01); while(1) { ReadADC(); LCD_SendCommand(0x80); a=(ADC_val/1000)+48; LCD_SendData(a); a=(ADC_val%1000/100)+48; LCD_SendData(a); a=(ADC_val%100/10)+48; LCD_SendData(a); a=(ADC_val%10)+48; LCD_SendData(a); } } void ReadADC(void) { //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); } void ADC_Init(void) { ADCSRA|=(1<<ADPS0) | (1<<ADPS1) | (1<<ADPS2); //prescaler 128 ADCSRA|=(1<<REFS0); //ref V AVCC ADMUX|=(1<<MUX0); ADCSRA|=(1<<ADFR); //free running mode ADCSRA|=(1<<ADEN); //enable ADC ADCSRA|=(1<<ADIE); //enable ADC interrupt sei(); ADCSRA|=(1<<ADSC); //conv. start } ISR(ADC_vect) { ADC_val=(ADCL); ADC_val+=(ADCH<<8); ADC_val/=2; }