Chciałem zrobić pomiar napięcia i temperatury na atmega8 i mam problem z przetwornikiem. Pod kanal 0 ADC0 podłączony mam potencjometr 100k a pod kanal 1 ADC1 mam podłączony lm35. Problem polega na tym, że jak kręcę potencjometrem to wartość temperatury mi się zmienia. Dlaczego tak się dzieje?
Oto kod:
![[c] Atmega8: Zmiana potencjometru wpływa na odczyt temperatury z LM35, dlaczego? [c] Atmega8: Zmiana potencjometru wpływa na odczyt temperatury z LM35, dlaczego?](https://obrazki.elektroda.pl/4569790900_1336469471_thumb.jpg)
Oto kod:
#include <avr/io.h>
#include <util/delay.h>
#include "lcd.h"
void InitADC()
{
ADMUX|=(1<<REFS0); // Aref=AVcc;
ADCSRA|=(1<<ADEN); // aktywowanie ADC,
}
uint16_t ReadADC(uint8_t ch)
{
ADMUX &= 0xf0; //zerowanie 4 młodszych bitów
ADMUX |= ch; //ustawianie numeru kanału
ADCSRA|=(1<<ADSC); //start pomiaru
while(!(ADCSRA & (1<<ADIF))); //oczekiwanie na koniec
ADCSRA &= ~((1 << ADSC) | (1 << ADIF)); //zeruj flage konwersji i rozkaz rozpoczecia
return(ADC);
}
void main()
{
uint16_t adc1, adc2;
uint8_t t;
//inicjalizacja LCD
InitLCD(0);
InitADC();
//Wyczysc ekran
LCDClear();
LCDWriteString("Napiecie:");
LCDWriteStringXY(0,1,"Temperatura:");
while(1)
{
//pomiar napiecia
adc1=ReadADC(0);
adc1=adc1*0.488; //ADC*5/1024*100
LCDGotoXY(10,0);
LCDWriteInt(adc1/100, 1);
LCDWriteString(",");
LCDWriteInt(adc1%100, 2);
_delay_ms(500);
//pomiar temperatury
adc2=ReadADC(1);
//konwersja do stopni celsjusza
//t=adc2/2;
LCDGotoXY(12,1);
LCDWriteInt(adc2, 4);
}
}