09/01/17 12:48:43
static uchar replybuf[8];
usbMsgPtr = replybuf;
int i_adch;
int i_adcl;
double ret;
//ADC開始
DDRC = 0x00;
ADCSRA=0b11000111;
ADMUX= 0b01000101;
while((ADCSRA & 0x10)==0){;}
i_adcl=ADCL;
i_adch=ADCH;
ret = (ADCW>>2);
ADCSRA=0x96;
//ADC終了
このようなプログラムでAD変換を行っているのですが、低い値を取得した際にADCLの値(i_adcl)が246や255といったおかしい値になってしまいます。
例でいうと、70-47-32-17-4-246-7-3-239...といった具合です。
ノイズ源なども取り除いたのですが、値が突然暴走するのはプログラムに問題があるような気がします。
できれば0-1024でしっかり値をとりたいのですが、何か方法はありませんか?
使用チップはmega88で、環境はWinAVRを使用です。