Witam.
Mam następujący problem: Próbuję dokonać pomiaru napięć (przedział od 0 do 5V) z 3ech kanałów ADC. pomiar z pojedynczego kanału działa prawidłowo jednak gdy chce mierzyć wartości z więcej niż jednego kanału na raz to wyniki dla każdego pomiaru są takie same:/ mianowicie wartości CZ1 = CZ2 = CZ3 co nie jest prawidłowym pomiarem.
Poniżej przedstawiam kod z którego korzystam:
pomiar wyglada następująco:
Czy ktoś spotkał się może z podobnym problemem?
Mam następujący problem: Próbuję dokonać pomiaru napięć (przedział od 0 do 5V) z 3ech kanałów ADC. pomiar z pojedynczego kanału działa prawidłowo jednak gdy chce mierzyć wartości z więcej niż jednego kanału na raz to wyniki dla każdego pomiaru są takie same:/ mianowicie wartości CZ1 = CZ2 = CZ3 co nie jest prawidłowym pomiarem.
Poniżej przedstawiam kod z którego korzystam:
#define Adc0On ADMUX |= (1<<ADLAR)|(1<<REFS1)|(1<<REFS0)|(0<<MUX0);
#define Adc1On ADMUX |= (1<<ADLAR)|(1<<REFS1)|(1<<REFS0)|(1<<MUX0);
#define Adc2On ADMUX |= (1<<ADLAR)|(1<<REFS1)|(1<<REFS0)|(1<<MUX1);
#define Adc3On ADMUX |= (1<<ADLAR)|(1<<REFS1)|(1<<REFS0)|(1<<MUX0)|(1<<MUX1);
#define Adc4On ADMUX |= (1<<ADLAR)|(1<<REFS1)|(1<<REFS0)|(1<<MUX2);
#define Adc5On ADMUX |= (1<<ADLAR)|(1<<REFS1)|(1<<REFS0)|(1<<MUX0)|(1<<MUX2);
.....
uint8_t get_ADC(int channel){
switch(channel){
case 0:Adc0On;
break;
case 1:Adc1On;
break;
case 2:Adc2On;
break;
case 3:Adc3On;
break;
case 4:Adc4On;
break;
case 5:Adc5On;
break;
}
ADCSRA |= (1<<ADEN)|(1<<ADSC);
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}
.......
void czujniki_k(int nr) {
switch(nr){
case 1:
CZ1=get_ADC(0); // lewy
itoa(CZ1, p_CZ1, 10);
break;
case 2:
CZ2=get_ADC(3); // środek
itoa(CZ2, p_CZ2, 10);
break;
case 3:
CZ3=get_ADC(4); // prawy
itoa(CZ3, p_CZ3, 10);
break;
}
}pomiar wyglada następująco:
czujniki_k(1);
Transmit_data(" cz1-");
Transmit_data(p_CZ1);
_delay_ms(500);
czujniki_k(2);
Transmit_data(" cz2-");
Transmit_data(p_CZ2);Czy ktoś spotkał się może z podobnym problemem?
