Jump to content

attila

Technical Forum Moderator
  • Posts

    6,956
  • Joined

  • Last visited

Everything posted by attila

  1. Hi @LuisP Originally in ADP3450 4x32ki oscilloscope buffer was available, using the device's B-RAM. This is still true for embedded Linux boot mode and optionally selectable in standard mode, for backward compatibility. With newer software, with the new default standard mode configuration it can capture up to 128Mi total (2x64Mi or 4x32Mi or 8x16Mi) oscilloscope, 32Mi compressed logic analyzer and 2x32Mi AWG play samples. All this using the device's DDR-RAM. It also provides device buffering (memory segmentation) for scope and logic.
  2. At what sample rate are you capturing ? If this is ~MHz you could use record mode, continuous data streaming on ADs. The AD3 and newer devices have reference clock option which makes the sampling interval stable over time. AD1,2 only works with internal oscillator so there will be shift over time between captures with multiple devices. You could lower only the Trigger signal frequency sent to the ADs or connect the Trigger only to one 'master' AD and configure this to output 'Scope' trigger event on Trigger2 which you connect to the other ADs. This way the captures will be in sync. The ADP2230, ADP3X50 provide device buffering (memory segmentation) which can perform captures with 1us latency.
  3. yes, yes, The device buffer is 256MiB, 256M samples @ 8bit, 128M @ 16bit, 64M @ 32bit, 32M @ 48b. The sync capture uses data streaming, so with custom application the length is unlimited.
  4. Hi @Nikola Use FDwfParamSet(DwfParamDigitalVoltage, 1.8) before device open or FDwfDeviceParamSet(hdwf, DwfParamDigitalVoltage, 1.8) to adjust after software connection or the obsolete FDwfAnalogIOSet(hdwf, 0, 0, 1.8)
  5. Hi @kevin vannorsdel Digital Discovery supports Sync capture mode in which the trigger detector module is used for sample condition, level and/or edge. Triggering can't be used in this mode. Analog Discovery 3, ADP2230, ADP3X50 support external reference clock and sampling on a clock in Oscilloscope interface where Digital channels can also be enabled, Logic Analyzer embedded in Scope.
  6. Hi @alexplcguy If the trigger rate is 480Hz and your capture rate is only 5Hz then you will have missed triggers and the captures won't be synchronized. The trigger rate should be less then 5Hz and to synchronize the captures makes sure all capture devices are armed before the (first) trigger.
  7. Hi @siatran With DIO-8/9 the gain of the current sense amplifier is set. https://digilent.com/reference/test-and-measurement/current-and-power-adapter/reference-manual#compatible_products To eliminate the offset error, quickly calibrate 0 level, under Time/Options: Zero offset or take a measurement and under channel gear menu press Zero: Avg
  8. Hi @Abdullah1 Use SUM with AD3 or newer devices.
  9. Hi @LuisP Newer software version brings improvements, adds deep buffer, device buffering (memory segmentation)... The FDwfAnalogInStatusData can return an entire capture 128M samples. You can also use FDwfAnalogInStatusData2 to retrieve parts of the data. The Record mode is for long/continuous data streaming, data chunks are retuned in 'loop'. The Single mode performs and returns one capture, up to device buffer size. The FDwfAnalogInStatus fetches the data (chunk)/information from the device and rearms it for Single capture mode. For Record it fetches only the new samples since the previous FDwfAnalogInStatus call. The FDwfAnalogInStatusData and other Status* functions return last fetched data/information.
  10. Hi @hal56gci You could explore the application/device features in demo mode.
  11. Hi @m72 Sorry I thought the disconnect is a new failure... I still haven't been able to reproduce this frequency issue. If the frequency is not configured properly, a 'not locked' warning is show on connection to the device. It is not show with auto-reconnect, which can be disabled under settings/options/device. Eventual lock problem is also show when adjusting the frequency under settings/option/clocking, at the bottom of the dialog.
  12. Hi @ilkeryelbay For longer capture select Mode: Record, like 5M samples at 1MHz. I suppose you are using ADP3450 Update the software for deep device buffering and in Time group specify Samples and Rate, even for normal capture.
  13. Hi @Mohamad Idris Easier would be using a Bus, Type: Custom, draw with mouse, copy&paste in the table on the right, use the Import.
  14. Hi @alexplcguy A. There is one Pattern Generator in the device so the state, trigger-wait-run are the same for all signals. With Digital Discovery (and larger devices ADP2230, ADP3X50) you can specify Repetition for each signal, so it generates it only the given number of times, but this is not available with AD1,2,3 B.
  15. Hi @Abdullah1 To reduce ringing use damping resistor, 10X probe or termination. Also make sure to have proper ground connection between devices and circuits. Use shielded or twisted cable to reduce crosstalk.
  16. This seems to be USB cable contact issue, at least the same error is generated on disconnect. Do you see device re-connect event in the system when this error shows up ? Have you tried to use a different port, cable ? I've never seen problem related to this, but I'll try to rebuild the configuration with stricter communication constrains for the next software version.
  17. I also tried 2 DDs but I can't reproduce it. In 3.22.20 direct trigger on any DIO/DIN was added to the device configuration. If it was a timing issue, it should show up at higher frequencies, but it seems to work even overclocked to 125MHz. This frequency adjustment is useful if you want to generate or capture at high rate which is not derivable from 100MHz, like to generate 40, 48MHz... use 80MHz or 96Mhz or capture at 640MHz and not at 800, 400MHz...
  18. Hi @m72 It is working for me with 3.22.20 and latest
  19. Hi @Mohamad Idris I don't know where did you find some of the functions used in you script, but these are not valid in WaveForms application. See the Help tab for more information:
  20. Hi @Maxpfeiff There are multiple issues in your script: - I don't know why are you setting output enable for DIO-1 but in comments mention DIO-0. The digital-io setting would override digital-out function for the driven channel. - you are reconfiguring the same digital-out DIO-0 twice - FDwfDigitalOutTriggerSourceSet has 2 arguments not 3 - FDwfDigitalOutConfigure has 2 arguments not 1 - I don't know what you want with FDwfDigitalOutRepeatTriggerSet - there is one digital-out instrument in the device, but you are including it in your channel loop like digital-out channels could be controlled separately - FDwfDeviceTriggerSet channel argument like all indices in the API are 0 based, there is not trigger #2 only #0 and #1 See the following example which configures all digital-out channels for each connected device to output 1kHz clock. DigitalOut_Devices.py The 'first' device outputs TriggerPC on Trigger2 (#1) and each device starts on T2. It also configures the 'first' device to output reference clock on T1 (#0) and others use this as reference clock input. This is supported by newer devices AD3, ADP223, ADP3X50 You can further use FDwfDigitalOutWaitSet and DwfParamFreqPhase to tune trigger and reference clock signal wire delays between devices. """ DWF Python Example Author: Digilent, Inc. Revision: 13/6/2024 Requires: """ from ctypes import * from dwfconstants import * import math import time import sys 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") version = create_string_buffer(16) dwf.FDwfGetVersion(version) print(f"DWF Version: {version.value}") dwf.FDwfParamSet(DwfParamOnClose, 0) # continue running after device close cDevice = c_int() dwf.FDwfEnum(0, byref(cDevice)) print(f"Found {cDevice.value} devices") print("Connect trigger lines between devices for reference clock and triggering") hdwf = c_int(0) hdwfMaster = c_int(0) dwf.FDwfParamSet(DwfParamExtFreq, 10000000) # reference clock frequency dwf.FDwfParamSet(DwfParamFrequency, 100000000) # system clock frequency # Open device for iDevice in range(cDevice.value): dwf.FDwfDeviceOpen(iDevice, byref(hdwf)) if hdwf.value == 0: continue dwf.FDwfDeviceAutoConfigureSet(hdwf, 0) # the instruments will only be configured when FDwf###Configure is called if hdwfMaster.value == 0: hdwfMaster.value = hdwf.value dwf.FDwfDeviceParamSet(hdwf, DwfParamClockMode, 1) # reference clock output on Trigger 1 dwf.FDwfDeviceTriggerSet(hdwf, 1, trigsrcPC) # Trigger 2 outputs TriggerPC else: dwf.FDwfDeviceParamSet(hdwf, DwfParamClockMode, 2) # reference clock input on Trigger 1 print(f"Configure Device {iDevice +1}") dwf.FDwfDigitalOutTriggerSourceSet(hdwf, trigsrcExternal2) hzSys = c_double() dwf.FDwfDigitalOutInternalClockInfo(hdwf, byref(hzSys)) cChannel = c_int() dwf.FDwfDigitalOutCount(hdwf, byref(cChannel)) for iChannel in range(cChannel.value): dwf.FDwfDigitalOutEnableSet(hdwf, iChannel, 1) # DIO-0 dwf.FDwfDigitalOutDividerSet(hdwf, iChannel, int(hzSys.value / 1e4 / 2)) # prescaler to 2kHz, SystemFrequency/1kHz/2 dwf.FDwfDigitalOutCounterSet(hdwf, iChannel, 1, 1) # 1 tick low, 1 tick high dwf.FDwfDigitalOutConfigure(hdwf, 1) print("Triggering to start generators...") dwf.FDwfDeviceTriggerPC(hdwfMaster) dwf.FDwfDeviceCloseAll() Captured 2 DIOs from 2 devices with a 3rd device:
  21. Hi @Ody101 I don't think it's that important. Turns on some FETs to discharge internal and user rails. Probably for the safety of later ones.
  22. Hi @ilkeryelbay As I was about to add access to it, I noticed that it was already implemented after an earlier request :)
  23. Hi @ilkeryelbay These averages are not available from script but can be calculated like this: Scope.run(); const cnt = 100; var sum = 0; for(var i = 0; i < cnt; i++){ Scope.wait(); sum += Scope.Math1.measure("Custom"); } Scope.stop(); print(sum/cnt);
×
×
  • Create New...