Hi Matt,
Those are great observations.
For either approach, as your "resting state" can you have the SMU output (the blue light) on, but have it forcing 0V?
Then when ready for testing, command the digital IO and the source level to change to a new level.
If I measure the time required to turn the smua.source.output on and off wiht the source level set to 3V, I'm getting about 8 msec for that operation.
When output is off, the SMU is still actively sourcing and limiting according to the output off mode and settings.
When output is then turned on, the new settings have to be applied, and you are seeing some overhead associated with that.
In contrast, if the output is already on but at 0V, then changing the source level to a different level requires much less time.
Combining this info about the source output and my prior suggestion about using a function to reduce bus traffic, I'm seeing less then 40usec from the DIO changing state and the start of the SMU source level changing.
Some TSP code to illustrate the concept:
function config_smu(v_src, iLimit)
smua.source.func = smua.OUTPUT_DCVOLTS
smua.source.limiti = iLimit
smua.source.rangev = v_src
smua.source.levelv = 0 -- this is the resting bias level as soon as output is turned on
smua.measure.nplc = 1
smua.measure.delay = smua.DELAY_AUTO
smua.measure.delayfactor = 1.0
end -- function
function speed_test(dio_line, v_src)
-- to run the configured setup
digio.writebit(dio_line, 0) -- make digio low state
smua.source.levelv = v_src
digio.writebit(dio_line, 1)
end -- function
-- test our function
reset()
errorqueue.clear()
digio_line = 1
config_smu(2.5, 0.1) -- config for 2.5V and 100mA
smua.source.output = smua.OUTPUT_ON
for i = 1, 10 do
--speed_test(v_src)
speed_test(digio_line, 2.5)
delay(100e-6)
smua.source.levelv = 0
end
smua.source.output = smua.OUTPUT_OFF
A screen shot from the scope is attached.