Witam. Mam problem z ustawieniem z tego co zauważyłem rejestrów ADMUX i odczytem z właściwego ADC. Głównie chodzi mi o ADC4. Bo zamiast wyniku z ADC4 pojawia mi się w miejscu tego pomiaru wynik z ADC0 :/
Oto kod:
return 0;
}
Dodaję że niejest to mój kod...i chciałbym się dowiedzieć jak prawidłowo ustawiać ADMUX do konkretnego ADC żeby nie mieszało mi wyników????
Oto kod:
int main(void)
{
while(1)
{
prad = 0;
napiecie = 0;
temperatura = 0;
ADC_temp = 0;
ADC_temp_sr = 0;
Uin = 0;
pradogr = 0;
ogran = 0;
// pomiar wartości ADC0
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);
}
}
temperatura = 0;
ADC_temp = 0;
ADC_temp_sr = 0;
Uin = 0;
//prad = 0;
// pomiar wartosci ADC1
ADMUX |= _BV(PC0);
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;
prad = Uin/Rpom;
prad_int = prad;
prad_float = (prad*100)-(prad_int*100);
}
}
temperatura = 0;
ADC_temp = 0;
ADC_temp_sr = 0;
Uin = 0;
ADMUX &= ~_BV(PC0);
// pomiar wartosci ADC2
ADMUX |= _BV(PC1);
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;
temperatura = Uin*90;
}
}
ADMUX &= ~_BV(PC1);
ADC_temp = 0;
ADC_temp_sr = 0;
Uin = 0;
//prad = 0;
// pomiar wartosci ADC4
ADMUX |= _BV(PC3);
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;
pradogr = (Imax/1024)*ADC_temp;
ogran = pradogr;
pradogr_int = ogran;
pradogr_float = (ogran*100)-(pradogr_int*100);
}
}
ADMUX &= ~_BV(PC3);return 0;
}
Dodaję że niejest to mój kod...i chciałbym się dowiedzieć jak prawidłowo ustawiać ADMUX do konkretnego ADC żeby nie mieszało mi wyników????