Counter/Timer

cancel
Showing results for 
Search instead for 
Did you mean: 

synchronize continuously Analog Read with trigger C Code

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 ***************/

0 Kudos
Message 1 of 2
(5,726 Views)

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.

Jonathan L.
Technical Support Senior Group Manager
National Instruments
0 Kudos
Message 2 of 2
(5,632 Views)