Witam. Chciałbym zapytać Was co morze być powodem że w przedstawionym poniżej mierniku na Atmega8 przy pomiarze napięcia pomiar wyświetlony na LCD różni się od tego co wskazuje multimetr (Unit UT54)???. Dodam że miernik ten jest podłączony do zasilacza regulowanego 0-35V. Największy problem mam z tym że błąd między wskazaniem miernika na Atmege8 a multimetrem nie jest stały, np. gdy ustawię 3V na zasilaczu multimetr wskazuje mniej więcej 3.00 wskazanie na LCD też jest w granicach błędu (tysięczne części po przecinku), ale gdy np. ustawię 10V (multimetr pokazuje 10V) to na LCD pomiar różni się już o ok. "20 setek". Czy wyższe napięcie ten gorzej :/ Przy 30V pomiar jest "rozjechany" już o ponad 0.5V. Próbowałem skalibrować dzielnikiem przy atmedze (dzielnik 1:13.33) (Rezystory to 100k i 7k5) ale to nie eliminuje rosnącego błędu. Zmieniłem już nawet napięcie referencyjne na zewnętrzne 5V (wyeliminowało to "skakanie" setnych i tysięcznych części po przecinku).
Może pomiar jest źle przeliczany...ciężko mi się domyślić co może być nie tak bo jestem początkującym elektronikiem
:/ Lub może ten zasilacz "nie chce" dobrze współgrać z miernikiem:
https://www.elektroda.pl/rtvforum/topic1560889-0.html
Oto schemat miernika:
Część kodu programu:
Zdefiniowane wartości:
Może pomiar jest źle przeliczany...ciężko mi się domyślić co może być nie tak bo jestem początkującym elektronikiem
https://www.elektroda.pl/rtvforum/topic1560889-0.html
Oto schemat miernika:
Część kodu programu:
Zdefiniowane wartości:
#define Uref 5.02 // Napięcie referencyjne
#define Rpom 0.1 // Rezystor pomiarowy
#define R1 100000 // Dzielnik - R1 100k ohm
#define R2 7500 // Dzielnik - R2 7k5 ohm // pomiar wartosci ADC0 - napiecie
for(i = 0 ; i < 20 ; i++)
{
ADCSRA|= _BV(ADSC); //start pojedynczej konwersji
while(bit_is_set(ADCSRA,ADSC)){};
ADC_L = ADCL;
ADC_H = ADCH;
ADC_temp = ADC_H*256+ADC_L;
ADC_temp_sr = ADC_temp_sr + ADC_temp;
if(i==19)
{
ADC_temp = ADC_temp_sr/20;
Uin = (Uref/1024)*ADC_temp;
napiecie = ((R1+R2)/R2)*Uin;
napiecie_int = napiecie;
napiecie_float = (napiecie*100)-(napiecie_int*100);
}
}