Code covered by the BSD License  

Highlights from
Data Translation DT8837 Instrument Module Driver

Data Translation DT8837 Instrument Module Driver

by

 

Using Data Translation Vibration Instrument Modules with MATLAB through IVI-COM

AnalogInputSyncUsingTriggerBus.m
%% Analog input synchronization using Trigger Bus on Two DT8837 instruments
%   
%  Copyright (C) 2010 DataTranslation Inc.
%

%% Introduction
% This example demonstrates how to synchronize the trigger on two devices using
% the trigger bus and perform continuous anlaog input on both devices.


%% Create a device object for each instrument
% RsrcName is an IVI logical name or an instrument specific string that 
% identifies the address of the instrument, such as a VISA resource descriptor
% string.

masterDevRsrcName = 'TCPIP::192.43.218.135::INSTR';
slaveDevRsrcName = 'TCPIP::192.43.218.136::INSTR';

masterDeviceObj = icdevice('DT8837_DT8837.mdd', masterDevRsrcName);
slaveDeviceObj = icdevice('DT8837_DT8837.mdd',slaveDevRsrcName);

try
    %% Connect the device object to the instrument
    
    connect(masterDeviceObj);
    connect(slaveDeviceObj);
    
    %% Get the identity for each instrument
    
    % Get master instrument identity
    comobj = get(masterDeviceObj, 'Identity');
    propertyValue = get(comobj, 'InstrumentModel');
    str = strcat ('InstrumentModel= ',propertyValue);  
    disp(str);
    propertyValue = get(comobj, 'InstrumentManufacturer');
    str = strcat ('InstrumentManufacturer= ',propertyValue);  
    disp(str);
    propertyValue = get(comobj, 'InstrumentFirmwareRevision');
    str = strcat ('InstrumentFirmwareRevision= ',propertyValue);  
    disp(str);
    propertyValue = get(comobj, 'Description');
    str = strcat ('Description= ',propertyValue);  
    disp(str);
    propertyValue = get(comobj, 'Identifier');
    str = strcat ('Identifier= ',propertyValue);  
    disp(str);
    propertyValue = get(comobj, 'Vendor');
    str = strcat ('Vendor= ',propertyValue);  
    disp(str);
    propertyValue = get(comobj, 'Revision');
    str = strcat ('Revision= ',propertyValue);  
    disp(str);
    
    % Get slave instrument identity
    comobj = get(slaveDeviceObj, 'Identity');
    propertyValue = get(comobj, 'InstrumentModel');
    str = strcat ('InstrumentModel= ',propertyValue);  
    disp(str);
    propertyValue = get(comobj, 'InstrumentManufacturer');
    str = strcat ('InstrumentManufacturer= ',propertyValue);  
    disp(str);
    propertyValue = get(comobj, 'InstrumentFirmwareRevision');
    str = strcat ('InstrumentFirmwareRevision= ',propertyValue);  
    disp(str);
    propertyValue = get(comobj, 'Description');
    str = strcat ('Description= ',propertyValue);  
    disp(str);
    propertyValue = get(comobj, 'Identifier');
    str = strcat ('Identifier= ',propertyValue);  
    disp(str);
    propertyValue = get(comobj, 'Vendor');
    str = strcat ('Vendor= ',propertyValue);  
    disp(str);
    propertyValue = get(comobj, 'Revision');
    str = strcat ('Revision= ',propertyValue);  
    disp(str);

    %% Configure the master instrument
        
    % Enable analog input channel 1 for scanning
    set(masterDeviceObj.Analoginputchannel(1), 'Enabled', 'on');
    
    % Disable wrapping, so that data does not get overwritten in the
    % hardware FIFO when the FIFO is full
    set(masterDeviceObj.Analoginputacquisition(1), 'WrapEnabled', 'off');
  
    % Set reference clock source to internal
    set(masterDeviceObj.Referenceoscillator(1), 'ReferenceClockSource', 'DT8837ReferenceOscillatorSourceInternal');
   
    % Enable the master instrument to drive the reference clock on the trigger bus
    set(masterDeviceObj.Referenceoscillator(1), 'OutputEnabled', 'on');
    
    % Set the clock frequency
    set(masterDeviceObj.Analoginputacquisition(1), 'SampleRate', 1000);
    
    % Set the trigger source to start streaming when the instrument
    % recievs the Initiate command
    set(masterDeviceObj.Analoginputtrigger(1), 'Source', 'IMMEdiate');
    
    % Set the master trigger bus line1 (LXI0) state to be driven.  This MUST be done
    % prior to setting the slave trigger source to avoid false triggers.
    set(masterDeviceObj.Triggerbusline(1), 'Enabled', 'on');
    
    %% Configure the slave instrument
        
    % Enable channel 1 for scanning
    set(slaveDeviceObj.Analoginputchannel(1), 'Enabled', 'on');

    % Disable wrapping, so that data does not get overwritten in the
    % hardware FIFO when the FIFO is full
    set(slaveDeviceObj.Analoginputacquisition(1), 'WrapEnabled', 'off');
    
    % Set the clock source to LXI line 7 on the trigger bus
    set(slaveDeviceObj.Referenceoscillator(1), 'ReferenceClockSource', 'DT8837ReferenceOscillatorSourceLXI7');
    
    % set the clock frequency
    set(slaveDeviceObj.Analoginputacquisition(1), 'SampleRate', 1000);
    
    % Set the slave trigger source to the value that corresponds to
    % masterDeviceObj.Triggerbusline(1) where
    % masterDeviceObj.Triggerbusline(1) = 'LXI0'
    % masterDeviceObj.Triggerbusline(2) = 'LXI1'
    % masterDeviceObj.Triggerbusline(3) = 'LXI2'
    % masterDeviceObj.Triggerbusline(4) = 'LXI3'
    % masterDeviceObj.Triggerbusline(5) = 'LXI4'
    % masterDeviceObj.Triggerbusline(6) = 'LXI5'
    set(slaveDeviceObj.Analoginputtrigger(1), 'Source', 'LXI0');
    
    %% Initiate the acquisition on the slave instrument.
    
    % Now, the slave leaves the idle state and waits for the trigger on
    % LXI0 trigger bus line
    groupObj = get(slaveDeviceObj, 'Analoginputacquisition');
    slaveAnalogInputAcquisitionObj = groupObj(1);
    invoke(slaveAnalogInputAcquisitionObj, 'Arm');
    invoke(slaveAnalogInputAcquisitionObj, 'Initiate');
    
    %% Initiate the acquisition on the master instrument.
    
    
    
    % Now, the slave leaves the 'waiting for trigger' state and starts
    % acquiring data
    masterGroupObj = get(masterDeviceObj, 'Analoginputacquisition');
    masterAnalogInputAcquisitionObj = masterGroupObj(1);
    invoke(masterAnalogInputAcquisitionObj, 'Arm');
    invoke(masterAnalogInputAcquisitionObj, 'Initiate');
        
    isRunning = false;
    ScanIndex = 0;
    RequestedScansToRead = 100;
    
    %% Process data for the master instrument
    
    while (isRunning == false || ScanIndex < (RequestedScansToRead-1))
    [ScanIndex, isRunning, isArmed, isTriggered, isADSyncDetected, isADFifoOverflow] = invoke(masterAnalogInputAcquisitionObj, 'GetStatus', 0, 0, 0, 0, 0, 0);
    end
    
    % Read 100 scans from the master instrument
    RequestedScansIndex = 0;
    [ActualScansIndex, ActualScansRead, StartTimeInSeconds, StartTimeInMilliSeconds, masterSamples] = invoke(masterAnalogInputAcquisitionObj, 'Fetch', int32(RequestedScansIndex), int32(RequestedScansToRead), int32(0), int32(0), int32(0), int32(0), [0;0]);
    
    RequestedScansIndex = ActualScansIndex+ActualScansRead;
    disp(['Master: Actual Scans Index: ', num2str(ActualScansIndex) ,'  Actual Scans Read: ', num2str(ActualScansRead)]);
    disp(masterSamples);
    
    %% Process data for the slave instrument
    
    isRunning = false;
    ScanIndex = 0;
    
    while (isRunning == false && ScanIndex < (RequestedScansToRead-1))
    [ScanIndex, isRunning, isArmed, isTriggered, isADSyncDetected, isADFifoOverflow] = invoke(slaveAnalogInputAcquisitionObj, 'GetStatus', 0, 0, 0, 0, 0, 0);
    end
    
    % Read 100 scans from the slave
    RequestedScansIndex = 0;
    [ActualScansIndex, ActualScansRead, StartTimeInSeconds, StartTimeInMilliSeconds, slaveSamples] = invoke(slaveAnalogInputAcquisitionObj, 'Fetch', int32(RequestedScansIndex), int32(RequestedScansToRead), int32(0), int32(0), int32(0), int32(0), [0;0]);
    
    RequestedScansIndex = ActualScansIndex+ActualScansRead;
    disp(['Master: Actual Scans Index: ', num2str(ActualScansIndex) ,'  Actual Scans Read: ', num2str(ActualScansRead)]);
    
    %% Plot the data
    
    disp(slaveSamples);
    plot(masterSamples);
    hold on;
    plot(slaveSamples,'green');
    hold off
    
    %% Stop the acquisition
    
    invoke(masterAnalogInputAcquisitionObj, 'Abort');
    invoke(slaveAnalogInputAcquisitionObj, 'Abort');
    
 
catch DT8837error
    disp(['Error id: ', DT8837error.identifier]);
    disp(['Error Message: ',DT8837error.message]);
end

%% Disconnect the device objects from the instruments and remove them from memory

disconnect(masterDeviceObj);
delete(masterDeviceObj);   

disconnect(slaveDeviceObj);
delete(slaveDeviceObj);   

Contact us