-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdaqmxtest.m
65 lines (40 loc) · 1.4 KB
/
daqmxtest.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
function hAOTask = daqmxtest()
%%%%EDIT IF NEEDED%%%%
AIDevice = 'Dev1';
AIChans = 0:1; %Must be 2 channels
AODevice = 'Dev1';
AOChan = 0; %Must be 1 channel
sampleRate = 10e3; %Hz
updatePeriod = 2e-3; %s
%%%%%%%%%%%%%%%%%%%%%%
import ws.dabs.ni.daqmx.*
updatePeriodSamples = round(updatePeriod * sampleRate);
hTask = Task('Johannes Task');
hAOTask = Task('Smart Task');
hTask.createAIVoltageChan(AIDevice,AIChans);
hAOTask.createAOVoltageChan(AODevice,AOChan);
hTask.cfgSampClkTiming(sampleRate,'DAQmx_Val_ContSamps');
hTask.registerEveryNSamplesEvent(@JohannesCallback,updatePeriodSamples);
callbackCounter = 0;
tic;
hAOTask.start();
hTask.start();
function JohannesCallback(~,~)
callbackCounter = callbackCounter + 1;
inData = readAnalogData(hTask,updatePeriodSamples,'scaled');
%Output difference value on D/A channel
hAOTask.writeAnalogData(0);
%toc,tic;
%Display difference value, periodically
if ~mod(callbackCounter ,10)
fprintf(1,'Mean Difference: %g\n',inData);
end
%Hard-code ending of Task here...in reality would do this from command-line or application
if ~mod(callbackCounter ,1000)
disp('Acquisition done!');
hTask.stop();
hTask.clear();
hAOTask.clear();
end
end
end