Commit fe853aa5 authored by Anders Blomdell's avatar Anders Blomdell
Browse files

Correct type error, update calibrator

parent 8c49bb10
...@@ -192,7 +192,7 @@ SIGNAL(TIMER1_COMPA_vect) ...@@ -192,7 +192,7 @@ SIGNAL(TIMER1_COMPA_vect)
PORT_SPI |= (1<<DD_SS); // Chip deselect PORT_SPI |= (1<<DD_SS); // Chip deselect
union { union {
int32_t i; uint32_t i;
unsigned char b[4]; unsigned char b[4];
} v; } v;
uint8_t chan; uint8_t chan;
...@@ -204,10 +204,10 @@ SIGNAL(TIMER1_COMPA_vect) ...@@ -204,10 +204,10 @@ SIGNAL(TIMER1_COMPA_vect)
adc.value[chan] = (v.i>>6); adc.value[chan] = (v.i>>6);
} }
static uint32_t conf_millivolt(uint32_t value) static uint32_t conf_millivolt(int32_t value)
{ {
if (value < 0) { if (value < 0) {
return CONF_NEGATIVE_MILLIVOLT(value); return CONF_NEGATIVE_MILLIVOLT(-value);
} else { } else {
return CONF_POSITIVE_MILLIVOLT(value); return CONF_POSITIVE_MILLIVOLT(value);
} }
...@@ -271,30 +271,31 @@ int main() ...@@ -271,30 +271,31 @@ int main()
cli(); // Global interrupt disable cli(); // Global interrupt disable
if (readchannels == 0) { if (readchannels == 0) {
// Process all old readchannels before updating
readchannels = serial_readchannels; readchannels = serial_readchannels;
serial_readchannels = 0; serial_readchannels = 0;
} }
local_adc = adc;
config = serial_readconfig; config = serial_readconfig;
serial_readconfig = 0; serial_readconfig = 0;
local_adc = adc;
sei(); // Global interrupt enable sei(); // Global interrupt enable
if (readchannels & 0x01) { if (readchannels & 0x01) {
serialio_putchannel(0, local_adc.value[0]); serialio_putchannel(0, local_adc.value[0] & 0x3ffff);
readchannels &= ~0x01; readchannels &= ~0x01;
} else if (readchannels & 0x02) { } else if (readchannels & 0x02) {
serialio_putchannel(1, local_adc.value[1]); serialio_putchannel(1, local_adc.value[1] & 0x3ffff);
readchannels &= ~0x02; readchannels &= ~0x02;
} else if (readchannels & 0x04) { } else if (readchannels & 0x04) {
serialio_putchannel(2, local_adc.value[2]); serialio_putchannel(2, local_adc.value[2] & 0x3ffff);
readchannels &= ~0x04; readchannels &= ~0x04;
} else if (readchannels & 0x08) { } else if (readchannels & 0x08) {
serialio_putchannel(3, local_adc.value[3]); serialio_putchannel(3, local_adc.value[3] & 0x3ffff);
readchannels &= ~0x08; readchannels &= ~0x08;
} }
if (i2c_idle()) { if (i2c_idle()) {
cli(); cli();
dac8574_set_chan(&dac8574.a, calibration.channel[0].offset); dac8574_set_chan(&dac8574.a, calibration.channel[0].offset);
dac8574_set_chan(&dac8574.b, calibration.channel[0].offset); dac8574_set_chan(&dac8574.b, calibration.channel[1].offset);
dac8574_set_chan(&dac8574.c, dac.value[0]); dac8574_set_chan(&dac8574.c, dac.value[0]);
dac8574_set_chan(&dac8574.d, dac.value[1]); dac8574_set_chan(&dac8574.d, dac.value[1]);
sei(); sei();
...@@ -316,8 +317,6 @@ int main() ...@@ -316,8 +317,6 @@ int main()
CONF_ANALOG_IN(3, CONF_MAX(CONF_POSITIVE_MILLIVOLT(10000))); CONF_ANALOG_IN(3, CONF_MAX(CONF_POSITIVE_MILLIVOLT(10000)));
CONF_ANALOG_OUT(0, CONF_RESOLUTION(16)); // Analog Out 0 CONF_ANALOG_OUT(0, CONF_RESOLUTION(16)); // Analog Out 0
//CONF_ANALOG_OUT(0, CONF_MIN(CONF_NEGATIVE_MILLIVOLT(10000)));
//CONF_ANALOG_OUT(0, CONF_MAX(CONF_POSITIVE_MILLIVOLT(10000)));
CONF_ANALOG_OUT(0, CONF_MIN(conf_millivolt(calibration.channel[0].min))); CONF_ANALOG_OUT(0, CONF_MIN(conf_millivolt(calibration.channel[0].min)));
CONF_ANALOG_OUT(0, CONF_MAX(conf_millivolt(calibration.channel[0].max))); CONF_ANALOG_OUT(0, CONF_MAX(conf_millivolt(calibration.channel[0].max)));
CONF_ANALOG_OUT(1, CONF_RESOLUTION(16)); // Analog Out 1 CONF_ANALOG_OUT(1, CONF_RESOLUTION(16)); // Analog Out 1
......
...@@ -119,6 +119,10 @@ class ChinaIO: ...@@ -119,6 +119,10 @@ class ChinaIO:
if c.bits != 18: if c.bits != 18:
raise Exception('analogIn[%d] is not 18 bit (%d)' % (i, c.bits)) raise Exception('analogIn[%d] is not 18 bit (%d)' % (i, c.bits))
pass pass
for i,c in analogOut.items():
if c.bits != 16:
raise Exception('analogOut[%d] is not 16 bit (%d)' % (i, c.bits))
pass
# Set offset calibration to default value # Set offset calibration to default value
# self.io.setchannel(31, (0x8000 << 8) | 0x00) # self.io.setchannel(31, (0x8000 << 8) | 0x00)
...@@ -133,7 +137,6 @@ class ChinaIO: ...@@ -133,7 +137,6 @@ class ChinaIO:
(-0.1, 0.1), (-0.1, 0.1) ], (-0.1, 0.1), (-0.1, 0.1) ],
N=500, N=500,
message='Ground all input pins'): message='Ground all input pins'):
break
pass pass
# Connect AOut0 -> AIn0,AIn2 (+9V) # Connect AOut0 -> AIn0,AIn2 (+9V)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment