work on I/V curve tracing
authorDan White <dan@whiteaudio.com>
Sun, 7 Oct 2012 02:21:31 +0000 (21:21 -0500)
committerDan White <dan@whiteaudio.com>
Sun, 7 Oct 2012 02:21:31 +0000 (21:21 -0500)
python-lib/calibrate.py
python-lib/slope-test.py [new file with mode: 0644]
python-lib/usbio.py

index 48ea5f5f70ca7882d192c912761bbf03bb5d62c8..d8400611f14f9c339f7830ab3d91f6a18c55d9f3 100644 (file)
@@ -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 (file)
index 0000000..b369a73
--- /dev/null
@@ -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()
index 67c83ca2e5d71665cf3931e58c0818dc82f0d7f0..745f79d2a8a4e9aad469629713fb59f43576bd86 100644 (file)
@@ -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])