-
RE: Cannot get 2500 readings per second with Keithley 2700
You can try turning off the display: :DISPLAY:ENABLE:STAT OFF
I found an FAQ on tek.com for this topic. It is indicating that the TRACE buffer is not the fastest one.
Max Reading Rate from 2700, 2701 or 2750
Alternate commands:- *RST
- :SENSE:FUNC 'VOLT:DC'
- :SENSE:VOLT:NPLC 0.01
- :SENSE:VOLT:RANGE 10
- :SENSE:VOLT:AVER:STAT OFF
- :SAMPLE:COUNT 1000
- :TRIG:DELAY 0.0
- :SYSTEM:AZERO:STAT OFF
- :DISPLAY:ENABLE:STAT OFF
- :READ?
- Now read the data...
- To check for maximum speed apply a 1V RMS at 2Hz to the input. Run the above command sequence.
- The 1000 readings should show one complete cycle or less. This shows the meter is taking data at least at a rate of 2000 readings per second.
-
RE: Using Keithley 3706A with a python script
Here is some Python sample code for scanning some channels with model 3706A:- import pyvisa
- import time
- import matplotlib.pyplot as plt
- import pandas as pd
- def check_error():
- status = my3706A.read_stb()
- if int(status) & 4 == 4 : #test if the EAV (error available) bit is set
- error_response = my3706A.query("print(errorqueue.next())")
- print(error_response)
- else:
- print("No Errors")
- def get_scanState():
- my3706A.write("scanState, scanCount, stepCount, lastReading = scan.state()")
- return int(float(my3706A.query("print(tonumber(scanState))")))
- DEBUG = 0
- my3706A = pyvisa.ResourceManager().open_resource('TCPIP0::192.168.1.214::INSTR')
- #my3706A = pyvisa.ResourceManager().open_resource('USB0::0x05E6::0x3706::04428124::INSTR') # Connect to the keithley and set it to a variable named multimeter.
- my3706A.timeout = 10000 #number of msec to wait for VISA command completions
- #my3706A.write("")
- #put instrument into known state
- my3706A.write('reset()')
- my3706A.write('status.reset()')
- my3706A.write('errorqueue.clear()')
- #allocate a buffer for the measurements
- my3706A.write('buf=dmm.makebuffer(1000)')
- my3706A.write('buf.clear()')
- my3706A.write('buf.appendmode=1')
- my3706A.write('buf.collectchannels=1')
- if DEBUG: check_error()
- #configure the DMM settings
- my3706A.write("dmm.func= dmm.DC_VOLTS") # TWO_WIRE_OHMS DC_VOLTS
- my3706A.write("dmm.range=1")
- my3706A.write("dmm.autorange=1")
- my3706A.write("dmm.nplc= 1") #0.0005 to 15 for 60Hz power
- my3706A.write("dmm.autozero= dmm.ON")
- my3706A.write("dmm.autodelay= dmm.ON")
- if DEBUG: check_error()
- #associate these dmm settings with a configuration name
- # do not use a factory preset name, e.g., 'dcvolts'
- # custom settings = requires custom name
- my3706A.write('dmm.configure.set("my_dcvolts")')
- if DEBUG: check_error()
- #associate the dmm config with channels
- my3706A.write('dmm.setconfig("1001:1008", "my_dcvolts")')
- #define a scan
- my3706A.write('scan.measurecount=1') # one reading per scan
- my3706A.write("scan.create('1001:1008')")
- my3706A.write("scan.scancount = 10") # 10 scans
- # now that scan is setup, run the scan
- my3706A.write("buf.clear()") # just in case, clear the buffer of any content
- #my3706A.write("scan.execute(buf)") # this one does not return until scan completes
- my3706A.write("scan.background(buf)") # this one returns; Python needs to coordinate with done.
- # setup a while loop to exit when scan state goes to 6 = scan.SUCCESS = done
- script_running = True
- DEBUG_LOOP = 0
- while script_running:
- present_state = get_scanState()
- if DEBUG_LOOP: print("Scan State: " + str(present_state))
- if present_state == 6:
- script_running = False
- time.sleep(0.5) #delay before asking again
- #ask for the data
- my3706A.write("printbuffer(1, buf.n, buf.relativetimestamps, buf.readings)")
- raw_data = my3706A.read()
- # raw data will be comman delimited string:
- # time, ch1, time, ch2, time, ch3, time, ch4, time, ch5, time...
- # parse the data
- raw_data_array = raw_data.split(",")
- timestamps = []
- chan1001 = []
- chan1002 = []
- chan1003 = []
- chan1008 = []
- num_channels = 8
- num_elements = num_channels * 2 #time, ch1, time, ch2, time, ch3, time, ch4, time, ch5, time....
- for element in range(0, len(raw_data_array), num_elements):
- timestamps.append(float(raw_data_array[element]))
- chan1001.append(float(raw_data_array[element+1]))
- chan1002.append(float(raw_data_array[element+3]))
- chan1003.append(float(raw_data_array[element+5]))
- chan1008.append(float(raw_data_array[element+15]))
- #create dataframe
- data = {'Timestamp': timestamps, 'Channel 1': chan1001, 'Channel 2': chan1002, 'Channel 3': chan1003, 'Channel 8': chan1008}
- df = pd.DataFrame(data)
- # Set 'Timestamp' as the index
- df.set_index('Timestamp', inplace=True)
- # Print the DataFrame
- print(df)
- # ******************** Simple Graph ******************
- plt.figure()
- plt.subplot(3, 1, 1) # nrows=3, ncols=1, index=1
- plt.plot(timestamps, chan1001, 'o-b')
- plt.subplot(312)
- plt.plot(timestamps, chan1002, 'x-r')
- plt.subplot(313)
- plt.plot(timestamps, chan1003, '.-g')
- plt.show()
- my3706A.clear()
- my3706A.close()
-
RE: 2450 Cyclic Voltametry
The electrochemistry scripts for use with 2450, 2460 or 2461 are not open source.
The scripts can be obtained on model number EC-UPGRADE
EC-UPGRADE Kit Quick Start Guide -
RE: DAQ6510 OverflowHz/V Issue
-
RE: Questions about 3706
On each of the DB78 connectors on the 3720 card, there are the +ILK and -ILK pins.
Make sure to jumper these two pins together to enable the closure of the backplane relay.
NOTE: when using the 3720-ST wiring accessory, these jumpers are made for you. -
RE: Count number of time a relay on a scanner card switches
The IVI driver did not define a means to query that information from the card.
The IVI driver does however have WriteString and ReadString as part of the DirectIO interface.- //ask for closure counts from a channel list
- driver.System.DirectIO.WriteString("print(channel.getcount(\"1001,1911\"))");
- resultsListBox.Items.Add(driver.System.DirectIO.ReadString());
-
RE: Multiple 2602b SMU LabVIEW (GPIB)
Hello,
Please elaborate on the sweep until it finds a drop in current. Is the sweep implemented as a loop controlled from LabVIEW? And the LV code is where the evaluation about current drop occurs?
-
RE: AFG (as gate)+2602B SMU (as source and drain) measure the device I-t curve
In the KickStart, for SMU1 where you force 0V, the current limit is set to 1uA.
If you expect more Ids current than this, please increase.
You mention the AFG is driving the gate. AFG typically uses BNC. Is the outer shell of this connected to the common LO of the SMU channels?
I expect each SMU connects their HI to the Source or Drain. The LO of these two SMU are connected together for a common reference point.
You also need the LO of the Vgs from the AFG to share this common reference point. -
RE: 2636A: Basic TSP Commands Cause Runtime Errors
Are you sure it is an A version? There was an earlier version without any letter suffix (2636 vs 2636A vs. 2636B).
The original 2636 level would not recognize the smua.trigger..... like what you experience.
When you query the *IDN? command, what is the returned model number in the response? -
RE: How to make a DC current measurement with the Keithley 3706A & 3730 matrix card
On 3730, if able to read a voltage or ohms, you are probably closing backplane relay #1 to route a closed matrix crosspoint on row 1 to the internal voltage meter of 3706A.
Amps measure input terminals on a multimeter are different from terminals for the VDC or Ohms.
If you want to route a closed channel to the Amps meassure, make use of backplane relay 3 and do the measurments on that row.
But you need to get the Amp meter connected to backplane relay 3.
On the rear panel of 3706A is the DB15 connector which offers you connections to the DMM terminals and the backplane relays,
Jumper the Amps HI and LO to backplane relay HI and LO on the DB15.
Now when you close a matrix cross point and the backplane, the amp meter will be in series.
NOTE: when not routed through the amp meter, the circuit will be open and no current will flow.
If that is a problem, consider placing a current completion shorting jumper on backplane relay 4 and close your current carry channels on that row.
But keep in mind max current on the switch if multiple channels will be closed to this one jumper.