Witam ponownie!
Sądziłem, że już sobie poradzę ale coś mi nie gra w programie. Nie wprowadziłem jeszcze modyfikacji mających na celu pomiar temp ujemnych bo najpierw chciałem mieć pewność, ze dobrze mierze te dodanie i tu zonk.
Otóż podłączyłem wszystko jak sądzę dobrze, jeśli tak nie jest to proszę o korekty:
korzystam z napięcia odniesienia wewnątrz procka więc nóżkę Vref podłączyłem przez kondensator do masy. Zasilanie całości z 3,3V (LM35 też tym zasilam i pomiar napięcia wyjściowego za pomocą miernika zgodny ze wskazaniem termometru na ścianie więc to raczej nie jest źródłem problemu). Zasilanie również przez kondensator do masy (gdzieś wyczytałem, że tak należy uczynić).
Problem polega na tym, że wynik na LCD wyrzucam bez jakichkolwiek przeliczeń napięcia na temp czyli jak nic moim oczom powinna się ukazać wartość 230 (mV w sumie), a tu jak na złość pokazuje się wartość 23. Dlaczego tak się dzieje? Co robię źle? Zaznaczam że na mierniku widzę 230mV.
Poniżej zamieszczam kod który to obsługuje:
inicjalizacja:
void init_adc()
{
DDRC &= ~_BV(PC0);
PORTC &= ~_BV(PC0);
ADMUX &= ~_BV(MUX0);
ADMUX &= ~_BV(MUX1);
ADMUX &= ~_BV(MUX2);
ADMUX &= ~_BV(MUX3);
ADMUX |= _BV(REFS0);
ADMUX |= _BV(REFS1);
ADMUX |= _BV(ADLAR);
ADCSRA |= _BV(ADPS1);
ADCSRA |= _BV(ADPS2);
ADCSRA |= _BV(ADEN);
}
pomiar:
double pomiar_adc()
{
ADCSRA |= _BV(ADSC);
while ( bit_is_set(ADCSRA, ADSC) )
{
}
double wynik = ADCH;
return wynik;
}
a tym to wyświetlam:
void wyswietl_temp(double pomiar)
{
char temp[5];
itoa(pomiar, temp, 10);
LCD_GoTo(9,0);
if ( pomiar < 10 )
{
LCD_WriteText("0");
LCD_WriteText(temp);
LCD_WriteText(" st");
}
else
{
LCD_WriteText(temp);
LCD_WriteText(" st");
}
}
Jeśli ktoś miałby jakieś sugestie to będę zobowiązany!