Jump to content
  • 0

Using 2 analog Discovery 2 at the same time ?


KC06

Question

5 answers to this question

Recommended Posts

Hello,

Unfortunately no.
The WaveForms application can connect to one device at a time. For each device separate instance of the application needs to be opened.
These can be synchronized by common trigger source. Due to independent oscillators the analysis could have jitter.

Link to comment
Share on other sites

It is not hard but impossible :)
It would be nothing impossible for the software but the hardware sets the limitations.

To properly synchronize most of the device features it would require a massive connection between these, to share the oscillator and many (100-200) internal signals. Having just two trigger signals would set too many limitations to list it here.

For special use cases the devices can be controlled by separate applications and shared trigger. The data can be exported and imported or used in other application.
Other possibility is using the WaveForms SDK to create custom application/script.

Link to comment
Share on other sites

I would like to learn about this too. I need to use 3 analog discovery, but the need not be sincronized. They are meant to control 3 different experiments, but somehow I need to start them and log at about the same time. Can this be done either with the javascript scripting, or with the SDK? Thank you

Link to comment
Share on other sites

Hello,

For each device you can open and control it by separate WaveForms application instance.
The acquisition and generation can be synchronized using the trigger IO pin, like:
 - wire the T1s of each device together
 - for one ("master") device set the Trigger 1 to output Manual trigger signal (under Settings/Options or rightmost button in status bar)
 - set the instruments to trigger on External 1 (also set scope and logic analyzer to Normal trigger)
 - for the "master" device press Manual Trigger under Settings (or leftmost button in status bar)

Similar it can be done in python script too.

In case millisecond level (~10ms) of synchronization is suffice you can rely on the script timing too. Like with the following Python script:

from ctypes import *
import sys
import time

if sys.platform.startswith("win"):
    dwf = cdll.dwf
elif sys.platform.startswith("darwin"):
    dwf = cdll.LoadLibrary("/Library/Frameworks/dwf.framework/dwf")
else:
    dwf = cdll.LoadLibrary("libdwf.so")

# check library loading errors, like: Adept Runtime not found
szerr = create_string_buffer(512)
dwf.FDwfGetLastErrorMsg(szerr)
print szerr.value

# declare ctype variables
IsInUse = c_bool()
hdwf = c_int()
rghdwf = []
cchannel = c_int()
cdevices = c_int()
voltage = c_double();

# declare string variables
devicename = create_string_buffer(64)
serialnum = create_string_buffer(16)

# print DWF version
version = create_string_buffer(16)
dwf.FDwfGetVersion(version)
print "DWF Version: "+version.value

# enumerate connected devices
dwf.FDwfEnum(c_int(0), byref(cdevices))
print "Number of Devices: "+str(cdevices.value)

# open and configure devices
for idevice in range(0, cdevices.value):
    dwf.FDwfEnumDeviceName(c_int(idevice), devicename)
    dwf.FDwfEnumSN(c_int(idevice), serialnum)
    print "------------------------------"
    print "Device "+str(idevice+1)+" : "
    print "\t" + devicename.value
    print "\t" + serialnum.value
    dwf.FDwfDeviceOpen(c_int(idevice), byref(hdwf))
    if hdwf.value == 0:
        szerr = create_string_buffer(512)
        dwf.FDwfGetLastErrorMsg(szerr)
        print szerr.value
        dwf.FDwfDeviceCloseAll()
        sys.exit(0)
        
    rghdwf.append(hdwf.value)
        
    dwf.FDwfAnalogInChannelEnableSet(hdwf, c_int(-1), c_int(1)) 
    dwf.FDwfAnalogInChannelOffsetSet(hdwf, c_int(-1), c_double(0)) 
    dwf.FDwfAnalogInChannelRangeSet(hdwf, c_int(-1), c_double(5)) 
    dwf.FDwfAnalogInConfigure(hdwf, c_int(0), c_int(0)) 

# log data from each device
for isample in range(0, 10):
    time.sleep(1)
    print "Sample "+str(isample+1)
    for idevice in range(0, cdevices.value):
        print "Device " + str(idevice+1)
        hdwf.value = rghdwf[idevice]
        dwf.FDwfAnalogInStatus(hdwf, False, None) # 1-10ms
        dwf.FDwfAnalogInChannelCount(hdwf, byref(cchannel))
        for ichannel in range(0, cchannel.value):
            dwf.FDwfAnalogInStatusSample(hdwf, c_int(ichannel), byref(voltage))
            print "Channel " + str(ichannel+1)+" : "+ str(voltage.value)+"V"
    
# ensure all devices are closed
dwf.FDwfDeviceCloseAll()

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...