Search the Community

Showing results for tags 'waveforms'.

More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


  • News
    • New Users Introduction
    • Announcements
  • Digilent Technical Forums
    • FPGA
    • Digilent Microcontroller Boards
    • Non-Digilent Microcontrollers
    • Add-on Boards
    • Scopes & Instruments
    • LabVIEW
    • FRC
    • Other
  • General Discussion
    • Project Vault
    • Learn
    • Suggestions & Feedback
    • Buy, Sell, Trade
    • Sales Questions
    • Off Topic
    • Educators
    • Technical Based Off-Topic Discussions

Find results in...

Find results that contain...

Date Created

  • Start


Last Updated

  • Start


Filter by number of...


  • Start





Website URL







Found 110 results

  1. I am new to the WaveForms software. In browsing the protocol section, it lists CAN. I'm happy and surprised to see this feature. How is this intended to be used? For example, using an external CAN bus transceiver to DIO 0 and DIO 1? A two wire CAN bus is a differential signal (similar to RS485) with clear limits on dominant / recessive states. I am using the Analog Discovery 2 hardware. What are the recommended connections? I'm hoping any responses to this will also apply to the logic analyzer as well. Having a CAN bus decoder would be awesome. WaveForms: 3.8.2 64 bit; Qt 5.6.3; Windows 7 Hardware: Analog Discover 2 Cheers, JMA
  2. Hi, I have been using the Waveforms in Mac to control digital discovery. And I am now familiar with using the scripts in Waveforms. I want to use Tool.start option to run python from Waveforms. Below is the command I am using based on the format. But I haven't been successful with running python. Tool.start("/Users/venkatap/anaconda2/bin/python", "/Users/venkatap/Waveforms_v1/py_files/","/tmp/") As all the examples and discussions about this topic are related to windows machine, I wanted to know how to use the Tool.start option in Mac. Kindly assist me with this. Thank you, Praveen
  3. Hi, I've got a question regarding button mode for pin in Static IO instrument. I select a button in "0/1" mode for some pin and expect pin to be high while the button is pressed (all the time until released), and low once released. Instead of that, pin goes high on first press/release of the button and stays high from now on, no matter of any subsequent press/release actions. Opposite is true in "1/0" mode - pin goes low on first press/release and stays low forever. Pin in switch mode (1/0) works as expected. Either I do not understand the function, or there is some bug in the software. Behavior is the same in demo mode and with real Analog Discovery 2. Linux and Windows 10, Waveforms 3.9.1.
  4. Is there source code available for DWFCMD.EXE? I've found source code examples for many other functions using the C++ and python APIs, so I'm just wondering if source code was available for DWFCMD.EXE. It's a really useful program, by the way, and it's made getting up-and-running with the AD2 much faster. But now we have reached a point where it's too slow to call as stand-alone executable. Thanks.
  5. I have an Analog Discovery 2 and am using Waveforms to test circuits, measure voltage and current, model protocols such as I2C, SPI, and CAN. What would the home edition of Labview do to help me? Thanks
  6. Hi, I've captured a set of SPI messages successfully using my Digital Discovery and I would like to export the data so that I can parse it. I've exported the waveforms but this is a huge file which doesn't just give me the events on the SPI but instead the value at each time interval. Ideally I would like to export the contents of the very useful event window. Please could someone tell me if there is a way to do this? Cheers, Andy
  7. Hi, and thanks for the support so far. After a lot of experimenting and reading the help, I'd like to understand the "envelope" of possible triggered, repeated, logged acquisitions, which can run unattended for days or weeks. We need to leave a system in an inaccessible location and log at least 4 analog channels with at least 100 KHz sample rate, for a time of at least 100 usec after the trigger occurs for each triggered event. We believe these events have a time frame of 5 or so 60 Hz cycles, so that's 85 msec post-trigger and we'd like a cycle or two (16 or 32 msec) of pre-trigger. These events are rare and not on a predictable timetable. So we are rather searching for a needle in a haystack and we hope to find evidence it exists. Here I am talking about Scope function (Logger's sample rate of 100 msec is too slow for this case) and there are still many details I don't claim to understand. But since I need to make a report of what is possible with AD2, here goes. Record mode can capture much longer numbers of samples Device manager determines what is possible (e.g. Patterns) but some things seem ignored (e.g. Scope samples) Sample rate, number of samples, and pre-trigger samples are set with the "Config" button with the green diode-like symbol. This is intuitive with a % of total acquisition setting for trigger location. Zooming and scrolling in the display window does not change what you set with the Config button so subsequent captures use the same config. Actual sample rate and length is limited by USB connection speed to the host PC. On a 1.7 GHz dual core Linux with 16 GB RAM and SSD, it seems to be limited to 200 KHz sample rate. At 100 KHz we can capture up to 10 M samples, for a 100 second acquisition Acquisition in "record" mode can only be started with a button click and cannot be triggered by normal scope triggers even though those settings are still present on the GUI. Pressing Record is the only way to start capture and that immediately captures one acquisition. It can't wait for trigger conditions to be met. An acquisition can be saved using the logging settings if set for "each triggered acquisition", even though it really wasn't 'triggered'. Also "each acquisition" works. In record mode, if Device Manager is set to allow it, Patterns can work to use Scope Detector to make an external trigger output on a DIO pin, and this will trigger on the stated conditions but only *after* the Scope Record button is clicked. And I also have to remember to separately click the Pattern Run button or its output won't generate This can only record a single event and you have to click on the Scope Record button to start the acquisition. So Record mode won't work for us. In "repeated" mode, the scope will use the trigger settings Device Manager determines how many samples can be captured: 8K or 16K are the highest options of the 6 available and those seem to be the only ones possible. so it can wait until trigger conditions occur, then capture each time the trigger conditions are met. Sample length is a max of 16384 samples Settings - Options can make one of the trigger pins "Scope" which generates a single rising edge trigger per acquisition, to trigger other AD2s or other logging devices Sample rate and pre-trigger are confusing in repeated mode. It appears they can be set in the Time dialogs, also number of samples, pre-trigger (the "position" setting), but this interacts with the scope display screen: zooming and panning changes your intended settings. There seems to be no way to lock them like on a traditional desktop DSO. It's nothing like Config in Record mode. The display has 10 divisions so if I want to trigger at 2 divisions I'm better off to drag the white triangle on the top of the scope display to 2 divisions from the left. In repeated mode, Trigger takes place at time 0 and pretrigger time is negative. So for 16K samples at 100 KHz, that is about 16 msec/div. Trigger two divisions from left makes the leftmost time -32 msec and Time "Position" 48 msec, which doesn't make any sense to me. Time Base is 16 msec/div as expected. Don't dare zoom in the scope display or the time settings will also change, changing the next triggered acquisition! If you do this by accident its a tedious, multi-click process to get back to the settings you intended. At 100 KHz 16384 samples is 168 msec, long enough for us, we hope. At 8K samples we'd have to drop to 50 KHz samples Clicking Run button means scope will wait for trigger satisfied, then log both channels to PC memory, auto-incrementing the file name File name can include day hour min sec which is handy. Be careful entering this information or Waveforms will crash. I'll post a bug elsewhere. Full timestamp and setting values are included in the .csv log file You specify how many acquisitions to save, at which point logging halts. 1,000,000 is the largest number I could set. Saving workspace sometimes causes a ghost progress window which can be cleared with another save. So Repeated mode will work for us, with the limits of 16K @ 100 KHz samples Each 2-channel 16K log file is about 984 KBytes. As each 16K sample file is a bit under 1 MByte, you get 1000 log files per GB. Summary: For unattended, auto trigger and acquisition of multiple events, and logging to a computer file, "repeated" mode is the only option. We can log two analog channels per AD2, plus digital inputs if we wish. External trigger output: one rising edge per triggered acquisition. Trigger goes low at end of acquisition. Trigger other AD2s or external equipment. Samples per acquisition are 16K or 8K Logging can occur up to the maximum value you set (up to 1 M acquisitions), or the PC runs out of disk space, at about 1 MByte per 16K acquisition.
  8. Hello, I have a first generation Analog Discovery, S/N 210244626692. It recently stopped communicating with my computer. I have tried different USB ports, different cables, and tried a classmate's AD on my computer. The classmate's AD was recognized by Waveforms, but mine was not. Nothing shows up in the Device Manager when my AD is plugged in. -Nat
  9. Hi, I'm working on a WaveForms script which would be able to generate chart with the frequency profile of a liquid. For this, I need to use a Wavegen and a Scope: first I need to set the generator to a certain frequency and then I'd like to check the power of that signal on the scope. Between the probes of the generator and the scope there will be the liquid I would like to test. I created a basic script to step from 1 Hz to 150 Hz, check that signal with the scope, repeat this loop 5 times, and calculate the min, max and average values at each frequency. Although the script works, I have a few questions: * I couldn't find any documentation about the Scope.Channelx.fftmagnitude and fftfrequency arrays. Where should I look for them? Are there any other properties related to the FFT configuration? * Is there a way to set the number of BINs and samples of the scope's FFT? * Can I somehow use the Goertzel algorithm instead of FFT? (The Görtzel algorithm is designed to tell us the power of a signal at one predefined frequency. I would need this to get the power for the exact Hz value I define, and not the closest one I have from the FFT like I do it now. * Is there a way to change the color/style of the charts? Here is the script itself, but bear in mind that it is just the very first version const hzmax = 150; // the maximum frequency to measure const csamples = 5; // the number of samples to measure for each frequency const cdatapoints = 150; // chart X-axis resolution (currently: 1 datapoint / 1 Hz) var datapoints = new Array(4); // datapoint array datapoints[0] = new Array(cdatapoints); // max datapoints[1] = new Array(cdatapoints); // avg datapoints[2] = new Array(cdatapoints); // min datapoints[3] = new Array(cdatapoints * csamples); // raw data // clear the raw data array for(var j = 0; j < cdatapoints * csamples; j++) { datapoints[3][j] = 0; } // generate the freqeuncies to measure var frequencies = new Array(cdatapoints); for(var j = 0; j < cdatapoints; j++) { frequencies[j] = j+1; } { // configure plot plot1.X.Units.text = "Hz"; plot1.X.Offset.value = -hzmax/2 plot1.X.Range.value = hzmax; plot1.Y1.AutoScale.checked = false; plot1.Y2.AutoScale.checked = false; plot1.Y3.AutoScale.checked = false; plot1.Y4.AutoScale.checked = false; const vmax = 1.00; const vmin = 0.98; var offset = -(vmin + (vmax - vmin)/2); var range = (vmax - vmin); plot1.Y1.Offset.value = offset; plot1.Y2.Offset.value = offset; plot1.Y3.Offset.value = offset; plot1.Y4.Offset.value = offset; plot1.Y1.Range.value = range; plot1.Y2.Range.value = range; plot1.Y3.Range.value = range; plot1.Y4.Range.value = range; } { // configure wavegen Wavegen1.Channel1.Mode.text = "Simple"; Wavegen1.Channel1.Simple.Type.text = "Sine"; } { // configure scope Scope1.BufferSize.value = 1; Scope1.Buffer.value = 1; Scope1.Time.Mode.text = "Shift"; Scope1.Channel1.checked = true; Scope1.Channel2.checked = false; }; for (var n=0; n<csamples; n++) { Scope1.Time.Samples.value = 1024; for (var i=0; i<hzmax; i++) { // change the frequency to the next one var frequency = frequencies[i]; Wavegen1.Channel1.Simple.Frequency.text = frequency; Scope1.Time.Rate.value = frequency * 256; print("Frequency: ",frequency," Hz | Running @ ",Scope1.Time.Rate.value," Hz | ", Scope1.Time.Samples.value," samples"); // take a single sample Scope1.single(); Scope1.wait(); // check out the FFT values var rgmag = Scope1.Channel1.fftmagnitude; var rghz = Scope1.Channel1.fftfrequency; var c = rgmag.length; var minHzDistance = frequency; // check all the FFT values, and get the one closest to our inspected frequency for(var j = 0; j < c; j++) { var hz = rghz[j] var hzDistance = frequency - hz; if (hzDistance < 0) { hzDistance = -hzDistance; } if (hzDistance <= minHzDistance) { minHzDistance = hzDistance; datapoints[3][i*csamples + n] = rgmag[j]; } } // calculate the min, max, avg values var rgmin = 1000.0; var rgavg = 0.0; var rgmax = 0.0; var validsamples = 0; for(var j = 0; j < csamples; j++) { currentsample = datapoints[3][i*csamples + j]; if (currentsample != 0) { if (currentsample < rgmin) { rgmin = currentsample; } if (currentsample > rgmax) { rgmax = currentsample; } rgavg += currentsample; validsamples++; } } rgavg /= validsamples; print("Min:",rgmin," V | Avg:",rgavg," V | Max:",rgmax," V | error: +/-",minHzDistance," Hz"); print(); // save the calculated data into their arrays datapoints[0][i] = rgmax; datapoints[1][i] = rgavg; datapoints[2][i] = rgmin; // check if the error if too high if (minHzDistance > 0.5) { Scope1.Time.Samples.value *= 2; i--; } // plot the most recent values on the chart = datapoints[0]; // max = datapoints[1]; // avg = datapoints[2]; // min } }
  10. Waveforms is excelent for setting up data Collection, recording data and save to file. To analyze the data I want to use LabVIEW. Is it possible to read the aquisition files stored by the Waveforms software from LabVIEW? I am using the Analoge Discovery 2 Scope function.
  11. I'm using WaveForms (and Javascript) for the first time. My problem is really simple; I measure a voltage signal with the Analog Discovery 2, and want to get a "long" file with data over several seconds. When using the record-function and exporting data, I only get 1000.000 data points with the frequency required, and I can't seem to figure out how to save the raw data in the script. If anyone can help this rookie, I'll be very grateful! I think I'll need a whole new script, but it looks like this right now: ch = Scope.Channel1 var newfile = File("~/Desktop/scope/measure.csv") if(!nyfil.exist()){ var AllData = Date()+","" nyfil.appendLine(AllData) Index++
  12. Hello, Learning to create/manage custom scope measurements in Waveforms for the AD2. So far I have created a couple of custom measurements but do not understand how/what is actually going on regarding how they are managed. Any help would be appreciated. Here are the steps I took to create a custom measurement: Added the "stock" Custom Channel measurement Modified it Changed its name to Capacitor Value Saved the script in a directory as a txt file Subsequently: Modified the measurement script (Capacitor Value) some more Changed its name to CapVal Saved the updated script txt file Here is where I am confused: When I go to the Custom Measurement drop down menu is see BOTH custom measurement scripts listed. I had assumed that when I changed the measurement name and saved the modified script by overwriting the script text file that there would be no trace of the original script - but this is not the case. QUESTIONS: How/where are custom measurements saved? Are custom measurement scripts they stored internal to Waveforms based on their name in the measurement editor window? What does the script->save menu do - let you save for off-line editing only? How do you remove custom measurement scripts from the "add measurement" menu? What is the correct way for creating and managing custom measurement scripts? Is there documentation/resources that already exist that can be referred to? Again, any help would be appreciated. Thanks. TerryF
  13. Hi all, I am working on SPI transceiver with AD2 in master mode. I am using python sample codes provided. transmitting is working fine but in receiving i am able to get the signals on wire but not to the variable in python rgwRX = (c_uint16*1)() while True: dwf.FDwfDigitalSpiSelect(hdwf, c_int(4), c_int(0)) dwf.FDwfDigitalSpiRead16(hdwf, c_int(2), c_int(24),rgwRX, c_int(len(rgwRX))) dwf.FDwfDigitalSpiSelect(hdwf, c_int(4), c_int(1)) print rgwRX[0] I am getting only '0's corresponding signal while receiving tapped on CRO is attached and it is proper but when i try it using Waveforms software it works but i see same signal on wire
  14. Just got my hands on DDiscovery today. Hoping to use it to replace my bulky old logic analyzer for testing my Analog-to-Digital Converters. Initially, I apologize If I tend to write more than I need to. I would like to have the below three functions simultaneously in the Logic Analyzer tab. 1) Synchronous with external clock: To capture 16+ channels using an external clock which would be a DATARDY flag or just sampling clock from my ADC. 2) Trigger-based acquisition 3) Repeat it for number of times while saving to file each time. So far, in Waveforms, I can only get 1) without 2) or 3) and vice versa. So basically, I want : 1) Wait for Trigger 2) If Trigger, start a "SYNCHRONOUS" acquisition 3) Once complete, save to file. 4) If total number of acquisitions not complete, Go back to 1) In Waveforms, if I go to "SYNC" mode, the "trigger options" become disabled. If I go to repeated, it is not "SYNC". To sum up, 1) Can I, using Waveforms, get the above working? 2) If not, is it a hardware limitation? or is it just software. If software, can I write my own script to build the above scenario? Note I am not a software guy, pure analog so will be a big thing for me to get familiar with Java scripting stuff. Sorry again for the long question and thanks in advance. Ahmed
  15. Hi all i am using Analog discovery 2 for communication purpose.(CAN) I tried using the sample code given same as attached. I am using PCAN to send/receive frames to analog discovery 2 , I am sending only one frame with Standard ID : 0x011 and Data: 0xaa 0xbb 0xcc 0xdd 0xee 0xff but i am receiving lot of Frames with the same ID sent, lot of extended remote frames with CRC errors ,etc. I have attached the console output for reference. Can I know why i am facing the issue? I tried same experiment with waveforms still having similar issue. I have attached the screen shot of it. CAN_Console.txt
  16. There is a minor bug in Waveforms 3.8.2 in the Impedance Analyzer: the metadata for probe resistance and capacitance seem to be swapped: #ProbeCapacitance: 1.04e+06 Ω #ProbeResistance: 4.3e-11 F Also, the metadata does not include the excitation (amplitude and offset). I would check the beta release of newer versions, but there doesn't seem to be a beta for the Mac OS X, just Windows and Linux.
  17. I was wondering whether it is possible to use the second function generator while the first one is being used for the network analyzer tool. Here is the use case: I'm testing part of a class-D amplifier, in which the triangle wave to the comparator is generated by the second function generator of the Analog Discovery 2. I'd like to use the network analyzer interface to characterize the amplifier, while keeping a fixed triangle wave on channel 2. I realize that there is probably some way to write a script to do this, but it would be nice to have all the GUI of the network analyzer and export.
  18. Hi, I'm trying to measure the capacitance of a sensor, and am using the impedance analyzer tool to do so. If I do not connect anything I notice it sees a 22pF parallel capacitance. Is this because the program does not automatically compensate for the internal 24pF capacitance? EDIT: I am using the Analog Discovery 2 with Waveforms 3.8.2
  19. Waveforms metadata has improved in the past year, but I'd like to see still more. Here are 4 suggestions: Metadata from other tools in the instrument: For example, when saving oscilloscope results, I would like to have the power-supply and waveform settings reported as meta-data. I'm often characterizing circuits, and it would be good to have those important parameters saved automatically, instead of having to manually add them each time. Save measurements with traces: Also, exporting from the oscilloscope currently allows saving either the measurements or the waveforms, but the "Acquisition" option should save both, with the measurements included as comments in the file. Column headers as comments in tab-separated format: It would also be nice if in tab-separated format, the headers of the columns were done as a comment (at least as a selectable option), rather than uncommented. The plotting program I use does not like non-numeric values in the fields, but ignores comments. (There are various workarounds for the non-numeric values of the headers, but the easiest one is to modify the data file, which is not a practice I really want to encourage in engineering students—it is safest for data integrity to regard data files as untouchable.) Sticky notes: Finally, I find myself having to retype notes over and over, as I do experiments with one external parameter changes—it would be good if added notes were remembered from one export to the next, so that experimenter-added metadata could be edited easily, without needing to be retyped (or cut-and-pasted from an external file) each time.
  20. There is a bug in the export of data from the impedance analyzer from Waveforms (specifically from Waveforms 3.8.2 using the Analog Discovery 2, but I have seen it with earlier releases of Waveforms 3 also). The problem is that the frequencies are reported as if they were from a linear sweep, even though a logarithmic frequency sweep was done: #Date Time: 2018-07-01 16:50:47.258 #Trace: Trace #Start: 100 Hz #Stop: 1e+06 Hz #Steps: 101 #Resistor: 10000 Ω #Average: 10 #ProbeCapacitance: 1.04e+06 Ω #ProbeResistance: 4.3e-11 F #Compensation: Open Short #Wavegen: Wavegen1 #Amplification: 1 X #Settle: 20 ms #MinPeriods: 32 #Channel: Channel 1 #Range: 5.49577 V #Offset: -0.000318847 V #Attenuation: 1 X #Channel: Channel 2 #Range: 5.51181 V #Offset: -0.000280998 V #Attenuation: 1 X Frequency (Hz) Trace θ (°) Trace |Z| (Ω) Trace Ls (H) Trace Cs (F) 100 0.00067832392258167652 9971.9407134030535 0.00018789460945304077 -0.013481119008321029 10099 0.0018260127183053441 9972.4554790954317 0.00046132118972998595 -0.0045670615004842902 20098 0.0026165423173400044 9972.2098918719494 0.00060286028271848858 -0.0029068564833067186 Many of my students had problems with this bug last quarter, and we had to create a work-around in our gnuplot plotting scripts: #if the frequencies in your data file don't follow log increments use the code below # Written by Ali Fallahi #example: use plot 'data' u (correct($1)):3 instead of plot 'data' u 1:3 freq_u=1e6 #last frequency freq_l=10 #first frequency NoOfSamples=101 #number of samples indexno(f)=(NoOfSamples-1)*(f-freq_l)/(freq_u-freq_l) correct(f)=10**(log10(freq_l)+indexno(f)/(NoOfSamples-1)*log10(freq_u/freq_l)) ## plot 'measuring-10kohm-buggy-freq.txt' u (correct($1)):3 title '10k{/Symbol W}±0.1%' It would be nice not to need to correct the data files.
  21. How is records mode of waveforms acquiring many samples of continuous?
  22. Hi, I recently wrote a program that runs on the AD2 to close the loop on a system I am controlling. My problem now is that I will have a person unfamiliar with coding using this. I was wondering if there were options for creating a simple GUI to control inputs into my script. Like polling from a slidebar the frequency of a sine wave, I use in the script or test windows. I am particularly looking at the StaticIO but it seems to be limited to only the digital I/O pins. If it is not available thru Waveforms Beta will the SDK be able to do something like this? Are there any previous posts (i could not find any) or examples you might have on this? Thanks, Ryne
  23. Hi, I would like to see the logging have the option to log the (Scope Image) every time the logging saves a CSV file, ie (xxxx.csv), (xxxx.jpg). This should be quite simple to add this function to logging as Export Image already exists. This would be great to quickly view images of logged data to add into reports or select a CSV file for processing. The only way to save a scope image at present is to use, File> Export> Image> SAVE. Might this be implemented in the future? Thanks
  24. Hello, I'm a bit confused as to how the Waveforms manages its buffer. I'm using the Waveforms SDK (via LabVIEW) to both generate a pulse and act as a scope using the Analog Discovery Kit 2. I am generating a 50 ms, 5V pulse with a frequency of 230 kHz. This is connected to a hardware device. I then want to use the scope function to record the output form this device. I can get the scope to read, but I don't really understand why it works the way that it does. As it stands, the only way that I can consistently get a waveform is as follows (AnalogIn): AutoTimeout: 0.5 Sample Frequency: 160 kHz AcquisitionMode: Record RecordLength: 2 seconds I also have a 2.5 second wait on my analog out. If any of these settings change, my waveform will not show up. If perhaps I want a 200ms pulse, I need to change the sample frequency to 40 kHz. Attached is a screenshot of what the waveform looks like. There are two problems with this. The waveform is pushed far to the right. I want the waveform to take up the entire buffer. Second, if I'm sweeping frequencies, the waveform will show up at slightly different spots between frequencies. My ideal situation is that the ADK2 outputs a pulse, and when the pulse starts it immediately begins to record, filling the buffer after 50 ms. This buffer is emptied into an excel document, and then awaits use again. I've searched and read through the SDK reference manual but I can't seem to get a grasp on how to fix this. I feel like it's a lack of understanding of how the buffer is managed, but any help would be appreciated. Thanks EDIT: Follow-up/related question: How would these settings translate into SDK functions?
  25. Hello I am a user of Analog Discovery2 and I believe it is missing one very important (for me at leas) function. I basically want to monitor and register the communication between two devices which use UART to do so. The Protocol panel looks great but I am able to register only one of the devices at the same time. Logic panel is very unfeasible in my case because I want to register many lines of the communication (like 5 min). Is there any way I can achieve that? Maybe there is a custom script which would help in my case?