GitHunt
TA

A method to utilize C code on a Raspberry Pi to read analog inputs from an ADS1115 board.

WARNING
Use of this code or anything here is given without warranty for
any purpose. USE AT YOUR OWN RISK.

Update 6/21/2020: added adsget.c and modded Makefile to adapt.

06/21/2020: run "make clean simple" to produce ads_get.
ads_get takes numbers on command line for address, ai line, and gain.
Will produce one read of ai line. This is prep for use in PHP and
other programs.

example: ads_get 1 2 2
(where 1 = address 0x48,
2 = ain2, and
2 = voltage range 4.096 (for 5V and 3.3V))

Short cut:
If you fork this repo to your own Raspberry Pi, you should
be able to run "make clean default" in order to produce
the current version of ads_read.

Run this with "sudo ./ads_read" on Linux and you ought to get a
stream from STD_IN on your terminal with the voltage of your
chosen AI line (configured in the program) on the ADS1115.

Long story:
A C based package (more or less) to read analog values from
an ADS1115 A/D board.

I give original credit to Lewis Loflin at bristolwatch.com
as he was the one that deciphered the cut sheet for the
ADS1115 register instructions.

I have altered the original C code to function-ize the
basic register calling and turn it into a returned decimal value (0-32767).

I also put the function into its own file so that one can
write code using the function without having to keep track
of the function itself.

The function definition is given below:

int16_t ads_read( int address, int ain, int gain );

The function depends upon a header file where I define
the needed binary sorted numbers that make up the
configuration register.

The ADS1115 can be set up easily to be one of four I2C bus
addresses.

The variable 'address' is set to be one of the following for
predefined values:
HEX48
HEX49
HEX4A
HEX4B

The function makes use of a bit setting for either 1-shot
read and shutdown operation or continuous read. Loewis didn't
go into continuous read much and the 1-shot setting works well,
so I've set it permanently in the function.

There are four analog inputs on the ADS1115 board. The following
predefined values tell which one to read from.
AI0
AI1
AI2
AI3

There is also a gain setting for the AI and the following
predefined settings set that on a read cycle. GAIN2 works
for most 3.3V and 5V inputs.

GAIN1 through GAIN8

Making a program that makes it easier to read and display (or return)
a value and the ability of addressing multiple boards,
means that one could have an I2C enabled device that could
easily read up to 16 0-3.3VDC or 0-5VDC sensors.

Things to do:

  1. Currently working on a main program that reads function
    values from the command line and returns the value (in progress, see adsget.c).
  2. Plan to write program such that it can be used with PHP
    to display an analog input value in a web page.
  3. Not a programming task, but experiment with a way to
    use opto-isolators in the SDA/SCL lines so that the ADS1115
    can be used at 5VDC but still operate on the Raspberry PI 3.3VDC
    enabled I2C bus.
  4. Currently, working on porting this project over to C++,
    C# (.NET), and possibly Go. There will be future folders
    appearing when these begin to be finalized.

Languages

C97.6%Makefile2.4%

Contributors

GNU General Public License v3.0
Created June 21, 2020
Updated September 17, 2024
tardisgallifrey/ads1115 | GitHunt