Hi,
we use an ADS1158 to read 16 single ended inputs. VREF = 2,5V, VREFN, AINCOM, AVSS and thermal pad connected to GND. All inputs AIN0 to AIN16 are protected with an 4.7k series resistor. To read all 16 inputs we use Automatic-Scan mode. Unfortunately the values read are not correct. Instead of 100mV we read 125mV, 0mV reads as 32mV. As I digged into this issue I configured the ADS1158 into Fixed-Channel mode, using AIN0 to AIN14 as positive inputs and AIN15 as negative input connected to GND, In Fixed-Channel mode all readings are correct. It seams that in Automatic-Scan mode the ADS1158 sources a very small current on its inputs and this current generates the unwanted offset on the 4.7k resistor. Sensor biasing is disabled, I double checked this.
A log in Fixed Mode - expected values for channel 0 == 0mV, channel 1 == 100mV and channel 2 == 120mV
read_reg result reg=0x09 value=0x9b
read_reg result reg=0x00 value=0x02
write_reg set reg=0x07 value=0x00
write_reg set reg=0x00 value=0x22
write_reg set reg=0x01 value=0x70
write_reg set reg=0x03 value=0x00
write_reg set reg=0x04 value=0x00
write_reg set reg=0x05 value=0x00
write_reg set reg=0x06 value=0x00
new = 0 ovf = 0 supply = 0 chan = 29 value = 0x1e06 7686 mV = 0724.98
channel: 0 == A1
write_reg set reg=0x08 value=0x80
read_reg result reg=0x08 value=0x80
write_reg set reg=0x02 value=0x0f
start_convert
new = 1 ovf = 0 supply = 0 chan = 31 value = 0x0002 2 mV = 0000.19
start_convert
new = 1 ovf = 0 supply = 0 chan = 31 value = 0x0002 2 mV = 0000.19
channel: 1 == A2
write_reg set reg=0x08 value=0x01
read_reg result reg=0x08 value=0x01
write_reg set reg=0x02 value=0x1f
start_convert
new = 1 ovf = 0 supply = 0 chan = 31 value = 0x043b 1083 mV = 0102.15
start_convert
new = 1 ovf = 0 supply = 0 chan = 31 value = 0x043b 1083 mV = 0102.15
channel: 2 == A3
write_reg set reg=0x08 value=0x82
read_reg result reg=0x08 value=0x82
write_reg set reg=0x02 value=0x2f
start_convert
new = 1 ovf = 0 supply = 0 chan = 31 value = 0x051c 1308 mV = 0123.38
start_convert
new = 1 ovf = 0 supply = 0 chan = 31 value = 0x051c 1308 mV = 0123.38
register dump:
read_reg result reg=0x00 value=0x22
read_reg result reg=0x01 value=0x70
read_reg result reg=0x02 value=0x2f
read_reg result reg=0x03 value=0x00
read_reg result reg=0x04 value=0x00
read_reg result reg=0x05 value=0x00
read_reg result reg=0x06 value=0x00
read_reg result reg=0x07 value=0x00
read_reg result reg=0x08 value=0x82
read_reg result reg=0x09 value=0x9b
The read values are OK (within tolerance).
The same in Auto Scan mode:
read_reg result reg=0x09 value=0x9b
Using Autoscan Mode!
read_reg result reg=0x00 value=0x02
write_reg set reg=0x07 value=0x00
write_reg set reg=0x00 value=0x02
write_reg set reg=0x01 value=0x70
write_reg set reg=0x03 value=0x00
write_reg set reg=0x04 value=0x00
write_reg set reg=0x05 value=0x00
write_reg set reg=0x06 value=0x00
new = 0 ovf = 0 supply = 0 chan = 10 value = 0x06fa 1786 mV = 0145.35
channel: 0 == A1
write_reg set reg=0x08 value=0x80
read_reg result reg=0x08 value=0x80
write_reg set reg=0x04 value=0x01
write_reg set reg=0x05 value=0x00
write_reg set reg=0x06 value=0x00
start_convert
new = 1 ovf = 0 supply = 0 chan = 8 value = 0x0191 401 mV = 0032.63
start_convert
new = 1 ovf = 0 supply = 0 chan = 8 value = 0x0191 401 mV = 0032.63
channel: 1 == A2
write_reg set reg=0x08 value=0x01
read_reg result reg=0x08 value=0x01
write_reg set reg=0x04 value=0x02
write_reg set reg=0x05 value=0x00
write_reg set reg=0x06 value=0x00
start_convert
new = 1 ovf = 0 supply = 0 chan = 9 value = 0x060b 1547 mV = 0125.90
start_convert
new = 1 ovf = 0 supply = 0 chan = 9 value = 0x060b 1547 mV = 0125.90
channel: 2 == A3
write_reg set reg=0x08 value=0x82
read_reg result reg=0x08 value=0x82
write_reg set reg=0x04 value=0x04
write_reg set reg=0x05 value=0x00
write_reg set reg=0x06 value=0x00
start_convert
new = 1 ovf = 0 supply = 0 chan = 10 value = 0x06fa 1786 mV = 0145.35
start_convert
new = 1 ovf = 0 supply = 0 chan = 10 value = 0x06fa 1786 mV = 0145.35
register dump:
read_reg result reg=0x00 value=0x02
read_reg result reg=0x01 value=0x70
read_reg result reg=0x02 value=0x00
read_reg result reg=0x03 value=0x00
read_reg result reg=0x04 value=0x04
read_reg result reg=0x05 value=0x00
read_reg result reg=0x06 value=0x00
read_reg result reg=0x07 value=0x00
read_reg result reg=0x08 value=0x82
read_reg result reg=0x09 value=0x9b
---
Here we see a reading of 32.63mV for AIN0 - connected to GND via 4.7k and 125.9mV for AIN1 connected to an 100mV source via 4.7k and AIN2 with 145.35mV connected to an 120mV source via 4.7k. I double checked the setup, The logs includes the register dump, I can't find an error.
Hardware is identical, only configuration changed from Auto-Scan to Fixed Mode.
Question why I get the unwanted offset in Auto-Scan mode?
Thanks, in advance.
Walter