611x calibration support. More conversion to new CONFIG_ALT_SOURCE usage
(backward compatibility with AREF_OTHER should still work )
This commit is contained in:
parent
a838d43cea
commit
962c9d0a89
4 changed files with 274 additions and 147 deletions
|
@ -42,7 +42,7 @@ typedef struct{
|
|||
|
||||
//comedi_range *range;
|
||||
//int maxdata;
|
||||
|
||||
lsampl_t reference_source;
|
||||
double target;
|
||||
}observable;
|
||||
|
||||
|
|
|
@ -124,6 +124,7 @@ int cb_setup( calibration_setup_t *setup, const char *device_name )
|
|||
break;
|
||||
}
|
||||
}
|
||||
if( i == num_boards ) return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -188,9 +189,8 @@ int setup_cb_pci_1602_16( calibration_setup_t *setup )
|
|||
|
||||
int init_observables_64xx( calibration_setup_t *setup )
|
||||
{
|
||||
comedi_insn tmpl, po_tmpl;
|
||||
comedi_insn tmpl;//, po_tmpl;
|
||||
observable *o;
|
||||
static const int ai_subdev = 0;
|
||||
int retval;
|
||||
float target;
|
||||
enum source_eeprom_addr
|
||||
|
@ -213,32 +213,28 @@ int init_observables_64xx( calibration_setup_t *setup )
|
|||
CAL_SRC_DAC1 = 7,
|
||||
};
|
||||
|
||||
#if 0
|
||||
memset( &po_tmpl, 0, sizeof(po_tmpl) );
|
||||
po_tmpl.insn = INSN_CONFIG;
|
||||
po_tmpl.n = 2;
|
||||
po_tmpl.subdev = ai_subdev;
|
||||
po_tmpl.subdev = setup->ad_subdev;
|
||||
#endif
|
||||
|
||||
memset( &tmpl, 0, sizeof(tmpl) );
|
||||
tmpl.insn = INSN_READ;
|
||||
tmpl.n = 1;
|
||||
tmpl.subdev = ai_subdev;
|
||||
tmpl.subdev = setup->ad_subdev;
|
||||
|
||||
o = setup->observables + OBS_0V_RANGE_10V_BIP_64XX;
|
||||
o->name = "ground calibration source, 10V bipolar range, ground referenced";
|
||||
o->preobserve_insn = po_tmpl;
|
||||
o->preobserve_insn.data = o->preobserve_data;
|
||||
o->preobserve_insn.data[0] = INSN_CONFIG_ALT_SOURCE;
|
||||
o->preobserve_insn.data[1] = CAL_SRC_GROUND;
|
||||
o->reference_source = CAL_SRC_GROUND;
|
||||
o->observe_insn = tmpl;
|
||||
o->observe_insn.chanspec = CR_PACK( 0, 0, AREF_GROUND) | CR_ALT_SOURCE | CR_ALT_FILTER;
|
||||
o->target = 0.0;
|
||||
|
||||
o = setup->observables + OBS_7V_RANGE_10V_BIP_64XX;
|
||||
o->name = "7V calibration source, 10V bipolar range, ground referenced";
|
||||
o->preobserve_insn = po_tmpl;
|
||||
o->preobserve_insn.data = o->preobserve_data;
|
||||
o->preobserve_insn.data[0] = INSN_CONFIG_ALT_SOURCE;
|
||||
o->preobserve_insn.data[1] = CAL_SRC_7V;
|
||||
o->reference_source = CAL_SRC_7V;
|
||||
o->observe_insn = tmpl;
|
||||
o->observe_insn.chanspec = CR_PACK( 0, 0, AREF_GROUND) | CR_ALT_SOURCE | CR_ALT_FILTER;
|
||||
o->target = 7.0;
|
||||
|
@ -253,9 +249,8 @@ int init_observables_64xx( calibration_setup_t *setup )
|
|||
|
||||
int init_observables_60xx( calibration_setup_t *setup )
|
||||
{
|
||||
comedi_insn tmpl, po_tmpl;
|
||||
comedi_insn tmpl;//, po_tmpl;
|
||||
observable *o;
|
||||
static const int ai_subdev = 0;
|
||||
int retval;
|
||||
float target;
|
||||
enum source_eeprom_addr
|
||||
|
@ -277,33 +272,27 @@ int init_observables_60xx( calibration_setup_t *setup )
|
|||
CAL_SRC_DAC0 = 6,
|
||||
CAL_SRC_DAC1 = 7,
|
||||
};
|
||||
|
||||
#if 0
|
||||
memset( &po_tmpl, 0, sizeof(po_tmpl) );
|
||||
po_tmpl.insn = INSN_CONFIG;
|
||||
po_tmpl.n = 2;
|
||||
po_tmpl.subdev = ai_subdev;
|
||||
|
||||
po_tmpl.subdev = setup->ad_subdev;
|
||||
#endif
|
||||
memset( &tmpl, 0, sizeof(tmpl) );
|
||||
tmpl.insn = INSN_READ;
|
||||
tmpl.n = 1;
|
||||
tmpl.subdev = ai_subdev;
|
||||
tmpl.subdev = setup->ad_subdev;
|
||||
|
||||
o = setup->observables + OBS_0V_RANGE_10V_BIP_60XX;
|
||||
o->name = "ground calibration source, 10V bipolar range, ground referenced";
|
||||
o->preobserve_insn = po_tmpl;
|
||||
o->preobserve_insn.data = o->preobserve_data;
|
||||
o->preobserve_insn.data[0] = INSN_CONFIG_ALT_SOURCE;
|
||||
o->preobserve_insn.data[1] = CAL_SRC_GROUND;
|
||||
o->reference_source = CAL_SRC_GROUND;
|
||||
o->observe_insn = tmpl;
|
||||
o->observe_insn.chanspec = CR_PACK( 0, 0, AREF_GROUND) | CR_ALT_SOURCE | CR_ALT_FILTER;
|
||||
o->target = 0.0;
|
||||
|
||||
o = setup->observables + OBS_5V_RANGE_10V_BIP_60XX;
|
||||
o->name = "5V calibration source, 10V bipolar range, ground referenced";
|
||||
o->preobserve_insn = po_tmpl;
|
||||
o->preobserve_insn.data = o->preobserve_data;
|
||||
o->preobserve_insn.data[0] = INSN_CONFIG_ALT_SOURCE;
|
||||
o->preobserve_insn.data[1] = CAL_SRC_5V;
|
||||
o->reference_source = CAL_SRC_5V;
|
||||
o->observe_insn = tmpl;
|
||||
o->observe_insn.chanspec = CR_PACK( 0, 0, AREF_GROUND) | CR_ALT_SOURCE | CR_ALT_FILTER;
|
||||
o->target = 5.0;
|
||||
|
@ -318,9 +307,8 @@ int init_observables_60xx( calibration_setup_t *setup )
|
|||
|
||||
int init_observables_4020( calibration_setup_t *setup )
|
||||
{
|
||||
comedi_insn tmpl, po_tmpl;
|
||||
comedi_insn tmpl;//, po_tmpl;
|
||||
observable *o;
|
||||
static const int ai_subdev = 0;
|
||||
float target;
|
||||
int retval;
|
||||
enum source_eeprom_addr
|
||||
|
@ -334,23 +322,20 @@ int init_observables_4020( calibration_setup_t *setup )
|
|||
CAL_SRC_625mV = 6,
|
||||
CAL_SRC_GROUND = 7,
|
||||
};
|
||||
|
||||
#if 0
|
||||
memset( &po_tmpl, 0, sizeof(po_tmpl) );
|
||||
po_tmpl.insn = INSN_CONFIG;
|
||||
po_tmpl.n = 2;
|
||||
po_tmpl.subdev = ai_subdev;
|
||||
|
||||
po_tmpl.subdev = setup->ad_subdev;
|
||||
#endif
|
||||
memset( &tmpl, 0, sizeof(tmpl) );
|
||||
tmpl.insn = INSN_READ;
|
||||
tmpl.n = 1;
|
||||
tmpl.subdev = ai_subdev;
|
||||
tmpl.subdev = setup->ad_subdev;
|
||||
|
||||
o = setup->observables + 0;
|
||||
o->name = "ground calibration source, ch 0, 5V bipolar range, ground referenced";
|
||||
o->preobserve_insn = po_tmpl;
|
||||
o->preobserve_insn.data = o->preobserve_data;
|
||||
o->preobserve_insn.data[0] = INSN_CONFIG_ALT_SOURCE;
|
||||
o->preobserve_insn.data[1] = CAL_SRC_GROUND;
|
||||
o->reference_source = CAL_SRC_GROUND;
|
||||
o->observe_insn = tmpl;
|
||||
o->observe_insn.chanspec = CR_PACK( 0, 0, AREF_GROUND) | CR_ALT_SOURCE | CR_ALT_FILTER;
|
||||
o->target = 0.0;
|
||||
|
@ -358,40 +343,28 @@ int init_observables_4020( calibration_setup_t *setup )
|
|||
|
||||
o = setup->observables + 1;
|
||||
o->name = "ground calibration source, ch 1, 5V bipolar range, ground referenced";
|
||||
o->preobserve_insn = po_tmpl;
|
||||
o->preobserve_insn.data = o->preobserve_data;
|
||||
o->preobserve_insn.data[0] = INSN_CONFIG_ALT_SOURCE;
|
||||
o->preobserve_insn.data[1] = CAL_SRC_GROUND;
|
||||
o->reference_source = CAL_SRC_GROUND;
|
||||
o->observe_insn = tmpl;
|
||||
o->observe_insn.chanspec = CR_PACK( 1, 0, AREF_GROUND) | CR_ALT_SOURCE | CR_ALT_FILTER;
|
||||
o->target = 0.0;
|
||||
|
||||
o = setup->observables + 2;
|
||||
o->name = "ground calibration source, ch 2, 5V bipolar range, ground referenced";
|
||||
o->preobserve_insn = po_tmpl;
|
||||
o->preobserve_insn.data = o->preobserve_data;
|
||||
o->preobserve_insn.data[0] = INSN_CONFIG_ALT_SOURCE;
|
||||
o->preobserve_insn.data[1] = CAL_SRC_GROUND;
|
||||
o->reference_source = CAL_SRC_GROUND;
|
||||
o->observe_insn = tmpl;
|
||||
o->observe_insn.chanspec = CR_PACK( 2, 0, AREF_GROUND) | CR_ALT_SOURCE | CR_ALT_FILTER;
|
||||
o->target = 0.0;
|
||||
|
||||
o = setup->observables + 3;
|
||||
o->name = "ground calibration source, ch 3, 5V bipolar range, ground referenced";
|
||||
o->preobserve_insn = po_tmpl;
|
||||
o->preobserve_insn.data = o->preobserve_data;
|
||||
o->preobserve_insn.data[0] = INSN_CONFIG_ALT_SOURCE;
|
||||
o->preobserve_insn.data[1] = CAL_SRC_GROUND;
|
||||
o->reference_source = CAL_SRC_GROUND;
|
||||
o->observe_insn = tmpl;
|
||||
o->observe_insn.chanspec = CR_PACK( 3, 0, AREF_GROUND) | CR_ALT_SOURCE | CR_ALT_FILTER;
|
||||
o->target = 0.0;
|
||||
|
||||
o = setup->observables + 4;
|
||||
o->name = "4.375V calibration source, ch 0, 5V bipolar range, ground referenced";
|
||||
o->preobserve_insn = po_tmpl;
|
||||
o->preobserve_insn.data = o->preobserve_data;
|
||||
o->preobserve_insn.data[0] = INSN_CONFIG_ALT_SOURCE;
|
||||
o->preobserve_insn.data[1] = CAL_SRC_4375mV;
|
||||
o->reference_source = CAL_SRC_4375mV;
|
||||
o->observe_insn = tmpl;
|
||||
o->observe_insn.chanspec = CR_PACK( 0, 0, AREF_GROUND) | CR_ALT_SOURCE | CR_ALT_FILTER;
|
||||
o->target = 4.375;
|
||||
|
@ -401,10 +374,7 @@ int init_observables_4020( calibration_setup_t *setup )
|
|||
|
||||
o = setup->observables + 5;
|
||||
o->name = "4.375V calibration source, ch 1, 5V bipolar range, ground referenced";
|
||||
o->preobserve_insn = po_tmpl;
|
||||
o->preobserve_insn.data = o->preobserve_data;
|
||||
o->preobserve_insn.data[0] = INSN_CONFIG_ALT_SOURCE;
|
||||
o->preobserve_insn.data[1] = CAL_SRC_4375mV;
|
||||
o->reference_source = CAL_SRC_4375mV;
|
||||
o->observe_insn = tmpl;
|
||||
o->observe_insn.chanspec = CR_PACK( 1, 0, AREF_GROUND) | CR_ALT_SOURCE | CR_ALT_FILTER;
|
||||
o->target = 4.375;
|
||||
|
@ -414,10 +384,7 @@ int init_observables_4020( calibration_setup_t *setup )
|
|||
|
||||
o = setup->observables + 6;
|
||||
o->name = "4.375V calibration source, ch 2, 5V bipolar range, ground referenced";
|
||||
o->preobserve_insn = po_tmpl;
|
||||
o->preobserve_insn.data = o->preobserve_data;
|
||||
o->preobserve_insn.data[0] = INSN_CONFIG_ALT_SOURCE;
|
||||
o->preobserve_insn.data[1] = CAL_SRC_4375mV;
|
||||
o->reference_source = CAL_SRC_4375mV;
|
||||
o->observe_insn = tmpl;
|
||||
o->observe_insn.chanspec = CR_PACK( 2, 0, AREF_GROUND) | CR_ALT_SOURCE | CR_ALT_FILTER;
|
||||
o->target = 4.375;
|
||||
|
@ -427,10 +394,7 @@ int init_observables_4020( calibration_setup_t *setup )
|
|||
|
||||
o = setup->observables + 7;
|
||||
o->name = "4.375V calibration source, ch 3, 5V bipolar range, ground referenced";
|
||||
o->preobserve_insn = po_tmpl;
|
||||
o->preobserve_insn.data = o->preobserve_data;
|
||||
o->preobserve_insn.data[0] = INSN_CONFIG_ALT_SOURCE;
|
||||
o->preobserve_insn.data[1] = CAL_SRC_4375mV;
|
||||
o->reference_source = CAL_SRC_4375mV;
|
||||
o->observe_insn = tmpl;
|
||||
o->observe_insn.chanspec = CR_PACK( 3, 0, AREF_GROUND) | CR_ALT_SOURCE | CR_ALT_FILTER;
|
||||
o->target = 4.375;
|
||||
|
@ -445,9 +409,8 @@ int init_observables_4020( calibration_setup_t *setup )
|
|||
|
||||
int init_observables_1xxx( calibration_setup_t *setup )
|
||||
{
|
||||
comedi_insn tmpl, po_tmpl;
|
||||
comedi_insn tmpl;//, po_tmpl;
|
||||
observable *o;
|
||||
static const int ai_subdev = 0;
|
||||
#if 0
|
||||
// XXX need to figure out eeprom map
|
||||
int retval;
|
||||
|
@ -472,33 +435,27 @@ int init_observables_1xxx( calibration_setup_t *setup )
|
|||
CAL_SRC_DAC0 = 6,
|
||||
CAL_SRC_DAC1 = 7,
|
||||
};
|
||||
|
||||
#if 0
|
||||
memset( &po_tmpl, 0, sizeof(po_tmpl) );
|
||||
po_tmpl.insn = INSN_CONFIG;
|
||||
po_tmpl.n = 2;
|
||||
po_tmpl.subdev = ai_subdev;
|
||||
|
||||
po_tmpl.subdev = setup->ad_subdev;
|
||||
#endif
|
||||
memset( &tmpl, 0, sizeof(tmpl) );
|
||||
tmpl.insn = INSN_READ;
|
||||
tmpl.n = 1;
|
||||
tmpl.subdev = ai_subdev;
|
||||
tmpl.subdev = setup->ad_subdev;
|
||||
|
||||
o = setup->observables + OBS_0V_RANGE_10V_BIP_1XXX;
|
||||
o->name = "ground calibration source, 10V bipolar range, ground referenced";
|
||||
o->preobserve_insn = po_tmpl;
|
||||
o->preobserve_insn.data = o->preobserve_data;
|
||||
o->preobserve_insn.data[0] = INSN_CONFIG_ALT_SOURCE;
|
||||
o->preobserve_insn.data[1] = CAL_SRC_GROUND;
|
||||
o->reference_source = CAL_SRC_GROUND;
|
||||
o->observe_insn = tmpl;
|
||||
o->observe_insn.chanspec = CR_PACK( 0, 0, AREF_GROUND) | CR_ALT_SOURCE | CR_ALT_FILTER;
|
||||
o->target = 0.0;
|
||||
|
||||
o = setup->observables + OBS_7V_RANGE_10V_BIP_1XXX;
|
||||
o->name = "7V calibration source, 10V bipolar range, ground referenced";
|
||||
o->preobserve_insn = po_tmpl;
|
||||
o->preobserve_insn.data = o->preobserve_data;
|
||||
o->preobserve_insn.data[0] = INSN_CONFIG_ALT_SOURCE;
|
||||
o->preobserve_insn.data[1] = CAL_SRC_7V;
|
||||
o->reference_source = CAL_SRC_7V;
|
||||
o->observe_insn = tmpl;
|
||||
o->observe_insn.chanspec = CR_PACK( 0, 0, AREF_GROUND) | CR_ALT_SOURCE | CR_ALT_FILTER;
|
||||
o->target = 7.0;
|
||||
|
@ -514,9 +471,8 @@ int init_observables_1xxx( calibration_setup_t *setup )
|
|||
|
||||
int init_observables_1602_16( calibration_setup_t *setup )
|
||||
{
|
||||
comedi_insn tmpl, po_tmpl;
|
||||
comedi_insn tmpl;//, po_tmpl;
|
||||
observable *o;
|
||||
static const int ai_subdev = 0;
|
||||
#if 0
|
||||
// XXX need to figure out eeprom map
|
||||
int retval;
|
||||
|
@ -541,33 +497,27 @@ int init_observables_1602_16( calibration_setup_t *setup )
|
|||
CAL_SRC_DAC0 = 6,
|
||||
CAL_SRC_DAC1 = 7,
|
||||
};
|
||||
|
||||
#if 0
|
||||
memset( &po_tmpl, 0, sizeof(po_tmpl) );
|
||||
po_tmpl.insn = INSN_CONFIG;
|
||||
po_tmpl.n = 2;
|
||||
po_tmpl.subdev = ai_subdev;
|
||||
|
||||
po_tmpl.subdev = setup->ad_subdev;
|
||||
#endif
|
||||
memset( &tmpl, 0, sizeof(tmpl) );
|
||||
tmpl.insn = INSN_READ;
|
||||
tmpl.n = 1;
|
||||
tmpl.subdev = ai_subdev;
|
||||
tmpl.subdev = setup->ad_subdev;
|
||||
|
||||
o = setup->observables + OBS_0V_RANGE_10V_BIP_1602_16;
|
||||
o->name = "ground calibration source, 10V bipolar range, ground referenced";
|
||||
o->preobserve_insn = po_tmpl;
|
||||
o->preobserve_insn.data = o->preobserve_data;
|
||||
o->preobserve_insn.data[0] = INSN_CONFIG_ALT_SOURCE;
|
||||
o->preobserve_insn.data[1] = CAL_SRC_GROUND;
|
||||
o->reference_source = CAL_SRC_GROUND;
|
||||
o->observe_insn = tmpl;
|
||||
o->observe_insn.chanspec = CR_PACK( 0, 0, AREF_GROUND) | CR_ALT_SOURCE | CR_ALT_FILTER;
|
||||
o->target = 0.0;
|
||||
|
||||
o = setup->observables + OBS_7V_RANGE_10V_BIP_1602_16;
|
||||
o->name = "7V calibration source, 10V bipolar range, ground referenced";
|
||||
o->preobserve_insn = po_tmpl;
|
||||
o->preobserve_insn.data = o->preobserve_data;
|
||||
o->preobserve_insn.data[0] = INSN_CONFIG_ALT_SOURCE;
|
||||
o->preobserve_insn.data[1] = CAL_SRC_7V;
|
||||
o->reference_source = CAL_SRC_7V;
|
||||
o->observe_insn = tmpl;
|
||||
o->observe_insn.chanspec = CR_PACK( 0, 0, AREF_GROUND) | CR_ALT_SOURCE | CR_ALT_FILTER;
|
||||
o->target = 7.0;
|
||||
|
|
|
@ -115,6 +115,7 @@ int main(int argc, char *argv[])
|
|||
int da_subdev;
|
||||
int eeprom_subdev;
|
||||
int caldac_subdev;
|
||||
int retval;
|
||||
|
||||
fn = "/dev/comedi0";
|
||||
while (1) {
|
||||
|
@ -170,7 +171,7 @@ int main(int argc, char *argv[])
|
|||
goto ok;
|
||||
}
|
||||
}
|
||||
printf("Driver %s unknown\n",drivername);
|
||||
fprintf(stderr, "Driver %s unknown\n",drivername);
|
||||
return 1;
|
||||
|
||||
ok:
|
||||
|
@ -182,7 +183,11 @@ ok:
|
|||
setup.eeprom_subdev = eeprom_subdev;
|
||||
setup.caldac_subdev = caldac_subdev;
|
||||
|
||||
this_board->init_setup( &setup, devicename );
|
||||
retval = this_board->init_setup( &setup, devicename );
|
||||
if( retval < 0 ){
|
||||
fprintf(stderr, "init_setup() failed for %s\n", devicename );
|
||||
return 1;
|
||||
}
|
||||
device_status = setup.status;
|
||||
|
||||
if(device_status<STATUS_DONE){
|
||||
|
@ -268,6 +273,25 @@ void observe( calibration_setup_t *setup )
|
|||
int preobserve( calibration_setup_t *setup, int obs)
|
||||
{
|
||||
int retval = 0;
|
||||
comedi_insn reference_source_config;
|
||||
lsampl_t ref_data[ 2 ];
|
||||
// setup reference source
|
||||
|
||||
memset( &reference_source_config, 0, sizeof(reference_source_config) );
|
||||
reference_source_config.insn = INSN_CONFIG;
|
||||
reference_source_config.n = 2;
|
||||
reference_source_config.subdev = setup->ad_subdev;
|
||||
reference_source_config.data = ref_data;
|
||||
reference_source_config.data[ 0 ] = INSN_CONFIG_ALT_SOURCE;
|
||||
reference_source_config.data[ 1 ] = setup->observables[obs].reference_source;
|
||||
|
||||
retval = comedi_do_insn( setup->dev, &reference_source_config );
|
||||
/* ignore errors for now since older ni driver doesn't
|
||||
* support reference config insn */
|
||||
if( retval < 0 )
|
||||
|
||||
perror("preobserve() ignoring reference config error" );
|
||||
retval = 0;
|
||||
|
||||
if( setup->observables[obs].preobserve_insn.n != 0){
|
||||
retval = comedi_do_insn( setup->dev, &setup->observables[obs].preobserve_insn);
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
#include <string.h>
|
||||
|
||||
#include "calib.h"
|
||||
|
||||
|
||||
|
||||
char ni_id[] = "$Id$";
|
||||
|
||||
|
@ -42,10 +42,12 @@ struct board_struct{
|
|||
char *name;
|
||||
int status;
|
||||
int (*cal)( calibration_setup_t *setup);
|
||||
void (*setup_observables)( calibration_setup_t *setup );
|
||||
};
|
||||
|
||||
int ni_setup_board( calibration_setup_t *setup , const char *device_name );
|
||||
void ni_setup_observables( calibration_setup_t *setup );
|
||||
void ni_setup_observables_611x( calibration_setup_t *setup );
|
||||
|
||||
int cal_ni_at_mio_16e_2(calibration_setup_t *setup);
|
||||
int cal_ni_daqcard_ai_16xe_50(calibration_setup_t *setup);
|
||||
|
@ -65,26 +67,29 @@ int cal_ni_pci_6052e(calibration_setup_t *setup);
|
|||
int cal_ni_pci_mio_16e_4(calibration_setup_t *setup);
|
||||
int cal_ni_pci_6032e(calibration_setup_t *setup);
|
||||
int cal_ni_daqcard_ai_16e_4(calibration_setup_t *setup);
|
||||
int cal_ni_pci_611x(calibration_setup_t *setup);
|
||||
|
||||
static struct board_struct boards[]={
|
||||
{ "at-mio-16e-2", STATUS_DONE, cal_ni_at_mio_16e_2 },
|
||||
{ "DAQCard-ai-16xe-50", STATUS_DONE, cal_ni_daqcard_ai_16xe_50 },
|
||||
{ "at-mio-16xe-50", STATUS_SOME, cal_ni_at_mio_16xe_50 },
|
||||
{ "at-mio-16e-1", STATUS_SOME, cal_ni_at_mio_16e_1 },
|
||||
{ "pci-mio-16e-1", STATUS_DONE, cal_ni_pci_mio_16e_1 },
|
||||
{ "pci-6025e", STATUS_SOME, cal_ni_pci_6025e },
|
||||
{ "pci-6035e", STATUS_DONE, cal_ni_pci_6035e },
|
||||
{ "pci-6071e", STATUS_SOME, cal_ni_pci_6071e },
|
||||
{ "pxi-6071e", STATUS_GUESS, cal_ni_pxi_6071e },
|
||||
{ "at-mio-16e-10", STATUS_GUESS, cal_ni_at_mio_16e_10 },
|
||||
{ "pci-mio-16xe-50", STATUS_SOME, cal_ni_pci_mio_16xe_50 },
|
||||
{ "pci-6023e", STATUS_DONE, cal_ni_pci_6023e },
|
||||
{ "pci-mio-16xe-10", STATUS_DONE, cal_ni_pci_mio_16xe_10 },
|
||||
{ "pci-6052e", STATUS_DONE, cal_ni_pci_6052e },
|
||||
{ "pci-6024e", STATUS_SOME, cal_ni_pci_6024e },
|
||||
{ "pci-mio-16e-4", STATUS_SOME, cal_ni_pci_mio_16e_4 },
|
||||
{ "pci-6032e", STATUS_DONE, cal_ni_pci_6032e },
|
||||
{ "DAQCard-ai-16e-4", STATUS_DONE, cal_ni_daqcard_ai_16e_4 },
|
||||
{ "at-mio-16e-2", STATUS_DONE, cal_ni_at_mio_16e_2, ni_setup_observables },
|
||||
{ "DAQCard-ai-16xe-50", STATUS_DONE, cal_ni_daqcard_ai_16xe_50, ni_setup_observables },
|
||||
{ "at-mio-16xe-50", STATUS_SOME, cal_ni_at_mio_16xe_50, ni_setup_observables },
|
||||
{ "at-mio-16e-1", STATUS_SOME, cal_ni_at_mio_16e_1, ni_setup_observables },
|
||||
{ "pci-mio-16e-1", STATUS_DONE, cal_ni_pci_mio_16e_1, ni_setup_observables },
|
||||
{ "pci-6025e", STATUS_SOME, cal_ni_pci_6025e, ni_setup_observables },
|
||||
{ "pci-6035e", STATUS_DONE, cal_ni_pci_6035e, ni_setup_observables },
|
||||
{ "pci-6071e", STATUS_SOME, cal_ni_pci_6071e, ni_setup_observables },
|
||||
{ "pxi-6071e", STATUS_GUESS, cal_ni_pxi_6071e, ni_setup_observables },
|
||||
{ "at-mio-16e-10", STATUS_GUESS, cal_ni_at_mio_16e_10, ni_setup_observables },
|
||||
{ "pci-mio-16xe-50", STATUS_SOME, cal_ni_pci_mio_16xe_50, ni_setup_observables },
|
||||
{ "pci-6023e", STATUS_DONE, cal_ni_pci_6023e, ni_setup_observables },
|
||||
{ "pci-mio-16xe-10", STATUS_DONE, cal_ni_pci_mio_16xe_10, ni_setup_observables },
|
||||
{ "pci-6052e", STATUS_DONE, cal_ni_pci_6052e, ni_setup_observables },
|
||||
{ "pci-6024e", STATUS_SOME, cal_ni_pci_6024e, ni_setup_observables },
|
||||
{ "pci-mio-16e-4", STATUS_SOME, cal_ni_pci_mio_16e_4, ni_setup_observables },
|
||||
{ "pci-6032e", STATUS_DONE, cal_ni_pci_6032e, ni_setup_observables },
|
||||
{ "DAQCard-ai-16e-4", STATUS_DONE, cal_ni_daqcard_ai_16e_4, ni_setup_observables },
|
||||
{ "pci-6110e", STATUS_SOME, cal_ni_pci_611x, ni_setup_observables_611x },
|
||||
{ "pci-6111e", STATUS_SOME, cal_ni_pci_611x, ni_setup_observables_611x },
|
||||
#if 0
|
||||
// { "at-mio-16de-10", cal_ni_unknown },
|
||||
{ "at-mio-64e-3", cal_ni_16e_1 },
|
||||
|
@ -97,8 +102,6 @@ static struct board_struct boards[]={
|
|||
// { "pci-6033e", cal_ni_unknown },
|
||||
{ "pxi-6025e", cal_ni_6023e }, // guess
|
||||
{ "pci-6034e", cal_ni_6023e }, // guess
|
||||
// { "pci-6110e", cal_ni_unknown },
|
||||
// { "pci-6111e", cal_ni_unknown },
|
||||
// { "pci-6711", cal_ni_unknown },
|
||||
// { "pci-6713", cal_ni_unknown },
|
||||
// { "pxi-6070e", cal_ni_unknown },
|
||||
|
@ -109,7 +112,7 @@ static struct board_struct boards[]={
|
|||
};
|
||||
#define n_boards (sizeof(boards)/sizeof(boards[0]))
|
||||
|
||||
enum {
|
||||
enum observables{
|
||||
ni_zero_offset_low = 0,
|
||||
ni_zero_offset_high,
|
||||
ni_reference_low,
|
||||
|
@ -119,11 +122,36 @@ enum {
|
|||
ni_ao1_zero_offset,
|
||||
ni_ao1_reference,
|
||||
};
|
||||
static int ni_zero_offset_low_611x( int channel ) {
|
||||
return channel;
|
||||
};
|
||||
static int ni_zero_offset_high_611x( int channel ) {
|
||||
return 4 + channel;
|
||||
};
|
||||
static int ni_reference_low_611x( int channel ) {
|
||||
return 8 + channel;
|
||||
};
|
||||
enum observables_611x{
|
||||
ni_ao0_zero_offset_611x = 12,
|
||||
ni_ao0_reference_611x = 13,
|
||||
ni_ao1_zero_offset_611x = 14,
|
||||
ni_ao1_reference_611x = 15,
|
||||
};
|
||||
|
||||
enum reference_sources {
|
||||
REF_GND_GND = 0,
|
||||
REF_AOGND_AIGND = 1,
|
||||
REF_DAC0_0V = 2,
|
||||
REF_DAC1_0V = 3,
|
||||
REF_5V_5V = 4,
|
||||
REF_5V_0V = 5,
|
||||
REF_DAC0_5V = 6,
|
||||
REF_DAC1_5V = 7,
|
||||
};
|
||||
|
||||
int ni_setup( calibration_setup_t *setup , const char *device_name )
|
||||
{
|
||||
ni_setup_board( setup, device_name );
|
||||
ni_setup_observables( setup );
|
||||
setup_caldacs( setup, setup->caldac_subdev );
|
||||
|
||||
return 0;
|
||||
|
@ -137,16 +165,17 @@ int ni_setup_board( calibration_setup_t *setup, const char *device_name )
|
|||
if(!strcmp( device_name, boards[i].name )){
|
||||
setup->status = boards[i].status;
|
||||
setup->do_cal = boards[i].cal;
|
||||
boards[i].setup_observables( setup );
|
||||
break;
|
||||
}
|
||||
}
|
||||
if( i == n_boards ) return -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ni_setup_observables( calibration_setup_t *setup )
|
||||
{
|
||||
comedi_insn tmpl;
|
||||
comedi_insn po_tmpl2;
|
||||
int bipolar_lowgain;
|
||||
int bipolar_highgain;
|
||||
int unipolar_lowgain;
|
||||
|
@ -164,40 +193,28 @@ void ni_setup_observables( calibration_setup_t *setup )
|
|||
tmpl.n = 1;
|
||||
tmpl.subdev = setup->ad_subdev;
|
||||
|
||||
memset(&po_tmpl2,0,sizeof(tmpl));
|
||||
po_tmpl2.insn = INSN_CONFIG;
|
||||
po_tmpl2.n = 2;
|
||||
po_tmpl2.subdev = setup->ad_subdev;
|
||||
|
||||
/* 0 offset, low gain */
|
||||
o = setup->observables + ni_zero_offset_low;
|
||||
o->name = "ai, bipolar zero offset, low gain";
|
||||
#if 0
|
||||
o->preobserve_insn = po_tmpl2;
|
||||
o->preobserve_insn.data = o->preobserve_data;
|
||||
o->preobserve_insn.data[0] = INSN_CONFIG_ALT_SOURCE;
|
||||
o->preobserve_insn.data[1] = CR_PACK(0,0,0);
|
||||
o->observe_insn = tmpl;
|
||||
o->observe_insn.chanspec = CR_ALT_SOURCE;
|
||||
o->observe_insn.chanspec = CR_PACK(REF_GND_GND,bipolar_lowgain,AREF_OTHER);
|
||||
o->reference_source = REF_GND_GND;
|
||||
o->target = 0;
|
||||
#else
|
||||
o->observe_insn = tmpl;
|
||||
o->observe_insn.chanspec = CR_PACK(0,bipolar_lowgain,AREF_OTHER);
|
||||
o->target = 0;
|
||||
#endif
|
||||
|
||||
/* 0 offset, high gain */
|
||||
o = setup->observables + ni_zero_offset_high;
|
||||
o->name = "ai, bipolar zero offset, high gain";
|
||||
o->observe_insn = tmpl;
|
||||
o->observe_insn.chanspec = CR_PACK(0,bipolar_highgain,AREF_OTHER);
|
||||
o->observe_insn.chanspec = CR_PACK(REF_GND_GND,bipolar_highgain,AREF_OTHER);
|
||||
o->reference_source = REF_GND_GND;
|
||||
o->target = 0;
|
||||
|
||||
/* voltage reference */
|
||||
o = setup->observables + ni_reference_low;
|
||||
o->name = "ai, bipolar voltage reference, low gain";
|
||||
o->observe_insn = tmpl;
|
||||
o->observe_insn.chanspec = CR_PACK(5,bipolar_lowgain,AREF_OTHER);
|
||||
o->observe_insn.chanspec = CR_PACK(REF_5V_0V,bipolar_lowgain,AREF_OTHER);
|
||||
o->reference_source = REF_5V_0V;
|
||||
o->target = voltage_reference;
|
||||
|
||||
setup->n_observables = ni_reference_low + 1;
|
||||
|
@ -208,7 +225,8 @@ void ni_setup_observables( calibration_setup_t *setup )
|
|||
o->name = "ai, unipolar zero offset, low gain";
|
||||
o->observe_insn = tmpl;
|
||||
o->observe_insn.chanspec =
|
||||
CR_PACK(0,unipolar_lowgain,AREF_OTHER);
|
||||
CR_PACK(REF_GND_GND,unipolar_lowgain,AREF_OTHER);
|
||||
o->reference_source = REF_GND_GND;
|
||||
o->target = 0;
|
||||
|
||||
#if 0
|
||||
|
@ -217,7 +235,8 @@ void ni_setup_observables( calibration_setup_t *setup )
|
|||
o->name = "ai, unipolar voltage reference, low gain";
|
||||
o->observe_insn = tmpl;
|
||||
o->observe_insn.chanspec =
|
||||
CR_PACK(5,unipolar_lowgain,AREF_OTHER);
|
||||
CR_PACK(REF_5V_0V,unipolar_lowgain,AREF_OTHER);
|
||||
o->reference_source = REF_5V_0V;
|
||||
o->target = voltage_reference;
|
||||
i++;
|
||||
#endif
|
||||
|
@ -240,7 +259,8 @@ void ni_setup_observables( calibration_setup_t *setup )
|
|||
o->preobserve_insn.data = o->preobserve_data;
|
||||
o->observe_insn = tmpl;
|
||||
o->observe_insn.chanspec =
|
||||
CR_PACK(2,bipolar_lowgain,AREF_OTHER);
|
||||
CR_PACK(REF_DAC0_0V,bipolar_lowgain,AREF_OTHER);
|
||||
o->reference_source = REF_DAC0_0V;
|
||||
set_target( setup, ni_ao0_zero_offset,0.0);
|
||||
|
||||
/* ao 0, gain */
|
||||
|
@ -250,8 +270,9 @@ void ni_setup_observables( calibration_setup_t *setup )
|
|||
o->preobserve_insn.chanspec = CR_PACK(0,0,0);
|
||||
o->preobserve_insn.data = o->preobserve_data;
|
||||
o->observe_insn = tmpl;
|
||||
o->observe_insn.chanspec =
|
||||
CR_PACK(6,bipolar_lowgain,AREF_OTHER);
|
||||
o->observe_insn.chanspec =
|
||||
CR_PACK(REF_DAC0_5V,bipolar_lowgain,AREF_OTHER);
|
||||
o->reference_source = REF_DAC0_5V;
|
||||
set_target( setup, ni_ao0_reference,5.0);
|
||||
o->target -= voltage_reference;
|
||||
|
||||
|
@ -263,7 +284,8 @@ void ni_setup_observables( calibration_setup_t *setup )
|
|||
o->preobserve_insn.data = o->preobserve_data;
|
||||
o->observe_insn = tmpl;
|
||||
o->observe_insn.chanspec =
|
||||
CR_PACK(3,bipolar_lowgain,AREF_OTHER);
|
||||
CR_PACK(REF_DAC1_0V,bipolar_lowgain,AREF_OTHER);
|
||||
o->reference_source = REF_DAC1_0V;
|
||||
set_target( setup, ni_ao1_zero_offset,0.0);
|
||||
|
||||
/* ao 1, gain */
|
||||
|
@ -274,7 +296,8 @@ void ni_setup_observables( calibration_setup_t *setup )
|
|||
o->preobserve_insn.data = o->preobserve_data;
|
||||
o->observe_insn = tmpl;
|
||||
o->observe_insn.chanspec =
|
||||
CR_PACK(7,bipolar_lowgain,AREF_OTHER);
|
||||
CR_PACK(REF_DAC1_5V,bipolar_lowgain,AREF_OTHER);
|
||||
o->reference_source = REF_DAC1_5V;
|
||||
set_target( setup, ni_ao1_reference,5.0);
|
||||
o->target -= voltage_reference;
|
||||
|
||||
|
@ -282,6 +305,114 @@ void ni_setup_observables( calibration_setup_t *setup )
|
|||
}
|
||||
}
|
||||
|
||||
void ni_setup_observables_611x( calibration_setup_t *setup )
|
||||
{
|
||||
comedi_insn tmpl;
|
||||
comedi_insn po_tmpl;
|
||||
int bipolar_lowgain;
|
||||
int bipolar_highgain;
|
||||
double voltage_reference;
|
||||
observable *o;
|
||||
int ai_chan;
|
||||
int num_chans;
|
||||
|
||||
bipolar_lowgain = 2;
|
||||
bipolar_highgain = get_bipolar_highgain( setup->dev, setup->ad_subdev);
|
||||
|
||||
voltage_reference = 5.000;
|
||||
|
||||
memset(&tmpl,0,sizeof(tmpl));
|
||||
tmpl.insn = INSN_READ;
|
||||
tmpl.n = 1;
|
||||
tmpl.subdev = setup->ad_subdev;
|
||||
|
||||
num_chans = comedi_get_n_channels( setup->dev, setup->ad_subdev );
|
||||
|
||||
for( ai_chan = 0; ai_chan < num_chans; ai_chan++ )
|
||||
{
|
||||
/* 0 offset, low gain */
|
||||
o = setup->observables + ni_zero_offset_low_611x( ai_chan );
|
||||
o->name = "ai, bipolar zero offset, low gain";
|
||||
o->observe_insn = tmpl;
|
||||
o->observe_insn.chanspec = CR_PACK(ai_chan, bipolar_lowgain, AREF_DIFF);
|
||||
o->reference_source = REF_GND_GND;
|
||||
o->target = 0.0;
|
||||
|
||||
/* 0 offset, high gain */
|
||||
o = setup->observables + ni_zero_offset_high_611x( ai_chan );
|
||||
o->name = "ai, bipolar zero offset, high gain";
|
||||
o->observe_insn = tmpl;
|
||||
o->observe_insn.chanspec = CR_PACK(ai_chan, bipolar_highgain, AREF_DIFF);
|
||||
o->reference_source = REF_GND_GND;
|
||||
o->target = 0.0;
|
||||
|
||||
/* voltage reference */
|
||||
o = setup->observables + ni_reference_low_611x( ai_chan );
|
||||
o->name = "ai, bipolar voltage reference, low gain";
|
||||
o->observe_insn = tmpl;
|
||||
o->observe_insn.chanspec = CR_PACK(ai_chan, bipolar_lowgain, AREF_DIFF);
|
||||
o->reference_source = REF_5V_0V;
|
||||
o->target = voltage_reference;
|
||||
}
|
||||
|
||||
memset(&po_tmpl,0,sizeof(po_tmpl));
|
||||
po_tmpl.insn = INSN_WRITE;
|
||||
po_tmpl.n = 1;
|
||||
po_tmpl.subdev = setup->da_subdev;
|
||||
|
||||
/* ao 0, zero offset */
|
||||
o = setup->observables + ni_ao0_zero_offset_611x;
|
||||
o->name = "ao 0, zero offset, low gain";
|
||||
o->preobserve_insn = po_tmpl;
|
||||
o->preobserve_insn.chanspec = CR_PACK( 0, 0, AREF_GROUND );
|
||||
o->preobserve_insn.data = o->preobserve_data;
|
||||
o->observe_insn = tmpl;
|
||||
o->observe_insn.chanspec =
|
||||
CR_PACK( 0, bipolar_lowgain, AREF_DIFF );
|
||||
o->reference_source = REF_DAC0_0V;
|
||||
set_target( setup, ni_ao0_zero_offset_611x, 0.0 );
|
||||
|
||||
/* ao 0, gain */
|
||||
o = setup->observables + ni_ao0_reference_611x;
|
||||
o->name = "ao 0, reference voltage, low gain";
|
||||
o->preobserve_insn = po_tmpl;
|
||||
o->preobserve_insn.chanspec = CR_PACK( 0, 0, AREF_GROUND );
|
||||
o->preobserve_insn.data = o->preobserve_data;
|
||||
o->observe_insn = tmpl;
|
||||
o->observe_insn.chanspec =
|
||||
CR_PACK( 0, bipolar_lowgain, AREF_DIFF );
|
||||
o->reference_source = REF_DAC0_5V;
|
||||
set_target( setup, ni_ao0_reference_611x, 5.0 );
|
||||
o->target -= voltage_reference;
|
||||
|
||||
/* ao 1, zero offset */
|
||||
o = setup->observables + ni_ao1_zero_offset_611x;
|
||||
o->name = "ao 1, zero offset, low gain";
|
||||
o->preobserve_insn = po_tmpl;
|
||||
o->preobserve_insn.chanspec = CR_PACK( 1, 0, AREF_GROUND );
|
||||
o->preobserve_insn.data = o->preobserve_data;
|
||||
o->observe_insn = tmpl;
|
||||
o->observe_insn.chanspec =
|
||||
CR_PACK( 0, bipolar_lowgain, AREF_DIFF);
|
||||
o->reference_source = REF_DAC1_0V;
|
||||
set_target( setup, ni_ao1_zero_offset_611x, 0.0 );
|
||||
|
||||
/* ao 1, gain */
|
||||
o = setup->observables + ni_ao1_reference_611x;
|
||||
o->name = "ao 1, reference voltage, low gain";
|
||||
o->preobserve_insn = po_tmpl;
|
||||
o->preobserve_insn.chanspec = CR_PACK( 1, 0, AREF_GROUND );
|
||||
o->preobserve_insn.data = o->preobserve_data;
|
||||
o->observe_insn = tmpl;
|
||||
o->observe_insn.chanspec =
|
||||
CR_PACK( 0, bipolar_lowgain, AREF_DIFF );
|
||||
o->reference_source = REF_DAC1_5V;
|
||||
set_target( setup, ni_ao1_reference_611x, 5.0 );
|
||||
o->target -= voltage_reference;
|
||||
|
||||
setup->n_observables = ni_ao1_reference_611x + 1;
|
||||
}
|
||||
|
||||
int cal_ni_at_mio_16e_2(calibration_setup_t *setup)
|
||||
{
|
||||
postgain_cal( setup, ni_zero_offset_low,ni_zero_offset_high,1);
|
||||
|
@ -552,7 +683,7 @@ int cal_ni_pci_6052e(calibration_setup_t *setup)
|
|||
* 0 AO0 linearity
|
||||
* 8, 4 AO0 reference 23, 19 7, 3
|
||||
* 12 AO0 offset 27 11
|
||||
* 2 AO1 linearity
|
||||
* 2 AO1 linearity
|
||||
* 10, 6 AO1 reference 25, 21 9, 5
|
||||
* 14 AO1 offset 29, 17 13, 1
|
||||
*
|
||||
|
@ -563,7 +694,7 @@ int cal_ni_pci_6052e(calibration_setup_t *setup)
|
|||
* 4 7 15 3 0111 0011
|
||||
*
|
||||
* 6 17 5 0101
|
||||
* 7 x
|
||||
* 7 x
|
||||
* 8 11 19 7 1011 0111
|
||||
*
|
||||
* 10 9 21 9 1001 1001
|
||||
|
@ -641,6 +772,28 @@ int cal_ni_daqcard_ai_16e_4(calibration_setup_t *setup)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int cal_ni_pci_611x( calibration_setup_t *setup )
|
||||
{
|
||||
int i;
|
||||
int num_chans;
|
||||
|
||||
num_chans = comedi_get_n_channels( setup->dev, setup->ad_subdev );
|
||||
|
||||
for( i = 0; i < num_chans; i++ ){
|
||||
cal1( setup, ni_zero_offset_high_611x( i ), ( 2 * i + 2 ) );
|
||||
cal1( setup, ni_reference_low_611x( i ), ( 2 * i + 1 ) );
|
||||
}
|
||||
|
||||
if(do_output){
|
||||
cal1( setup, ni_ao0_zero_offset_611x, 10 );
|
||||
cal1( setup, ni_ao0_reference_611x, 9 );
|
||||
cal1( setup, ni_ao1_zero_offset_611x, 12 );
|
||||
cal1( setup, ni_ao1_reference_611x, 11 );
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
double ni_get_reference( calibration_setup_t *setup, int lsb_loc,int msb_loc)
|
||||
{
|
||||
int lsb,msb;
|
||||
|
@ -736,7 +889,7 @@ void ni_mio_ai_postgain_cal_2(int chan,int dac,int range_lo,int range_hi,double
|
|||
printf("offset hi %g\n",offset_hi);
|
||||
|
||||
slope=l.slope;
|
||||
|
||||
|
||||
a=(offset_lo-offset_hi)/(gain-1.0);
|
||||
a=caldacs[dac].current-a/slope;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue