From daf2d8a13ff9095baf64538a37b811a9edc4aa72 Mon Sep 17 00:00:00 2001 From: Dan White Date: Sat, 6 Oct 2012 21:21:31 -0500 Subject: [PATCH] work on I/V curve tracing --- python-lib/calibrate.py | 2 +- python-lib/slope-test.py | 33 +++++++++++++++++++++++++++++ python-lib/usbio.py | 45 ++++++++++++++++++++++++++-------------- 3 files changed, 64 insertions(+), 16 deletions(-) create mode 100644 python-lib/slope-test.py diff --git a/python-lib/calibrate.py b/python-lib/calibrate.py index 48ea5f5..d840061 100644 --- a/python-lib/calibrate.py +++ b/python-lib/calibrate.py @@ -153,7 +153,6 @@ def secant_opt(func, x0, limits, x1scale=0.1, maxiter=50, k=1.0): def offset2signed(v, bits): return (v - 2**(bits-1)) >> 2 - def mux_a_offset(x, c): xi = int(x[0]) mux.otaA.offset = xi @@ -370,4 +369,5 @@ while True: chaincal=chain_os, **stats ) + break diff --git a/python-lib/slope-test.py b/python-lib/slope-test.py new file mode 100644 index 0000000..b369a73 --- /dev/null +++ b/python-lib/slope-test.py @@ -0,0 +1,33 @@ + + +def z(): + c0.otaA.zero = 1 + chain.write() + c0.otaA.zero = 0 + chain.write() + + +def vdiff(d): + dac.vina(vcm - d) + dac.vinb(vcm + d) + + + +vcm = 1.6 + +dac.vcmi(vcm) +dac.vina(vcm) +dac.vinb(vcm) + +itime = 0.400 +htime = 0.020 +z() +for vd in arange(-0.08, 0.08001, 0.020): + print vd + vdiff(vd) + z() + sleep(itime) + vdiff(0) + sleep(htime) + +z() diff --git a/python-lib/usbio.py b/python-lib/usbio.py index 67c83ca..745f79d 100644 --- a/python-lib/usbio.py +++ b/python-lib/usbio.py @@ -3,7 +3,7 @@ from time import sleep -import ftdi +import ftdi1 as ftdi import mpsse import struct from math import log @@ -1716,20 +1716,35 @@ class DAC_atoi(DAC8568): code = max(0, code) self.set(channel, code, mode) - def vina(self, v, mode=DAC8568.INPUT_UPDATE_SINGLE): - self.setv(0, v, mode) - - def vinb(self, v, mode=DAC8568.INPUT_UPDATE_SINGLE): - self.setv(2, v, mode) - - def vcmi(self, v, mode=DAC8568.INPUT_UPDATE_SINGLE): - self.setv(4, v, mode) - - def vbias_core(self, v, mode=DAC8568.INPUT_UPDATE_SINGLE): - self.setv(1, v, mode) - - def vbias_buf(self, v, mode=DAC8568.INPUT_UPDATE_SINGLE): - self.setv(3, v, mode) + def vina(self, v=None, mode=DAC8568.INPUT_UPDATE_SINGLE): + """Set to given voltage, returns the current value.""" + if v is not None: + self.setv(0, v, mode) + return self._pos2v(self._chpos[0]) + + def vinb(self, v=None, mode=DAC8568.INPUT_UPDATE_SINGLE): + """Set to given voltage, returns the current value.""" + if v is not None: + self.setv(2, v, mode) + return self._pos2v(self._chpos[2]) + + def vcmi(self, v=None, mode=DAC8568.INPUT_UPDATE_SINGLE): + """Set to given voltage, returns the current value.""" + if v is not None: + self.setv(4, v, mode) + return self._pos2v(self._chpos[4]) + + def vbias_core(self, v=None, mode=DAC8568.INPUT_UPDATE_SINGLE): + """Set to given voltage, returns the current value.""" + if v is not None: + self.setv(1, v, mode) + return self._pos2v(self._chpos[1]) + + def vbias_buf(self, v=None, mode=DAC8568.INPUT_UPDATE_SINGLE): + """Set to given voltage, returns the current value.""" + if v is not None: + self.setv(3, v, mode) + return self._pos2v(self._chpos[3]) -- 2.25.1