Digital I/O

Showing results for 
Search instead for 
Did you mean: 

PCI 6534 Buffered Digital Output with Digital Start Trigger

I am using the PCI 6534 to do a buffered digital output, and want to start that output using an external digital trigger.


Using Matlab, calling NIDAQmx C library functions, I am able to load data to the buffer, and then output the data after calling the DAQmxStartTask function.  However, I now want to use a start trigger instead of just calling DAQmxStartTask to start the data output.  Unfortunately, I keep getting an error,  

DAQmxErrorInvalidTerm_Routing (-89129)


when I call the DAQmxStartTask function.  Below is my test code.  Note that if the 'DAQmxCfgDigEdgeStartTrig' function is not used, this code works fine; data is written to buffer and output when the DAQmxStartTask function is called.  I must be doing something wrong with implementing the 'DAQmxCfgDigEdgeStartTrig' function.  Any suggestions are much appreciated! 

%% load NIDAQmx function library and give it alias 'myni'

funclist = loadlibrary('nicaiu.dll','NIDAQmx.h','alias','myni')


%input data is already loaded into workspace

% g_stimulus_matrix{ch}{stim,2}={SR, y}; %sample rate and sample data

CIch = 1;

inputDATA = g_stimulus_matrix{1}{CIch,2}{2};

%% Set sampling output rate (Hz)

rate = g_stimulus_matrix{1}{CIch,2}{1} ;

%% define a task handle

taskh1 = uint32(1);

[errCode,taskName,DOtaskhandle] = calllib('myni','DAQmxCreateTask','',taskh1)

%% Paramater values set according to NIDAQmx.h file


DAQmx_Val_Rising = int32(10280);

DAQmx_Val_FiniteSamps = int32(10178);

DAQmx_Val_GroupByChannel = uint32(0);

%% set total number of samples to output. should be length of data array

sampsPerChanToAcquire = uint64(length(inputDATA)); %% if output is uInt8, must be multiple of 4

sperchan = int32(sampsPerChanToAcquire); %% should be same, but different form

%% data format is binary number uInt32. Output will be to a combination of

%% 4 ports, (32 lines)

data = uint32(inputDATA);

[errCode,lineNames,nameoflines] = calllib('myni','DAQmxCreateDOChan',uint32(DOtaskhandle),['Dev1/port0:3'],'',DAQmx_Val_ChanForAllLines)

[errCode,clockType] = calllib('myni','DAQmxCfgSampClkTiming',uint32(DOtaskhandle),'OnboardClock',rate,DAQmx_Val_Rising,DAQmx_Val_FiniteSamps,sampsPerChanToAcquire)


numSampsPerChannelWritten = libpointer('int32Ptr',0)

reserved = libpointer('uint32Ptr',[])data2 = libpointer(


% int32 DAQmxCfgDigEdgeStartTrig (TaskHandle taskHandle, const char triggerSource[], int32 triggerEdge);

[errCode zz] = calllib('myni','DAQmxCfgDigEdgeStartTrig',uint32(DOtaskhandle), ['Dev1/PFI6'], DAQmx_Val_Rising)



%% write data to the buffer of the DIO card.

[errCode,writeArray,numSampsPerChan,zz] = calllib('myni','DAQmxWriteDigitalU32',uint32(DOtaskhandle),sperchan,0,double(10),DAQmx_Val_GroupByChannel,data2,numSampsPerChannelWritten,reserved);


[errCode] = calllib('myni','DAQmxStartTask',uint32(DOtaskhandle))

0 Kudos
Message 1 of 2

Shortly after posting, I solved this issue myself


it seems the ['Dev1/PFI6'],  in th e following code:

[errCode zz] = calllib('myni','DAQmxCfgDigEdgeStartTrig',uint32(DOtaskhandle), ['Dev1/PFI6'], DAQmx_Val_Rising)


just needed to be changed to ['/Dev1/PFI6']


stupid mistake. 


just as a note, for people who use matlab for controlling devices, this thread is most helpful:

0 Kudos
Message 2 of 2