diff --git a/99-usbtmc.rules b/99-usbtmc.rules new file mode 100644 index 0000000..b3ba074 --- /dev/null +++ b/99-usbtmc.rules @@ -0,0 +1,8 @@ +# Rule for Keithley 2611B + +# take vendor and product id from lsusb +SUBSYSTEMS=="usb", ACTION=="add", ATTRS{idVendor}=="05e6", ATTRS{idProduct}=="2614", GROUP="usbtmc", MODE="0660" RUN+="/bin/touch /tmp/05e6-2611-connected" + +# Devices +KERNEL=="usbtmc/*", MODE="0660", GROUP="usbtmc" +KERNEL=="usbtmc[0-9]*", MODE="0660", GROUP="usbtmc" diff --git a/m_teng/backends/keithley/keithley.py b/m_teng/backends/keithley/keithley.py index 84e6831..bc846f8 100644 --- a/m_teng/backends/keithley/keithley.py +++ b/m_teng/backends/keithley/keithley.py @@ -30,6 +30,8 @@ def init(beep_success=True): if beep_success: keithley.write("beeper.beep(0.5, 1000)") return keithley +def beep(instr, length=0.5, pitch=1000): + instr.write(f"beeper.beep({length}, {pitch})") def exit(instr): instr.close() diff --git a/m_teng/backends/keithley/measure.py b/m_teng/backends/keithley/measure.py index 37d0e22..41133ec 100644 --- a/m_teng/backends/keithley/measure.py +++ b/m_teng/backends/keithley/measure.py @@ -3,7 +3,7 @@ import numpy as np from matplotlib import pyplot as plt import pyvisa -from m_teng.backends.keithley import reset +from m_teng.backends.keithley.keithley import reset from m_teng.utility import testing as _testing def measure_count(instr, count=100, interval=0.05, update_func=None, update_interval=0.5, beep_done=True, verbose=True): diff --git a/m_teng/keithley_scripts/smua_reset.lua b/m_teng/keithley_scripts/smua_reset.lua index 2938651..66a46ac 100644 --- a/m_teng/keithley_scripts/smua_reset.lua +++ b/m_teng/keithley_scripts/smua_reset.lua @@ -2,6 +2,7 @@ smua.reset() smua.measure.autorangev = smua.AUTORANGE_ON smua.measure.autorangei = smua.AUTORANGE_ON +-- smua.measure.autozero = smua.AUTOZERO_AUTO smua.measure.autozero = smua.AUTOZERO_AUTO -- smua.measure.autozero = smua.AUTOZERO_ONCE -- set output to 0A DC diff --git a/m_teng/m_teng_interactive.py b/m_teng/m_teng_interactive.py index aa40b3d..ec58305 100644 --- a/m_teng/m_teng_interactive.py +++ b/m_teng/m_teng_interactive.py @@ -232,7 +232,7 @@ def repeat(measure_func: callable, count: int, repeat_delay=0): sleep(repeat_delay) except KeyboardInterrupt: pass - if settings["beep"]: _backend.beep() + if settings["beep"]: _backend.beep(dev) def get_dataframe(): diff --git a/readme.md b/readme.md index e5755ec..da2fd7b 100644 --- a/readme.md +++ b/readme.md @@ -1,5 +1,5 @@ # m-TENG -Helper scripts and shell for measuring **T**ribo**e**lectric **N**ano**g**enerator-based sensor output with a Keithley 2611B SMU or an Arduino +Helper scripts and shell for measuring **T**ribo**e**lectric **N**ano**g**enerator-based sensor output with a Keithley 2600B SMU or an Arduino ## Features @@ -17,9 +17,10 @@ Helper scripts and shell for measuring **T**ribo**e**lectric **N**ano**g**enerat - Run lua script on Keithley SMU - Auto-filenames + ## Available backends ### keithley - Use a Keithley 2611B Source-Measure-Unit via *pyvisa*. This backend allows measuring both voltage and current simultaneously. + Use a Keithley 2600B Source-Measure-Unit via *pyvisa*. This backend allows measuring both voltage and current simultaneously. *Tested with 2611B and 2614B* ### arduino Use a Bluetooth capable Arduino with [https://git.quintern.xyz/MatthiasQuintern/teng-arduino](this software on the arduino). @@ -37,3 +38,10 @@ ipython -i k_teng_interactive.py -- -*X* Substitute *X* for `-k` for keithley backend, `-a` for arduino backend or `-t` for testing backend. In the shell, run `help()` to get a list of available commands + + +## Installation +### Keithley +On linux: +Install the udev rule in `/etc/udev/rules.d/` and run `sudo udevadm control --reload` to force the usbtmc driver to be used with the Keithley SMU. +The `ATTRS{product_id} ` needs to match the id shown by `lsusb`.