[an error occurred while processing this directive]
|
Возникла проблема с точностью измерений.
Код такой:
//----BEGIN----//
...
#define DECIMATION 1728
float adc_res;
...
CKCON=0; // Clock control
// Timer setup
//USEC=10; // One Microseconds Register
ACLK=9; // Analog clock
// ADC Setup
PDCON&=0x0F7; // turn on ADC
ADMUX=0x18; // Select RDT
ADCON0=0x30; // BOD->off, EVREF->on, VREFH=2.5, EBUF->disable, PGA=1
// Freq=10Hz
ADCON2=DECIMATION&0xFF; // LSB of decimation
ADCON3=(DECIMATION>>8)&0x07; // MSB of decimation
ADCON1=0x01; // bipolar, filter:auto, self calibration Ofset & Gain
ADC_Skip_Time(4);
while(1){ значения сопротивления получаются 53.40-53.43 Я правильно понимаю:
E-mail:
info@telesys.ru
for(i=0;i
adc_res+=bipolar();
}
adc_res=adc_res/SAMPLES; // average result
adc_res=adc_res*5050/0x800000; // resistance
}
//----END----//
На 0x18(ADMUX) стоит резистор,
его точное сопротивление 53.504 (в этом не приходится сомневаться)
В чем может быть проблема? ...
ACLK задает частоту дискретизации выходных данных (f) с АЦП по формуле:
f=11059200/(ACLK+1)/64;
ADCON[2:3] - частоту ... э-э-э не могу сформулировать правильно
(в документации Decimation Ratio-Коэффициент Прореживания?)по формуле:
ADCON[2:3]=f/f1, где f1 - нужная частота.
В моем случае f=17.28 kHz
f1=10 HZ
при изменении ACLK, показания значительно изменяются.
Например, при ACLK=3 (т.е. f=43.2 kHZ) значения где-то 53.5-53.52
Так и должно быть?
Ответы