08-28-2008 04:46 AM
Hello everybody,
I'm trying to activate the internal lowpass filter of the NI6120 DAQ with Matlab. I tried the following skript but I didn't work.
Additionally I'd like to know if it is possible to use the DAQ-Toolbox of Matlab to use the counter for frequency measurement. If not is it difficult to implement it?
Thanks a lot
Markus
%Filter Property
DAQmx_AI_Lowpass_Enable = hex2dec('1802'); % Specifies whether to enable the lowpass filter of the channel.
%Activate LOWPassFilter
taskLP=uint32(1);
[a,b,taskLP] = calllib('myni','DAQmxCreateTask','LP',taskLP)
disp('LOWpass');
%--- C-Code to enable Filter
%int32 __CFUNC DAQmxSetAILowpassEnable(TaskHandle taskHandle, const char channel[], bool32 data);
disp('set LowpassEnable');
Data = DAQmx_AI_Lowpass_Enable;
[a,b]=calllib('myni','DAQmxSetAILowpassEnable',taskLP,taskchans1,Data)
%--- C-Code to get if Filter is enabled
%int32 __CFUNC DAQmxGetAILowpassEnable(TaskHandle taskHandle, const char channel[], bool32 *data);
disp('Get LowpassEnable');
DataPtr = libpointer('uint32Ptr',Data);
[a,b,cc]=calllib('myni','DAQmxGetAILowpassEnable',taskLP,taskchans1,DataPtr)
[a] = calllib('myni','DAQmxStartTask',taskLP)%for LP added
[a] = calllib('myni','DAQmxStopTask',taskLP);%for LP added
[a] = calllib('myni','DAQmxClearTask',taskLP);%for LP added
09-01-2008 07:20 AM
Hello Markus,
I think the problem is related to the fact, that no channel is created before calling the function DAQmxSetAILowpassEnable(...). You should call the function DAQmxCreateAIVoltageChan(...) before calling the function DAQmxSetAILowpassEnable(...).
A C-Example with these function calls could look like this:
int main(void)
{
TaskHandle taskHandle=0;
/*********************************************/
// DAQmx Configure Code
/*********************************************/
DAQmxCreateTask("",&taskHandle);
DAQmxCreateAIVoltageChan(taskHandle,"Dev1/ai0","aichann",DAQmx_Val_Cfg_Default,-10.0,10.0,DAQmx_Val_Volts,NULL);
DAQmxSetAILowpassEnable(taskHandle,"aichann",TRUE);
.
.
The only information I have concerning your question about the Matlab DAQ-Toolbox is a list of the supported NI-hardware which can be found under: http://www.mathworks.com/products/daq/supportedio14005.html.
I hope I could help you.
Best regards,
Blase
09-02-2008 10:27 AM
Hi Blase,
thank you for your response.
The code I have written was only an excerpt of my programme, that's the reason I have forgotten to mention the create function.
-----THis was missing-------
% Other constants must be searched in the NI installation directory
DAQmx_Val_Volts= 10348; % measure volts
%Filter Property
DAQmx_AI_Lowpass_Enable = 1; % Specifies whether to enable the lowpass filter of the channel.
disp('NI: Create Tasks')
taskh1=uint32(1);
[a,b,taskh1] = calllib('myni','DAQmxCreateTask','master',taskh1)
% a will be the error code
disp('NI: Create AI Channels')
taskchans1=['Dev1/ai0:' num2str(numofchans-1)];
[a,b,c,d] = calllib('myni','DAQmxCreateAIVoltageChan',uint32(taskh1),taskchans1,'',-1,-10,10,DAQmx_Val_Volts,'')
---------
followed by the older code sequence
--------------
%Activate LOWPassFilter
taskLP=uint32(1);
[a,b,taskLP] = calllib('myni','DAQmxCreateTask','LP',taskLP)
disp('LOWpass');
%--- C-Code to enable Filter
%int32 __CFUNC DAQmxSetAILowpassEnable(TaskHandle taskHandle, const char channel[], bool32 data);
disp('set LowpassEnable');
Data = DAQmx_AI_Lowpass_Enable;
[a,b]=calllib('myni','DAQmxSetAILowpassEnable',taskLP,taskchans1,Data)
%--- C-Code to get if Filter is enabled
%int32 __CFUNC DAQmxGetAILowpassEnable(TaskHandle taskHandle, const char channel[], bool32 *data);
disp('Get LowpassEnable');
DataPtr = libpointer('uint32Ptr',Data);
[a,b,cc]=calllib('myni','DAQmxGetAILowpassEnable',taskLP,taskchans1,DataPtr)
[a] = calllib('myni','DAQmxStartTask',taskLP)%for LP added
[a] = calllib('myni','DAQmxStopTask',taskLP);%for LP added
[a] = calllib('myni','DAQmxClearTask',taskLP);%for LP added
I'm not sure what's the reason so that it's not working properly. I have also changed the entry of the filter value
DAQmx_AI_Lowpass_Enable to 1 instead of true.
best regards
Markus
09-03-2008 08:10 PM
Hi Markus,
I had the same problem and was able to get it to work by writing a shared library (ni6120.dll) and then calling the external functions in my matlab code. I've attached the code I used. You can look at the script lowpass.m to see how to call the library functions. Setting dofilt=1 in the code will use the 100 kHz AA filter, and dofilt=0 will disable the filter.
-Dave
09-12-2008 01:52 AM
Hi Dave,
Thanks a lot. And sorry for the late response, but I was ill the last view days.
Markus