In this example we connect an ADS1115 analog-to-digital converters to a Beaglebone. The code example will be in C
Lets look at the ADS1115.
The ADS1115 is a precision, low-power, 16-bit, I2C-compatible, analog-to-digital converters (ADCs) offered in an ultra-small, leadless, X2QFN-10 package, and a VSSOP-10 package. The ADS1115 incorporates a low-drift voltage reference and an oscillator.
The ADS1115 also incorporate a programmable gain amplifier (PGA) and a digital comparator. These features, along with a wide operating supply range, make the ADS1115 well suited for power- and space-constrained, sensor measurement applications.
The ADS1115 performs conversions at data rates up to 860 samples per second (SPS). The PGA offers input ranges from ±256 mV to ±6.144 V, allowing precise large- and small-signal measurements. The ADS1115 features an input multiplexer (MUX) that allows two differential or four single-ended input measurements. Use the digital comparator in the ADS1115 for under- and overvoltage detection.
The ADS1115 operates in either continuous-conversion mode or single-shot mode. The devices are automatically powered down after one conversion in single-shot mode; therefore, power consumption is significantly reduced during idle periods.
Connection
In this example I had connected the sensor to the Beaglebone I2C2 SCL and SDA pins

Parts List
Code
Save the following as ADS1115.c
#include <stdio.h>
#include <stdlib.h>
#include <linux/i2c-dev.h>
#include <sys/ioctl.h>
#include <fcntl.h>
void main()
{
// Create I2C bus
int file;
char *bus = "/dev/i2c-2";
if ((file = open(bus, O_RDWR)) < 0)
{
printf("Failed to open the bus. \n");
exit(1);
}
// Get I2C device, ADS1115 I2C address is 0x48(72)
ioctl(file, I2C_SLAVE, 0x48);
// Select configuration register(0x01)
// AINP = AIN0 and AINN = AIN1, +/- 2.048V
// Continuous conversion mode, 128 SPS(0x84, 0x83)
char config[3] = {0};
config[0] = 0x01;
config[1] = 0x84;
config[2] = 0x83;
write(file, config, 3);
sleep(1);
// Read 2 bytes of data from register(0x00)
// raw_adc msb, raw_adc lsb
char reg[1] = {0x00};
write(file, reg, 1);
char data[2]={0};
if(read(file, data, 2) != 2)
{
printf("Error : Input/Output Error \n");
}
else
{
// Convert the data
int raw_adc = (data[0] * 256 + data[1]);
if (raw_adc > 32767)
{
raw_adc -= 65535;
}
// Output data to screen
printf("Digital Value of Analog Input: %d \n", raw_adc);
}
}
Output
Run the above example by opening a terminal and typing in
Compile the c program.
$>gcc ADS1115.c -o ADS1115
Run the c program.
$>./ADS1115
