Adapt AWG to work with M8199B

Minor changes in Scope
Measurement Codes for OFC 2025
This commit is contained in:
Silas Labor Zizou
2024-10-20 17:23:35 +02:00
parent bf94e3dc2f
commit 1b554f2d25
8 changed files with 315 additions and 136 deletions

View File

@@ -215,7 +215,7 @@ classdef AwgKeysight
switch obj.model
case awg_model.M8196A
v = visadev('TCPIP0::zizou.tf.uni-kiel.de::hislip0::INSTR');
case awg_model.M8196A
case awg_model.M8199B
v = visadev('TCPIP0::localhost::hislip0::INSTR');
end
@@ -224,10 +224,10 @@ classdef AwgKeysight
disp(['Connected to Instrument: ',char(v.Vendor),' ',char(v.Model),' SerNo:',char(v.SerialNumber)]);
end
%check if channel config matches
writeline(v,'*opt?');
aw=readline(v);
assert(obj.numChannels==sscanf(aw, '%f'),['Wrong Channel config. AWG response: ',num2str(sscanf(aw, '%f')), ' Channels']);
% %check if channel config matches (ONLY FOR M8196...)
% writeline(v,'*opt?');
% aw=readline(v);
% assert(obj.numChannels==sscanf(aw, '%f'),['Wrong Channel config. AWG response: ',num2str(sscanf(aw, '%f')), ' Channels']);
switch obj.model
case awg_model.M8196A
@@ -276,33 +276,27 @@ classdef AwgKeysight
case awg_model.M8199B
% 1) TRAC DEl - delete the previous waveform
xfprintf(f, sprintf(':TRAC:DEL ''M2.DataOut1'', %d', segm_num), 1);
xfprintf(f, sprintf(':TRAC:DEL ''M2.DataOut2'', %d', segm_num), 1);
% 1) TRAC DEl - delete the previous ch waveform
obj.writeNcheck(v,sprintf(':TRAC:DEL ''M2.DataOut%d'', %d', chan, segm_num));
% 2) TRAC DEF - define properties of waveform
xfprintf(f, sprintf(':TRAC:DEF ''M2.DataOut1'', %d,%d', segm_num, len));
xfprintf(f, sprintf(':TRAC:DEF ''M2.DataOut2'', %d,%d', segm_num, len));
obj.writeNcheck(v,sprintf(':TRAC:DEF ''M2.DataOut%d'', %d,%d', chan, segm_num, segm_len));
% xfprintf(f, sprintf(':TRAC:DEF ''M2.DataOut1'', %d,%d', segm_num, len));
% 3) TRAC DATA - load the new waveform
% Example command: :TRAC:DATA 'M1.DataOut1', 1, 0 , -127,-126,,-1,0,1,,127,-127,,-1,0,1,,127
% means : :TRAC:DATA 'identifier' , <segment_id>, <offset>, <block>|<numeric_values>
cmd = sprintf(':TRAC:DATA ''M2.DataOut1'', %d,%d,', segm_num, offset);
binblockwrite(f, data(1+offset:offset+len), dataFormat, cmd);
cmd = sprintf(':TRAC:DATA ''M2.DataOut2'', %d,%d,', segm_num, offset);
binblockwrite(f, data(1+offset:offset+len), dataFormat, cmd);
offset = 0;
cmd = sprintf(':TRAC:DATA ''M2.DataOut%d'', %d,%d,',chan, segm_num, offset);
binblockwrite(v, signal{chan}, 'int8', cmd);
% 4) SET VOLTAGE (not possible to set 0v)
xfprintf(f, sprintf(':VOLT:AMPL ''M2.DataOut1'', %gv', awg_volt(1)));
xfprintf(f, sprintf(':VOLT:AMPL ''M2.DataOut2'', %gv', awg_volt(2)));
obj.writeNcheck(v, sprintf(':VOLT:AMPL ''M2.DataOut%d'', %gv',chan, obj.voltages(chan)));
% xfprintf(f, ':VOLT:AMPL ''M2.DataOut2'', 0.1v');
% 5) SET OUTPUTS ON/ OFF
xfprintf(f, ':OUTP ''M2.DataOut1'', ON'); %sioe 11.23: Hier habe ich absichtlich auf OFF gestellt, wenn Kanal nicht bentigt!
xfprintf(f, ':OUTP ''M2.DataOut2'', ON');
obj.writeNcheck(v, sprintf(':OUTP ''M2.DataOut%d'', ON',chan)); %sioe 11.23: Hier habe ich absichtlich auf OFF gestellt, wenn Kanal nicht bentigt!
@@ -319,6 +313,9 @@ classdef AwgKeysight
case awg_model.M8199B
% SET Ref clock out (which is conn. to scope) to 100 MHz
obj.writeNcheck(v, ':OUTPut:FREQuency ''M1.RefClkOut'',100000000');
% :OUTP:GLOB 'M1.System', OFF
obj.writeNcheck(v, ':OUTP:GLOB ''M1.System'', ON');
obj.writeNcheck(v, ':OUTP:GLOB ''M2.System'', ON');