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 07:30] – [Boot Into Linux Mode] Á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 45: Line 45:
  
 ===== Connect Through a Terminal Emulator ===== ===== Connect Through a Terminal Emulator =====
 +<WRAP group>
 +<WRAP group><WRAP column half>
 +Find what serial port the Analog Discovery Pro is connected to and note it.
  
 +Open a terminal emulator such as PuTTY or TeraTerm and connect to the noted serial port using 115200 Baud, 8 data, 1 stop, and no parity bits.
 +</WRAP><WRAP column half>
 +{{ reference:test-and-measurement:analog-discovery-pro-3x50:terminal-settings.png?400 |}}
 +</WRAP></WRAP>
 +
 +<WRAP group><WRAP column half>
 +Login with username: "digilent" and password: "digilent".
 +</WRAP><WRAP column half>
 +{{ reference:test-and-measurement:analog-discovery-pro-3x50:linux-mode-login.png?400 |}}
 +</WRAP></WRAP>
 +</WRAP>
 +----
 +
 +===== Mount the Flash Drive =====
 +<WRAP group>
 +<WRAP group><WRAP column half>
 +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.
 +</WRAP><WRAP column half>
 +{{ reference:test-and-measurement:analog-discovery-pro-3x50:fdisk-output.png?400 |}}
 +</WRAP></WRAP>
 +
 +<WRAP group><WRAP column half>
 +Make the drive contents accessible by entering the command <code>sudo mount /dev/sda1 /mnt</code> and then <code>cd /mnt</code> to navigate into the USB's directory.
 +</WRAP><WRAP column half>
 +{{ reference:test-and-measurement:analog-discovery-pro-3x50:mount-usb.png?400 |}}
 +</WRAP></WRAP>
 +</WRAP>
 +----
 +
 +===== 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>