Jump to content

attila

Technical Forum Moderator
  • Posts

    6,461
  • Joined

  • Last visited

Everything posted by attila

  1. Hi @tmk2z The WF for 64bit Windows systems installs both 32 and 64 bit variants of dwf.dlls The 32/64 WF installer name only refers to the application. Both contain both variants of dwf.dlls From custom application you only have to refer as dwf.dll The system will automatically load the proper variant, see Windows/System32 or SysWOW64 swapping concept. For static linking applications the 32/64 bit libs can be found in the SDK folder. We are working on the Win XP question. The official support for this OS ended 12 years ago. The 3rd party drivers are no longer supported for this OS, security risks...
  2. Hi @damayn For input attenuation you could try high voltage series resistor (+trimmer), 1-9M for 2-10X probe. Protection diode is recommended since the device is rated to 50V. See the following posts:
  3. Hi @tmk2z Unfortunately Windows XP is no longer supported. Newer WF version which supports ADP requires new Adept version and this is no longer compatible with XP.
  4. Szia @Andras It could be the USB is not supported over emulation. I can't find information about this...
  5. Hi @concept Add the WFSDK/ samples/ cs/ dwf.cs to your project, see the WFSDK/manual and /samples/py using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp1 { class Program { static void Main(string[] args) { int hdwf; if (dwf.FDwfDeviceOpen(-1, out hdwf)==0) { Console.WriteLine("failed to open device"); return; } Console.WriteLine("connected"); //... Console.WriteLine("diconnecting"); dwf.FDwfDeviceCloseAll(); } } }
  6. Hi @Kirsan This trigger misalignment is because the software does not handle the VB8034's downscaling correctly. Notice that it lets you set 500MHz but the device can only do 375MHz, or any other even division of 1.5GHz.
  7. Hi @Kirsan @JColvin Officially it does not support... I hope the impedance option is fixed in the latest beta version. Unfortunately I don't have this variant so I can't test it.
  8. Hi @Josh Woods For stable sample rate use the Signal Pattern option in the latest WF version: You can use Custom or Play mode for more samples at limited streaming rate. With AD2 Custom Pattern make sure the number of samples is power of two. With Play or Custom with ADP3X50 the number of samples can be arbitrary.
  9. Hi @Robin Oswald 1. Triggering is only used with coherent average. 4. The Window option is put back in the latest version. I try to avoid useless options. Thank you for pointing out an advantage for this. I don't recommend using the auto offset/gain options for precise measurements since these continuously adjust the parameters which may slightly affect the measurement.
  10. Hi @Simon Miller In "Value to text" tab only the Value2Text functions matters. This is called by the application to convert the value/mask pairs to text. You could also use the Protocol/ SPI/ Spy tool. Under View increase the "Max Lines", use Stamp...
  11. Hi @Limitha See the DigitalOut_Custom.py DigitalOut_CustomBus.py examples
  12. Hi @Malcolm The Wavegen drive is 10-50mA depending on voltage level, at +/-5V min 10mA and around 0V max 50mA. The aux/usb supplying affects only the power supply limits. The coherent averaging looks to be slightly better with fixed frequency noise. In the following pic R1-2 uses coherent average which perfectly overlaps C1-2 using mag/phase. The 10mV signal is generated by W1 controlled by NA. The C1 SNR is 20...10dB and C2 -40..0dB.
  13. Hi @Memtronic See the following post:
  14. Hi @Robin Oswald 1. No the default mag/phase average is the old averaging. 3. Check "Custom One", open editor, type "Coherence" and adjust "Top" 4. I've already removed the "Window" from the next version since only the flat-top has a flat response. Did you notice any advantage of any other widow?
  15. Hi @Limitha You have used the digital-io functions for software control which have ~millisecond latency. For high frequency use the earlier mentioned digital-out functions:
  16. Hi @WaldoPepper The AD2 power supplies have no voltage or current readback. The system monitor reports the entire device consumption which can fluctuate. You could use shunt resistors and monitor the voltage drop with the differential scope inputs, with ~300uV resolution. Lower resistance should be used to reduce the voltage drop and to have high resolution external amplification would be recommended. For higher resolution a DMM or dedicated module/IC should be used.
  17. Hi @Alec See the following example: AnalogOut_Phase.py ... # 0 = the device will be configured only when calling FDwf###Configure dwf.FDwfDeviceAutoConfigureSet(hdwf, c_int(0)) # enable two channels dwf.FDwfAnalogOutNodeEnableSet(hdwf, c_int(0), AnalogOutNodeCarrier, c_int(True)) dwf.FDwfAnalogOutNodeEnableSet(hdwf, c_int(1), AnalogOutNodeCarrier, c_int(True)) # for second channel set master the first channel dwf.FDwfAnalogOutMasterSet(hdwf, c_int(1), c_int(0)); # slave channel is controlled by the master channel # configure enabled channels dwf.FDwfAnalogOutNodeFunctionSet(hdwf, c_int(-1), AnalogOutNodeCarrier, funcSine) # CH1&2 ... for i in range(len(rgFreq)): print("Step "+str(i+1)+" "+str(rgFreq[i])+"Hz "+str(rgAmp[i])+"V "+str(rgPhase[i])+"* ") dwf.FDwfAnalogOutNodeFrequencySet(hdwf, c_int(-1), AnalogOutNodeCarrier, c_double(rgFreq[i])) # CH1&2 dwf.FDwfAnalogOutNodeAmplitudeSet(hdwf, c_int(-1), AnalogOutNodeCarrier, c_double(rgAmp[i])) # CH1&2 dwf.FDwfAnalogOutNodePhaseSet(hdwf, c_int(1), AnalogOutNodeCarrier, c_double(rgPhase[i])) # CH2 if i==0: dwf.FDwfAnalogOutConfigure(hdwf, c_int(1), c_int(0)) # CH2 configure dwf.FDwfAnalogOutConfigure(hdwf, c_int(0), c_int(1)) # CH1 start else: dwf.FDwfAnalogOutConfigure(hdwf, c_int(1), c_int(3)) # CH2 apply dwf.FDwfAnalogOutConfigure(hdwf, c_int(0), c_int(3)) # CH1 apply time.sleep(5) ...
  18. Hi @Josh Woods The Wavegen is optimized for analog waveforms, so the generated average frequency to be close as possible to the requested. For this, fractional steps are used and this may result in varying sample rate. I'll post soon software version with fixed sample rate option.
  19. Hi @CoreZ86 If you are using software controlled logging it can have few ms of delay. You could use triggered record mode to collect samples. This way only the ppm difference between the device oscillators will count. See AnalogIn_Record_Trigger.py use with FDwfAnalogInTriggerPositionSet(0)
  20. Szia @Andras The software is not available natively for Windows ARM64, only for Windows 32/64bit, Linux 32/64 bit intel/arm (x86, amd64, armhf, arm64) and MacOS 32/64. It is also working with MacOS M1/ARM seamlessly with emulation. As I read, Windows ARM also provides intel emulation: https://blogs.windows.com/windows-insider/2020/12/10/introducing-x64-emulation-in-preview-for-windows-10-on-arm-pcs-to-the-windows-insider-program/ The error is complaining about "Visual C++ Redistributable for Visual Studio 2015". This is included in the WF installer but WinARM may need a different variant. Please try installing it manually: https://www.microsoft.com/en-us/download/details.aspx?id=48145 https://answers.microsoft.com/en-us/windows/forum/all/unable-to-install-programs-due-to-vcruntime140dll/3a9cba87-6dfd-4591-94d6-08c347e2db39
  21. Hi @maling I run the following code with 10 device for more than 10minutes several times without any problem. multi.py similar to your GetSpectra() I only got error when disconnecting the USB cable: At which function it fails for you? For the error message use print(szerr.value) or cast the C string. from ctypes import * import sys import time from dwfconstants import * 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") szerr = create_string_buffer(512) def FDwf(fun, args): if fun(*args) == 0: dwf.FDwfGetLastErrorMsg(szerr) print(szerr.value) raise #dwf.FDwfParamSet(DwfParamOnClose, c_int(1)) # 0 = run, 1 = stop, 2 = shutdown cDevice = c_int() dwf.FDwfEnum(c_int(0), byref(cDevice)) print("Devices: "+str(cDevice.value)) hdwfs = [] for k in range(cDevice.value): hdwf = c_int() FDwf(dwf.FDwfDeviceOpen, [c_int(k), byref(hdwf)]) hdwfs.append(hdwf) for k in range(len(hdwfs)): FDwf(dwf.FDwfAnalogImpedanceReset, [hdwfs[k]]) FDwf(dwf.FDwfAnalogImpedanceModeSet, [hdwfs[k], c_int(8)]) # 0 = W1-C1-DUT-C2-R-GND, 1 = W1-C1-R-C2-DUT-GND, 8 = AD IA adapter FDwf(dwf.FDwfAnalogImpedanceReferenceSet, [hdwfs[k], c_double(1e3)]) # reference resistor value in Ohms FDwf(dwf.FDwfAnalogImpedanceFrequencySet, [hdwfs[k], c_double(1e3)]) # frequency in Hertz FDwf(dwf.FDwfAnalogImpedanceAmplitudeSet, [hdwfs[k], c_double(1)]) # 1V amplitude = 2V peak2peak signal FDwf(dwf.FDwfAnalogImpedanceConfigure, [hdwfs[k], c_int(1)]) # start tstart = time.time() sts = c_byte() for j in range(100): # repeat for i in range(100): # steps for k in range(len(hdwfs)): # device print("repeat: "+str(j)+" step: "+str(i)+" dev: "+str(k)) FDwf(dwf.FDwfAnalogImpedanceFrequencySet, [hdwfs[k], c_double(1e3+99e3*i/99)]) # frequency in Hertz # Once you set a value, it will start its measurement routine automatically time.sleep(0.01) for k in range(len(hdwfs)): FDwf(dwf.FDwfAnalogImpedanceStatus, [hdwfs[k], None]) # ignore last capture since we changed the frequency # Read the result from each of the devices, once they complete. for k in range(len(hdwfs)): hdwf = hdwfs[k] while True: FDwf(dwf.FDwfAnalogImpedanceStatus, [hdwf, byref(sts)]) if sts.value == 2: break # Compute the resistance and reactance from the harvested values resistance = c_double() reactance = c_double() FDwf(dwf.FDwfAnalogImpedanceStatusMeasure, [hdwf, DwfAnalogImpedanceResistance, byref(resistance)]) FDwf(dwf.FDwfAnalogImpedanceStatusMeasure, [hdwf, DwfAnalogImpedanceReactance, byref(reactance)]) print("Done with "+str(len(hdwfs))+" devices in "+str(time.time()-tstart)+"s") dwf.FDwfDeviceCloseAll()
  22. Hi @Limitha It is possible to configure it up to 50MHz or the set system frequency / 2. The FDwfDigitalOutDividerSet specifies the prescaler from 100MHz and FDwfDigitalOutCounterSet the low and high counts. See the WF SDK manual and the samples/ py/ DigitalOut_Clock.py DigitalOut_Duty.py ... examples
  23. Hi @davorin It requires digilent.adept.runtime >= 2.26 https://digilent.com/reference/software/adept/start
  24. Hi @ca_michelle The next version will show REJ for rejected broadcast messages. Thank you for the observation.
×
×
  • Create New...