Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
test-and-measurement:analog-discovery-pro-3x50:logging-data-to-usb [2021/07/16 08:46] – [Enable Automounting] Álmos Veres-Vitályostest-and-measurement:analog-discovery-pro-3x50:logging-data-to-usb [2022/10/04 11:38] (current) – external edit 127.0.0.1
Line 65: Line 65:
 <WRAP group> <WRAP group>
 <WRAP group><WRAP column half> <WRAP group><WRAP column half>
-Download [[this]] package and extract the contents onto the USB drive.+Download {{ :test-and-measurement:analog-discovery-pro-3x50:logger.zip |this}} package and extract the contents onto the USB drive.
  
 Plug the USB into the back of the Analog Discovery Pro. In the terminal, type <code>sudo fdisk -l</code> to find the USB device path. It should look like ///dev/sd<drive letter><partition number>//. This guide will use /dev/sda1 in its text and images, and care must be taken to match the drive letter and partition number of your USB drive. Plug the USB into the back of the Analog Discovery Pro. In the terminal, type <code>sudo fdisk -l</code> to find the USB device path. It should look like ///dev/sd<drive letter><partition number>//. This guide will use /dev/sda1 in its text and images, and care must be taken to match the drive letter and partition number of your USB drive.
Line 81: Line 81:
  
 ===== Script Overview ===== ===== Script Overview =====
 +<WRAP group>
 +<WRAP group><WRAP half column>
 +Import the necessary Python packages, then define the name of the output file and the drive letter and number of the USB drive.
 +</WRAP><WRAP half column>
 +<code python># import modules
 +from ctypes import *
 +from dwfconstants import *
 +from subprocess import call
 +import sys
  
 +# parameters
 +filename = "voltages.txt"
 +drive = "sda1"</code>
 +</WRAP></WRAP>
 +
 +<WRAP group><WRAP half column>
 +Load the WaveForms SDK dynamic library, then open the device.
 +</WRAP><WRAP half column>
 +<code python># load WaveForms SDK
 +if sys.platform.startswith("win"):
 +    dwf = cdll.dwf  # on windows
 +elif sys.platform.startswith("darwin"):
 +    dwf = cdll.LoadLibrary("/Library/Frameworks/dwf.framework/dwf")
 +else:
 +    dwf = cdll.LoadLibrary("libdwf.so")
 +
 +# global variables
 +hdwf = c_int()  # device handle
 +
 +# open device
 +dwf.FDwfDeviceOpen(c_int(-1), byref(hdwf))  # open first device
 +# check for errors
 +if hdwf.value == hdwfNone.value:
 +    print("failed to open device")  # display error
 +    quit()</code>
 +</WRAP></WRAP>
 +
 +<WRAP group><WRAP half column>
 +Initialize the Oscilloscope. If you want to use a different instrument, change this part at your will.
 +
 +Mount the USB storage. If the file system is already mounted, this command will only return a message. Set the path and the name of your file.
 +</WRAP><WRAP half column>
 +<code python>try:
 +    # initialize the oscilloscope
 +    # enable the channel
 +    dwf.FDwfAnalogInChannelEnableSet(hdwf, c_int(0), c_bool(True))
 +    # set 0V offset
 +    dwf.FDwfAnalogInChannelOffsetSet(hdwf, c_int(0), c_double(0))
 +    # set the range from -5V to +5V
 +    dwf.FDwfAnalogInChannelRangeSet(hdwf, c_int(0), c_double(5))
 +    # start the oscilloscope
 +    dwf.FDwfAnalogInConfigure(hdwf, c_bool(False), c_bool(False))
 +
 +    # mount the USB strorage
 +    call(["sudo", "mount", "/dev/" + drive, "/mnt"])
 +
 +    # set file path
 +    filename = "/mnt/" + filename</code>
 +</WRAP></WRAP>
 +
 +<WRAP group><WRAP half column>
 +Load and save the oscilloscope data in a buffer, then write out the content of the buffer to the file. The file remains opened, until the script runs.
 +</WRAP><WRAP half column>
 +<code python>    # create/open the file
 +    with open(filename, "w") as f:
 +        while True:
 +            # measure voltage
 +            # load internal buffer
 +            dwf.FDwfAnalogInStatus(hdwf, False, None)
 +            voltage = c_double()    # buffer for raw values
 +            # save the internal buffer
 +            dwf.FDwfAnalogInStatusSample(hdwf, c_int(0), byref(voltage))
 +            voltage = float(voltage.value)   # get voltage values
 +
 +            # save voltage
 +            f.write("{}\n".format(voltage))</code>
 +</WRAP></WRAP>
 +
 +<WRAP group><WRAP half column>
 +Finally, exit the script on "Ctrl+C", then reset the used instruments and disconnect from the device.
 +</WRAP><WRAP half column>
 +<code python>except KeyboardInterrupt:
 +    # exit on Ctrl+C
 +    pass
 +finally:
 +    # reset and close the device
 +    dwf.FDwfAnalogInReset(hdwf)  # reset the oscilloscope
 +    dwf.FDwfDeviceClose(hdwf)   # disconnect the device</code>
 +</WRAP></WRAP>
 +</WRAP>
 +----
 +
 +===== Testing =====
 +<WRAP group>
 +Start the script with the following command:
 +<code>sudo python3 /mnt/logger.py</code>
 +To terminate the script and to close the file, press "Ctrl+C" on the keyboard. When the script is exited, the file is saved on your USB flash drive.
 +</WRAP>
 +----
 +
 +===== Next Steps =====
 +<WRAP group>
 +The script can be modified as needed for your project.
 +
 +For more information on WaveForms SDK, see its [[software:waveforms:waveforms-sdk:start|Resource Center]].
 +
 +For technical support, please visit the [[https://forum.digilentinc.com/forum/8-test-and-measurement/|Test and Measurement]] section of the Digilent Forums.
 +</WRAP>