%% DPO MATLAB ICT Get Waveform 3 % Date: 04-08-2010 % ================== % Demonstrate how to retrieve sample data from a DPO series oscilloscope and scale X & Y into voltage and time. % % TESTED & DEVELOPED % ================== % Microsoft Windows XP SP2 % TekVISA v3.3.2.7 % MATLAB Version 7.6.0.324 (R2008a) % Instrument Control Toolbox Version 2.6 % USB (TekUSB.sys v0.0.0.25) % DPO4104 FW v2.28 % ================== %% variables visa_brand = 'tek'; visa_address = 'TCPIP::TSC-DPO4104-C::INSTR'; buffer = 20 * 1024; %% Code dpo = visa(visa_brand,visa_address,'InputBufferSize',buffer,'OutputBufferSize',buffer); fopen(dpo); query(dpo,'*idn?;') query(dpo,'*esr?;') if ans ~= '0' query(dpo,':allev?;') end % get scope state head = query(dpo,':head?;'); head = head(end-1); %verb = query(dpo,':verb?;'); %verb = verb(end-1); fwrite(dpo,':head 0;*cls;'); [lrn_str bytes warning] = query(dpo,'*lrn?;'); %save dpo4k_spi.lrn lrn_str -ASCII %doesn't work, numerical data fid = fopen('dpo4k_spi.lrn', 'wt'); fprintf(fid,lrn_str,'%s') fclose(fid); % activate desired channel query(dpo,':data:source ch3;:data?;') % set source before wfmo query(dpo,':wfmo?;') query(dpo,':data?;') %query(dpo,':data:stop max;:data:stop?;') reco = query(dpo,':hor:reco?;'); %find record lenght fwrite(dpo,[':data:start 1;stop ' reco(1:end-1) ';']); % retrieve vertical scaling informaiton yof = query(dpo,':wfmo:yof?;','%s','%E'); ymu = query(dpo,':wfmo:ymu?;','%s','%E'); yze = query(dpo,':wfmo:yze?;','%s','%E'); % retrieve horizontal scaling information nrp = query(dpo,':wfmo:nr_p?;','%s','%E'); xin = query(dpo,':wfmo:xin?;','%s','%E'); xze = query(dpo,':wfmo:xze?;','%s','%E'); % get string values details = query(dpo,':wfmo:wfi?;'); % get time from trigger % retrieve raw waveform data fwrite(dpo,':curve?;'); wave = int8(binblockread(dpo,'int8')); scaled_wave = (double(wave)-yof).*ymu+yze; scaled_time = linspace(xze,xze+(xin*nrp),nrp); %% create figure wfmgraph = stairs(scaled_time,scaled_wave); set(1,'NumberTitle','off','Name','my wave'); title(details); xlabel('time (s)'); ylabel('voltage (v)'); %ylim([min(scaled_wave) max(scaled_wave)]); delete(maxline,minline); xlim([min(scaled_time) max(scaled_time)]); % trigger point annotation trigline = line([0 0],[max(scaled_wave) min(scaled_wave)],[0 0],'Color','red','LineStyle',':'); % max annotation maxline = line([min(scaled_time) max(scaled_time)],[max(scaled_wave) max(scaled_wave)],[0 0],'Color','cyan','LineStyle','--'); % min annotation minline = line([min(scaled_time) max(scaled_time)],[min(scaled_wave) min(scaled_wave)],[0 0],'Color','cyan','LineStyle','--'); % scaled grid grid on delete(1) %% return to scope_land % return scope state fwrite(dpo,lrn_str) if head == '1' fwrite(dpo,[':head ' head ';:verb ' verb ';']); end %% reset close(instrfindall) delete(instrfindall) clear all clc