From 52cad619d42dad6fb748e3a75c2a00a2ebcb2a03 Mon Sep 17 00:00:00 2001 From: Dan White Date: Wed, 18 Apr 2012 14:38:05 -0500 Subject: [PATCH] ADC testing --- python-lib/mpsse-test.py | 52 +++++++++++++++++----------- python-lib/usbio.py | 75 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 106 insertions(+), 21 deletions(-) diff --git a/python-lib/mpsse-test.py b/python-lib/mpsse-test.py index 0e33bf9..7b61bb7 100644 --- a/python-lib/mpsse-test.py +++ b/python-lib/mpsse-test.py @@ -8,6 +8,7 @@ from myhdl import bin as b import mpsse import usbio +from usbio import int2str @@ -79,12 +80,6 @@ class AtoiI2C(mpsse.MPSSE): -def int2str(value, width): - if (width % 8) != 0: - raise Exception, 'width must be multiple of 8' - v = intbv(value, max=2**width) - b = [v[i:i-8] for i in range(width, 0, -8)] - return ''.join(map(chr, b)) @@ -102,7 +97,7 @@ def w(v): spi.Write(v) spi.Stop() -spi = AtoiSPI0(1e4) +spi = AtoiSPI0(100e3) spi.SetLoopback(0) @@ -115,20 +110,37 @@ v430 = usbio.AD524x(i2c, 3) +# +# DAC testing +# +if 1: + #turn on internal reference always + spi.SetCS('dac') -#turn on internal reference always -spi.SetCS('dac') + int_ref_always_on = intbv(0)[32:] + int_ref_always_on[27] = 1 + int_ref_always_on[24] = 1 + int_ref_always_on[19] = 1 + int_ref_always_on[13] = 1 + w(int2str(int_ref_always_on, 32)) -int_ref_always_on = intbv(0)[32:] -int_ref_always_on[27] = 1 -int_ref_always_on[24] = 1 -int_ref_always_on[19] = 1 -int_ref_always_on[13] = 1 -w(int2str(int_ref_always_on, 32)) + all_dacs_on = intbv(0)[32:] + all_dacs_on[26] = 1 + all_dacs_on[8:] = 0xff + w(int2str(all_dacs_on, 32)) -all_dacs_on = intbv(0)[32:] -all_dacs_on[26] = 1 -all_dacs_on[8:] = 0xff -w(int2str(all_dacs_on, 32)) + w(dacval(2**15)) + + + +# +# ADC testing +# +if 0: + adc = usbio.ADS8201(spi) + adc.setRegister(adc.TRIGGER_SCR, 0x02) + adc.getRegister(adc.TRIGGER_SCR) + + adc.setRegister(adc.CHAN_SEL, 6) + adc.getRegister(adc.CHAN_SEL) -w(dacval(2**15)) diff --git a/python-lib/usbio.py b/python-lib/usbio.py index 235d297..0c4b17f 100644 --- a/python-lib/usbio.py +++ b/python-lib/usbio.py @@ -4,6 +4,7 @@ from array import array import struct from myhdl import intbv +from myhdl import bin as b @@ -50,6 +51,14 @@ def truth(v): return False +def int2str(value, width): + if (width % 8) != 0: + raise Exception, 'width must be multiple of 8' + v = intbv(value, max=2**width) + b = [v[i:i-8] for i in range(width, 0, -8)] + return ''.join(map(chr, b)) + + class NCO(object): RST_POS = 14 FCW_WIDTH = 14 @@ -523,7 +532,9 @@ class DAC8568(object): self.cs = 'dac' self._word = intbv(0)[self.CTL_WIDTH:] - @property + def __str__(self): + return ''.join(map(chr, self.bytes())) + def bytes(self): """Return the control data as a byte sequence in MSB..LSB order.""" w = self.word @@ -532,8 +543,70 @@ class DAC8568(object): def send(self): self.bus.SetCS('dac') + self.bus.Start() + self.bus.Write(str(self)) + self.bus.Stop() + + + +class ADS8201(object): + CH01_CCR = 0 + CH23_CCR = 1 + CH45_CCR = 2 + CH67_CCR = 3 + CHAN_SEL = 4 + ADC_SCR = 5 + INT_SCR = 6 + STATUS_SCR = 7 + TRIGGER_SCR = 8 + RESET_SCR = 9 + DELAY_SCR = 10 + + def __init__(self, spibus): + self.bus = spibus + + def setRegister(self, address, value): + w = intbv(0x8000)[16:] + w[14:10] = intbv(address, max=2**4) + w[8:] = intbv(value, max=2**8) + print b(w, 16) + self.bus.SetCS('adc') + self.bus.Start() + self.bus.Write(int2str(w, 16)) + self.bus.Stop() + + def getRegister(self, address): + w = intbv(0x4000)[16:] + w[14:10] = intbv(address, max=2**4) + print b(w, 16) + self.bus.SetCS('adc') + self.bus.Start() + rval = self.bus.Exchange(int2str(w, 16)) + self.bus.Stop() + i = 0 + r = 0 + for c in rval: + r += ord(c) << i + i += 8 + return r + + def read(self): + w = intbv(0x0000)[16:] + self.bus.SetCS('adc') + self.bus.Start() + rval = self.bus.Exchange(int2str(w, 16)) + self.bus.Stop() + i = 0 + r = 0 + for c in rval: + r += ord(c) << i + i += 8 + return r + + + class I2C(object): def write(self, data): """Send i2c command data to slave.""" -- 2.25.1