12-24-2013 01:51 AM
Hello, I have a problem
I have NI USB-6251.
I have to synchronize continuously Analog Read with trigger.
My code working correctly only with finite mode, but in continuously mode signal not synchronizing!
I have no error.
Here working finite code:
/********* finite code ********************/
DAQmxErrChk(DAQmxCreateTask("",&task));
DAQmxErrChk(DAQmxCreateAIVoltageChan(task,"Dev1/ai1","",DAQmx_Val_Diff,-6.0,6.0,DAQmx_Val_Volts,NULL));
DAQmxErrChk(DAQmxCfgSampClkTiming(task,"",1000000.0,DAQmx_Val_Rising,DAQmx_Val_FiniteSamps,800));
DAQmxErrChk(DAQmxCfgDigEdgeStartTrig( task, "/Dev1/PFI0", DAQmx_Val_Falling));
DAQmxErrChk(DAQmxSetPauseTrigType(task,DAQmx_Val_DigLvl));
DAQmxErrChk(DAQmxSetDigLvlPauseTrigWhen(task, DAQmx_Val_High));
DAQmxErrChk(DAQmxStartTask(task));
DAQmxErrChk(DAQmxReadAnalogF64(task,-1,-1,DAQmx_Val_GroupByScanNumber,data,800,&samples,NULL));
DAQmxErrChk(DAQmxStopTask(task));
DAQmxErrChk(DAQmxClearTask(task));
/********* END finite code ********************/
Here continuously code:
/********************** continuously code ***************/
DAQmxErrChk(DAQmxCreateTask("",&task));
DAQmxErrChk(DAQmxCreateAIVoltageChan(task,"Dev1/ai1","",DAQmx_Val_Diff,-6.0,6.0,DAQmx_Val_Volts,NULL));
DAQmxErrChk(DAQmxCfgSampClkTiming(task,"",1000000.0,DAQmx_Val_Rising,DAQmx_Val_ContSamps,12500));
DAQmxErrChk(DAQmxCfgDigEdgeStartTrig(task,"/Dev1/PFI0",DAQmx_Val_Rising));
DAQmxErrChk(DAQmxSetDigLvlPauseTrigSrc(task, "/Dev1/PFI0"));
DAQmxErrChk(DAQmxSetPauseTrigType(task,DAQmx_Val_DigLvl ));
DAQmxErrChk(DAQmxSetDigLvlPauseTrigWhen(task, DAQmx_Val_High ));
DAQmxErrChk(DAQmxRegisterEveryNSamplesEvent(task,DAQmx_Val_Acquired_Into_Buffer,SIZE_OF_MAIN_READ,0,EveryNCallback,NULL));
DAQmxErrChk(DAQmxRegisterDoneEvent(task,0,DoneCallback,NULL));
DAQmxErrChk(DAQmxStartTask(task));
/********************** END continuously code ***************/
Moreover, I tried to synchronize using internal clocking, but it didn't work correctly too:
/********************** clocking code ***************/
DAQmxErrChk(DAQmxCreateTask("",&task));
DAQmxErrChk(DAQmxCreateAIVoltageChan(task,"Dev1/ai1","",DAQmx_Val_Diff,-6.0,6.0,DAQmx_Val_Volts,NULL));
DAQmxErrChk(DAQmxSetDelayFromSampClkDelayUnits(task,DAQmx_Val_Seconds ));
DAQmxErrChk(DAQmxSetDelayFromSampClkDelay(task, 0.000125));
DAQmxErrChk(DAQmxCfgSampClkTiming(task,"/Dev1/PFI0",1,DAQmx_Val_Rising,DAQmx_Val_ContSamps,1));
DAQmxErrChk(DAQmxSetAIConvRate(task,1000000));
DAQmxErrChk(DAQmxCfgInputBuffer(task,10000));
DAQmxErrChk(DAQmxRegisterEveryNSamplesEvent(task,DAQmx_Val_Acquired_Into_Buffer,1000,0,EveryNCallback,NULL));
DAQmxErrChk(DAQmxRegisterDoneEvent(task,0,DoneCallback,NULL));
DAQmxErrChk(DAQmxStartTask(task));
/********************** END clocking code ***************/
12-26-2013 04:51 PM
Hello,
I would recommend looking at some of the examples that come with NI DAQmx. Navigate to Start>>All Programs>>National Instruments>>NI-DAQmx>>Text Based Code Support>>NI-DAQmx ANSI C Examples
From there, you can find examples on synchronizing I/O in C.