From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

Multifunction DAQ

cancel
Showing results for 
Search instead for 
Did you mean: 

NIDAQ

Solved!
Go to solution

Hi everyone - I am using NIDAQ-mx with C++ and a NI USB-6341.  I am looking to use a lowpass filter on the analog ins but don't know if this is possible.  

The problem is this code gets hung up when I try to use the filter. 

This is what I'm doing:

if( !( retVal = DAQmxCreateTask( "", &config->taskHandle ) ))

if( !( retVal = DAQmxCreateAIVoltageChan( config->taskHandle, ss.str(), "", DAQmx_Val_RSE,
config->minVoltage, config->maxVoltage, DAQmx_Val_Volts, NULL ) ) )

if( !( retVal = DAQmxSetAILowpassEnable(config->taskHandle, "", 1) ) ) 
if( !( retVal = DAQmxSetAILowpassCutoffFreq(config->taskHandle, ss.str(), 500) ) )

if( !( retVal = DAQmxCfgSampClkTiming( config->taskHandle, NULL, config->frequency,
DAQmx_Val_Rising, DAQmx_Val_ContSamps, numSamplesPerChannel ) ) )

 

Is this the correct way to do this.  Do I create the task, then the AIchannel, then the filter, then the cutoff freq, then the timing?

 

Any help would be much appreciated.

 

Thanks!

 

0 Kudos
Message 1 of 4
(2,998 Views)

Hi C2PO,

 

It seems you are doing things in the correct order (specifically addressing your final question of the post).

 

There are many examples that I hope were installed on your computer when you instaleld NI-DAQmx.  These would be located under the Start Menu in Windows > All Programs > National Instruments | NI-DAQ > Text-Based Code Support > ANSI-C Examples.  Here, one that I thought applied particularly well to your situation was in \NI-DAQ\Examples\DAQmx ANSI C\Analog In\Measure Voltage\Cont Acq -Int Clk-Cfg Filt-SCXI 114x

 

The applicable code here looks like:

 

    DAQmxErrChk (DAQmxCreateTask("",&taskHandle));
    DAQmxErrChk (DAQmxCreateAIVoltageChan(taskHandle,"Dev1/ai0","",DAQmx_Val_Cfg_Default,-10.0,10.0,DAQmx_Val_Volts,NULL));
    DAQmxErrChk (DAQmxCfgSampClkTiming(taskHandle,"",1000.0,DAQmx_Val_Rising,DAQmx_Val_ContSamps,1000));
    DAQmxErrChk (DAQmxSetAILowpassEnable(taskHandle,"",1));
    DAQmxErrChk (DAQmxSetAILowpassCutoffFreq(taskHandle,"",cutoffFreq));
    DAQmxErrChk (DAQmxGetAILowpassCutoffFreq(taskHandle,"",&cutoffFreq));

 

Note: If these examples have not been installed on your computer, doing a repair of your DAQmx may fix this.

 

Best of luck,

Ryan C.
Applications Engineer
National Instruments
0 Kudos
Message 2 of 4
(2,952 Views)
Solution
Accepted by C2PO

Hi C2PO,

 

The DAQmx lowpass filter properties are for devices that have configurable lowpass filter hardware, like the NI 628x, NI PXIe-4300, some NI 61xx devices, and some SCXI modules. The NI 6341 doesn't have a configurable lowpass filter.

 

However, the code shouldn't hang in this case, it should return an error. Did you leave out the body of each if-statement in your post, or is this a deep set of nested if-statements? Either way, the example programs that Ryan C posted should help with the error handling.

 

Brad

---
Brad Keryan
NI R&D
Message 3 of 4
(2,941 Views)

Thanks Ryan and Brad for the replies - I'm doing a :

 

retVal = DAQmxSetAILowpassEnable(config->taskHandle, ss.str(), 1)

 

which throws the exception below for error  -200077

 

throw exception(errorBuffer);//why this hangs in my application

 

but I get through that errror with:

 

retVal = DAQmxSetAILowpassEnable(config->taskHandle, ss.str(), 0)

 

but then I get errors like -200452 and "specifed property is not supported by the device etc." 

 

So it now makes sense that this won't work on the NI 6341.

 

Thanks again.

0 Kudos
Message 4 of 4
(2,937 Views)