-def z():
- c0.otaA.zero = 1
- chain.write()
- c0.otaA.zero = 0
- chain.write()
+if 1:
+
+ def z():
+ c0.otaA.zero = 1
+ chain.write()
+ c0.otaA.zero = 0
+ chain.write()
+
+ def vdiff(d):
+ dac.vina(vos - d - vdos)
+ dac.vinb(vos + d + vdos)
-def vdiff(d):
- dac.vina(vos - d - vdos)
- dac.vinb(vos + d + vdos)
+ c0 = chain.h[0]
-c0 = chain.h[0]
+ mux.selA = 0
+ mux.selB = 0
+ mux.otaA.mode = mux.otaA.MUX_BUF
+ mux.otaA.fast = 1
+ mux.write()
-mux.selA = 0
-mux.selB = 0
-mux.otaA.mode = mux.otaA.MUX_BUF
-mux.otaA.fast = 1
-mux.write()
+ dac.vbias_core(0.05)
+ dac.vbias_buf(0.05)
+
+ c0.otaA.fast = 1
+ c0.otaA.gain = 0
+ c0.otaA.se = 1
+ c0.otaB.se = 1
+ c0.otaA.cint = 1
+ c0.otaA.offset = 0
+ chain.write()
-dac.vbias_core(0.05)
-dac.vbias_buf(0.05)
-c0.otaA.fast = 1
-c0.otaA.gain = 0
-c0.otaA.se = 1
-c0.otaB.se = 1
-c0.otaA.cint = 1
-c0.otaA.offset = 0
-chain.write()
+ vcm = 1.25
+ vos = vcm + 0.000
+ vdos = -0.02
+ dac.vcmi(vcm)
+ dac.vina(vos)
+ dac.vinb(vos)
-vcm = 1.25
-vos = vcm + 0.000
-vdos = -0.02
+ adc.triggerMode(adc.MODE_IDLE)
+ adc.mux(4)
+ adc.channelMode(4, adc.SE) #even channel only
+ adc.channelGain(4, 1)
+ adc.channelGain(5, 1)
+ adc.triggerMode(adc.MODE_MANUAL_MANUAL)
-dac.vcmi(vcm)
-dac.vina(vos)
-dac.vinb(vos)
+ vi = []
+ vo = []
+
+ itime = 0.100
+ htime = 0.000
+ z()
+ for vd in arange(-0.08, 0.08001, 0.010):
+ print vd
+ vdiff(vd)
+ z()
+ adc.read()
+ for i in xrange(1000):
+ vi.append(vd)
+ vo.append(adc.read())
+ #sleep(itime)
+ vdiff(0)
+ sleep(htime)
-itime = 0.150
-htime = 0.050
-z()
-for vd in arange(-0.08, 0.08001, 0.010):
- print vd
- vdiff(vd)
z()
- sleep(itime)
- vdiff(0)
- sleep(htime)
-z()
+
+vi = array(vi)
+vo = array(vo)
+
+
+d = {}
+for vd in sorted(set(vi)):
+ s = '%6.3f' % vd
+ idx = find(vi == vd)
+ d[s] = vo[idx]
+
+
+vdi = []
+gm = []
+for vd in sorted(set(vi)):
+ s = '%6.3f' % vd
+ dds = diff(d[s])
+
+ #clf()
+ #plot(dds)
+ #ylim((-100, 100))
+
+ md = mean(dds[10:200])
+ idx = find(dds < (2 * md))
+ dds = dds[idx]
+ md = mean(dds)
+ vdi.append(vd)
+ gm.append(md)
+
+
+vdi = array(vdi)
+gm = array(gm)
+
+
+if 0:
+ close('all')
+ figure(figsize=(5.0, 4.0))
+
+ plot(-1e3*vdi, gm, '+')
+
+ xlim((-80, 80))
+ ylim((-80, 40))
+
+ ylabel('dVout / dt (arb.)')
+ xlabel('Vdi (mV)')
+ title('Differential gm')
+
+ savefig('dvdt-vs-vd.pdf')
+
+
+if 1:
+ interactive(False)
+ close('all')
+ figure(figsize=(5.0, 4.0))
+
+ x = array(range(len(vo)))
+ plot(x/1e3, vo/1e3)
+ #plot(-1e3*vdi, gm, '+')
+
+ #xlim((-80, 80))
+ #ylim((-80, 40))
+
+ ylabel('ADC k-counts')
+ xlabel('k-samples')
+ title('Raw Vout vs. Vdi $\pm80 mV$')
+
+ savefig('vo-raw-vd.pdf')