% Control de un osciloscopio Tektronix de la serie TBS1052B-EDU desde una 
% PC via puerto USB. Ejemplo basico.

% Para mas informacion consultar el manual: "TBS1000-EDU Programmer Manual" 
% que se encuentra en la pagina web de Tektronix y de la materia. 

%clear all   

pause on                    % Habilitamos la funcion PAUSE (permite pausar 
                            % la ejecucion del programa para ver el 
                            % resultado de cada bloque de instrucciones 
                            % de a uno por vez).
disp(' Apretar cualquier tecla para continuar ')    % Envia un mensaje 
                            % explicativo a la pantalla. 
pause                       % Efecua la pausa.

if(exist('osc') == 1)
    % Si el canal de comunicacion ya esta abierto, NO LO ABRO NUEVAMENTE.
    disp('La comunicacion ya esta abierta')
else
    % Si el canal de comunicacion aun no esta abiero, lo DEFINO ahora. 
    % Uso un puerto USB de la PC y el protocolo denominado: 
    % Virtual Instrument Software Architecture (VISA). 
    osc = visa('ni','USB0::0x0699::0x0368::C017059::INSTR')
    
    % Finalmente ABRO la comunicacion con el instrumento.
    fopen(osc);
end

% Ahora le pido al osciloscopio algo elemental: que se identifique. 
% Si da error, la comunicacion no esta correctamente establecida y carece 
%   de sentido continuar ejecutando el resto del programa.
fprintf(osc,'*IDN?')    % Pregunta la identificacion.       
ID = fscanf(osc)        % Escribe la identificacion en la pantalla.

disp(' Apretar cualquier tecla para continuar ')
pause



% EJEMPLOS DE COMUNICACION

% 1) PREGUNTAMOS el modo en que esta acoplando el canal 1.
fprintf(osc,'CH1:COUPling?')
out = fscanf(osc)

disp(' Apretar cualquier tecla para continuar (Coupling?) ')
pause

% 2) ESPECIFICAMOS que el acoplamiento del canal 2 (CH2) sea DC (CC en
% cas tellano). 
fprintf(osc,'CH2:COUPling DC')    % El canal queda acoplado en DC indepen-
                                % dientemente del acoplamiento que tuviese
                                % antes de ejecutar la instruccion. 
disp(' Apretar cualquier tecla para continuar (Acoplo CH2 en DC)')
pause

% 3) PREGUNTAMOS cual es el valor numerico de la medicion 3.
%fprintf(out,'MEASU:MEAS3:VAL?')
%out = fscanf(out)

%disp(' Apretar cualquier tecla para continuar ')
%pause
  
% 5) ESPECIFICAMOS que la  fuente (SOURCE) de la medicion 4 sea el canal 2,
% y que ademas, la medicion consista en el valor medio.
fprintf(osc,'MEASU:MEAS4:SOURCE CH1') 

pause(1)

fprintf(osc,'MEASU:MEAS4:TYPE PK2pk ')

disp(' Apretar cualquier tecla para continuar PK2pk')
pause 

pause(1) 

% 6) PREGUNTAMOS cual es el valor numerico de la medicion 4.
fprintf(osc,'MEASU:MEAS4:VAL?') 
medicion4 = str2num(fscanf(osc))

disp(' Apretar cualquier tecla para continuar ')
pause

% 7) Grabamos el resultado de la medicion 4 en un archivo de texto llamado
% medicion.txt. No es necesario que tal archivo exista: si no existe, lo
% crea en el directorio de trabajo; si existe en dicho directorio, lo 
% sobreescribe.
save medicion.txt medicion4 -ASCII

% 8) Cerramos la comunicacion (NO PASEN ESTO POR ALTO).
%fclose(osc)
%delete(osc)
%clear osc

% 9) Deshabilitamos tambien la funcion PAUSE.
pause off

