% Clear all variables, functions & MEX-files, and close all figures clear all close all % File and acquisition setup title = 'Oscilloscope: File & acquisition set up'; prompt = {'File directory', 'File name', 'Number of channels (1-4)', ... 'Number of events', 'Sample rate (Sa/s)', 'Acquisition points'}; defAns = {'H:\', 'Diamond_Saed', '1', '5', '4E9', '403'}; FileData = inputdlg(prompt, title, 1, defAns); DestDir = char(FileData(1)); DestFile = char(FileData(2)); Channels = str2double(FileData(3)); EventCount = str2double(FileData(4)); SampFreq = char(FileData(5)); AcqPoints = char(FileData(6)); Frequency = str2double(FileData(5)); Points = str2double(FileData(6)); TimeBase = num2str((1/Frequency)*Points); strBuffer = ['%', num2str(length(num2str(Points*2))+2), 's']; % Trigger setup title = 'Channel 1: Trigger set up'; prompt = {'Trigger level (V)', 'Time trigger offset (s)', ... 'Perform PGA on trigger (Y/N)', 'Boundary filename'}; defAns = {'20E-3', '0', 'n', 'AmBe_10Ci_npl'}; TrigData = inputdlg(prompt, title, 1, defAns); TrigLevel = char(TrigData(1)); TrigOffset = char(TrigData(2)); PerformPGA = char(TrigData(3)); Boundary = char(TrigData(4)); % Channel 1 voltage axis setup title = 'Channel 1: Voltage axis set up'; prompt = {'Voltage full scale range (V)', 'Voltage offset (V)', ... 'Input impedance DC (Ohms)','Volts/Division (default)'}; defAns = {'8', '0', '1E6','10E-3'}; VoltData = inputdlg(prompt, title, 1, defAns); strChanRange = [':CHANNEL1:RANGE ', char(VoltData(1))]; strChanOffset = [':CHANNEL1:OFFSET ', char(VoltData(2))]; strChanInput = [':CHANNEL1:INPUT ', char(VoltData(3))]; VoltsDiv = str2double(VoltData(4)) % Connect to the oscilloscope t = visa('agilent', 'TCPIP0::148.88.156.198::INSTR'); set(t, 'InputBufferSize', 262144,'Timeout', 20); fopen(t); fwrite(t, '*CLS'); % Configure the oscilloscope fwrite(t, ':ACQUIRE:CONFIG SINGLE'); fwrite(t, [':ACQUIRE:SRATE ', SampFreq]); fwrite(t, [':ACQUIRE:POINTS ', AcqPoints]); fwrite(t, ':ACQUIRE:MODE RTIME;AVERAGE OFF'); fwrite(t, ':TIMebase:REFerence CENTer'); fwrite(t, [':TIMEBASE:POS ', TrigOffset]); fwrite(t, [':TIMEBASE:RANGE ', TimeBase]); fwrite(t, ':TRIGGER:EDGE:COUPLING DC'); fwrite(t, ':TRIGGER:EDGE:SOURCE CHAN1'); fwrite(t, [':TRIGGER:LEVEL CHAN1,', TrigLevel]); fwrite(t, ':TRIGGER:MODE EDGE'); fwrite(t, ':TRIGGER:EDGE:SLOPE NEGATIVE'); fwrite(t, ':TRIGGER:SWEEP TRIGGERED'); fwrite(t, '*CLS'); %baseline = 14000; counts = 0; start_time = clock; start_time = (start_time(1, 4) * 60 * 60) + (start_time(1, 5) * 60) + (start_time(1, 6)); % Calculate voltage per digital unit voltage_full_scale = str2double(VoltData(1)); Resolution = 65536; % Assuming 16-bit resolution voltage_per_digital_unit = (voltage_full_scale * VoltsDiv) / (Resolution); while (counts < EventCount) fwrite(t, ':VIEW CHANNEL1'); fwrite(t, ':DIGITIZE'); fwrite(t, ':WAVEFORM:SOURCE CHANNEL1'); fwrite(t, ':WAVEFORM:FORMAT WORD'); fwrite(t, ':WAVEFORM:BYTEORDER LSBFIRST'); fwrite(t, ':WAVEFORM:DATA?'); a = fscanf(t, '%c', (length(num2str(Points * 2)) + 2)); if isempty(a) a = ['#', num2str(length(num2str(Points * 2))), num2str(Points * 2)]; end RecordBytes = str2double(a(2)); bufLen = str2double(a(3:RecordBytes+2)) / 2; ch1 = fread(t, bufLen, 'short'); %baseline = ch1(1) ch1_bc = ch1 * voltage_per_digital_unit * 2 % - (voltage_per_digital_unit * Resolution / 2);% scale and adjust for offset %ch1_bc = (ch1 - baseline) * voltage_per_digital_unit; % scale the waveform Channel_1(:, counts + 1) = ch1_bc; counts = counts + 1; fwrite(t, '*CLS'); end finish_time = clock; finish_time = (finish_time(1, 4) * 60 * 60) + (finish_time(1, 5) * 60) + (finish_time(1, 6)); laps = finish_time - start_time; count_rate = counts / laps; fclose(t);