4xADS1115's (giving 16 Analog to Digital channels)

Here are some details of how I cobbled up a 16 channel ADC rig for use with MRL's Ads1115 service

As you can see above the i2c SDA/SLA lines require 10k resistors as pull up loads.

The trick to keeping it compact is to the stack and common through the GND,SDA,SCL,VCC pins (see below)

#Ads1115's have address pins which you can fix the i2c address of each module
#All you do is attach the ADDR pin of each module to either GND,VDD,SDA or SCL
#On power up the chip reads these pins and hardcodes each module to its associated
#i2c address, you can combine up to 4 modules giving 16 Analog inputs :-)

ads1115A.attach(arduino,"1","0x48") #Hardwired 0x48 (1001000) ADR -> GND
ads1115B.attach(arduino,"1","0x49") #Hardwired 0x49 (1001001) ADR -> VDD
ads1115C.attach(arduino,"1","0x4A") #Hardwired 0x4A (1001010) ADR -> SDA
ads1115D.attach(arduino,"1","0x4B") #Hardwired 0x4B (1001011) ADR -> SCL

I used a 4-pin socket header to transfer the address pins to the commoned through voltage/i2c bus.

This leaves a neat matrix pinout for connecting your 16 analogs .

There are also additional Alert lines which I dont think the MRL service uses. (correct me on this one), they could also be connected to input digitals .... as alert when read aquisition is valid.

Code below is an extrapolated version of the Ads1115 python example.

4xADS1115's Analog to Digital (16 channels)
#
# Example code for Four Ads1115 4-channel AD converters on the i2c bus .
#
port = "COM16"
#
ads1115A = Runtime.start("Ads1115A","Ads1115")
ads1115B = Runtime.start("Ads1115B","Ads1115")
ads1115C = Runtime.start("Ads1115C","Ads1115")
ads1115D = Runtime.start("Ads1115D","Ads1115")
# This section is to be used if you use the i2c pins of the Arduino
arduino = Runtime.start("arduino","Arduino")
arduino.connect(port)
# Sleep so that the Arduino can be initialized
sleep(4)

#Ads1115's have address pins which you can fix the i2c address of each module
#All you do is attach the ADDR pin of each module to either GND,VDD,SDA or SCL
#On power up the chip reads these pins and hardcodes each module to its associated
#i2c address, you can combine up to 4 modules giving 16 Analogue inputs :-)

ads1115A.attach(arduino,"1","0x48") #Hardwired 0x48 (1001000) ADR -> GND
ads1115B.attach(arduino,"1","0x49") #Hardwired 0x49 (1001001) ADR -> VDD
ads1115C.attach(arduino,"1","0x4A") #Hardwired 0x4A (1001010) ADR -> SDA
ads1115D.attach(arduino,"1","0x4B") #Hardwired 0x4B (1001011) ADR -> SCL

# This section is common and shows how you can get the raw adc values and the voltages
for i in range(0,50):
  ads1115A.refresh()
  ads1115B.refresh()
  ads1115C.refresh()
  ads1115D.refresh()
  print ""
  print "adcA", ads1115A.voltage0, ads1115A.voltage1, ads1115A.voltage2, ads1115A.voltage3
  print "adcB", ads1115B.voltage0, ads1115B.voltage1, ads1115B.voltage2, ads1115B.voltage3
  print "adcC", ads1115C.voltage0, ads1115C.voltage1, ads1115C.voltage2, ads1115C.voltage3
  print "adcD", ads1115D.voltage0, ads1115D.voltage1, ads1115D.voltage2, ads1115D.voltage3
  print ""
  sleep(1)
 

The original 4xADC1115 rig was used in my alliGaitor project a while back, mapping foot pressure with Piezo elements, TXing via bluetooth to Blender for mapping (real time).