Zdar lidi,
jsem zase nekde v koncich. Delam nekde nakou chybu.
Mam M8, mam v ni program kde potrebuju mit stale aktivni PWM regulaci (motory), vystupy a komunikaci a jeste potrebuju merit na 2 kanalech ADC.
PWM funguje jak ma, vpodstate vsecko az na ten ADC.
Ke kanalu 0 a kanalu 1 mam pripojene potenciometry. Klasicky mezi Vcc a GND a vystup jde na kanal.
Problem je v tom, ze at otacim kterymkoliv potenciometrem, promitne se zmena i v druhem kanalu
Merici funkce je jasna
int zmeradc(char kanal)
{
//kanal 0 - napeti aku 0-20V
//kanal 1 - napeti ze solaru 0-25V
//kanal 2 -
//kanal 3 -
ADMUX=kanal | (1<<REFS0); //0b01000000+kanal; //ad prevodnik vref=avcc a kondikem na aref pinu
sbi(ADCSRA,ADSC); //start mereni
while (!(ADCSRA & 16)); //cekani na konec mereni
//ADCSRA|=(1<<ADIF); //tohle jsem mel a nemel, a chova se to stejne
return ADC;
}//zmeradc
funkci volam 2x, jednou v parametru predam hodnotu 0, podruhe hodnotu 1.
Hodnoty si pote prepocitam na pozadovany rozsah a odeslu uartem do pc pro kontrolu.
Kanal jedna ma rozsah prepocitanych hodnot 0-250, kanal nula ma rozsah 0-200
Do pc mi prijdou pocatecni hodnoty 0,0
Pohnu s jednim potenciometrem (treba kanal 0) a dojde mi napriklad 10,0
Pohnu vice a uz mi dojde treba 90,8
Dam to nadoraz tak mi dojde 240,40
Podobne je tomu naopak
Copak delam spatne?