From cca9e94ba7c88f0637248260ffd5e383ee9d9519 Mon Sep 17 00:00:00 2001 From: David Schleef Date: Sat, 27 May 2000 00:18:53 +0000 Subject: [PATCH] added calibration for DAQCard-ai-16xe-50 --- comedi_calibrate/comedi_calibrate.c | 93 ++++++++++++++++++++++++++--- 1 file changed, 84 insertions(+), 9 deletions(-) diff --git a/comedi_calibrate/comedi_calibrate.c b/comedi_calibrate/comedi_calibrate.c index aa45dbd..9f2ca12 100644 --- a/comedi_calibrate/comedi_calibrate.c +++ b/comedi_calibrate/comedi_calibrate.c @@ -57,6 +57,8 @@ void write_caldac(comedi_t *dev,int subdev,int addr,int val); void check_gain(int ad_chan,int range); double check_gain_chan(int ad_chan,int range,int cdac); +int dump_flag; + void update_caldac(int i); void reset_caldacs(void); @@ -152,7 +154,8 @@ int main(int argc, char *argv[]) drivername=comedi_get_driver_name(dev); - if(!strcmp(drivername,"atmio-E") || !strcmp(drivername,"pcimio-E")) + if(!strcmp(drivername,"atmio-E") || !strcmp(drivername,"pcimio-E") + || !strcmp(drivername,"ni_mio_cs")) cal_ni_mio_E(); return 0; @@ -163,6 +166,7 @@ void cal_ni_mio_E(void) { char *boardname; double ref; + int uv; int i; boardname=comedi_get_board_name(dev); @@ -297,7 +301,9 @@ void cal_ni_mio_E(void) printf("lsb=%d msb=%d\n",read_eeprom(430),read_eeprom(431)); - ref=5.000+(0.001*(read_eeprom(430)+read_eeprom(431))); + uv=read_eeprom(430)+256*read_eeprom(431); + if(uv>=0x8000)uv-=0x10000; + ref=5.000+1.0e-6*uv; printf("ref=%g\n",ref); reset_caldacs(); @@ -324,7 +330,68 @@ void cal_ni_mio_E(void) read_chan(0,i); } - //return; + return; + } + if(!strcmp(boardname,"DAQCard-ai-16xe-50")){ +/* + * results of channel dependence test: + * + * [0] [1] [2] [3] [8] + * offset, lo -2.2e-6 1.5e-4* 2.5e-7 + * offset, hi 7.8e-7* 1.3e-7 + * offset, unip 7.4e-4 1.1e-5 1.5e-4 5.5e-7 + * ref -3.7e-4 -5.4e-6 1.5e-4* 5.5e-7 + * + * thus, 2 is postgain offset, 8 is pregain, 0 is + * unipolar offset, 1 is gain + * + * layout + * + * 0 AI unipolar offset 7.4e-4 + * 1 AI gain -5.4e-6 + * 2 AI postgain offset 1.5e-4 + * 3 unknown + * 4 AO + * 5 AO + * 6 AO + * 7 AO + * 8 AI pregain offset 2.5e-7 + * 9 unknown + * 10 unknown + */ + printf("last factory calibration %02d/%02d/%02d\n", + read_eeprom(508),read_eeprom(507),read_eeprom(506)); + + printf("lsb=%d msb=%d\n",read_eeprom(446),read_eeprom(447)); + + uv=read_eeprom(446)+256*read_eeprom(447); + if(uv>=0x8000)uv-=0x10000; + ref=5.000+1.0e-6*uv; + printf("ref=%g\n",ref); + + reset_caldacs(); + + printf("postgain offset\n"); + ni_mio_ai_postgain_cal_2(0,2,0,7,200.0); + + printf("pregain offset\n"); + chan_cal(0,8,7,0.0); + chan_cal(0,8,7,0.0); + + printf("unipolar offset\n"); + chan_cal(0,0,8,0.0); + chan_cal(0,0,8,0.0); + + printf("gain offset\n"); + chan_cal(5,1,0,5.0); + chan_cal(5,1,0,5.0); + + printf("results (offset)\n"); + for(i=0;i<16;i++){ + read_chan(0,i); + } + + return; } { @@ -449,8 +516,6 @@ void caldac_dependence(int caldac) } } -int dump_flag; - void dump_curve(int adc,int caldac) { linear_fit_t l; @@ -527,6 +592,7 @@ double check_gain_chan(int ad_chan,int range,int cdac) double check_gain_chan_x(linear_fit_t *l,int ad_chan,int range,int cdac) { int orig,i,n; + int step; new_sv_t sv; double sum_err; int sum_err_count=0; @@ -539,9 +605,18 @@ double check_gain_chan_x(linear_fit_t *l,int ad_chan,int range,int cdac) new_sv_init(&sv,dev,0,ad_chan,range,AREF_OTHER); + step=n/256; + if(step<1)step=1; + l->n=0; + + caldacs[cdac].current=0; + update_caldac(cdac); + + new_sv_measure(&sv); + sum_err=0; - for(i=0;in++; } caldacs[cdac].current=orig; update_caldac(cdac); l->yerr=sum_err/sum_err_count; - l->n=n; - l->dx=1; + l->dx=step; l->x0=0; linear_fit_monotonic(l); -- 2.26.2