Hi all, i'm developing an appliction that use Accelerometer, i already used this card and Daqmx software to create an application (C) but always single channel , now when i
a) create a speific task to read from a specific channel, i read normally
b) if i allocate another task for read another channel, i read an abnormal data, the readings are not standard
c) if the second reading is execuetd with 2 different tasks and afetr 500000 sampling, the reading is normal
here is the part of the code to allocate and execute a task:
if(errCk(DAQmxCreateTask("",&m_taskHandle), call)){
m_mutex->unlock();
return false;
}
///Configura la Scheda
if(errCk(DAQmxCreateAIAccelChan(m_taskHandle,ch,"",DAQmx_Val_PseudoDiff,m_ni->dwl,m_ni->upl,DAQmx_Val_AccelUnit_g,m_ni->sen,DAQmx_Val_mVoltsPerG,DAQmx_Val_Internal,m_ni->curr,NULL), call)){
return false;
}
///Configura il campionamento
if(errCk(DAQmxCfgSampClkTiming(m_taskHandle,"",m_ni->fs/*10000.0*/,DAQmx_Val_Rising,DAQmx_Val_FiniteSamps,nsamp), call)){
return false;
}
///Registra l'evento func di callback
if(errCk(DAQmxRegisterEveryNSamplesEvent(m_taskHandle,DAQmx_Val_Acquired_Into_Buffer,nsamp,0,EveryNCallback,this), call)){
return false;
}
if((m_state = errCk(DAQmxStartTask(m_taskHandle), call) ? 1 : 0 )){
return false;
}
the reading is executed in this callback function:
static int tRead=0;
int32 read=0;
int32 overloadDetectionEnabled=1;
bool32 overloaded=0;
///Quando e' true indica che i dati sono stati trasfereti al rec da data[]
bool dc = false;
///In caso di errore non deve essere eseguito nessuno dei passi successivi
bool err = false;
float64 *data = (float64*)calloc(cbi->nsamp, sizeof(float64));
char *overloadedChannels = (char*)malloc(sizeof(char)*cbi->nsamp);
///blocca la sessione critica
m_mutex->lock();
if(errCk(DAQmxReadAnalogF64(cbi->tk,cbi->nsamp,0.0,DAQmx_Val_GroupByScanNumber,data,cbi->nsamp,&read,NULL), call, false, true)){
return;
}
....overload control...returns data
any asuggestion? thanks