Adafruit ADS1X15 ADC Driver Library
Adafruit_ADS1X15.h
Go to the documentation of this file.
1 /**************************************************************************/
15 /**************************************************************************/
16 #ifndef __ADS1X15_H__
17 #define __ADS1X15_H__
18 
19 #include <Adafruit_I2CDevice.h>
20 #include <Arduino.h>
21 #include <Wire.h>
22 
23 /*=========================================================================
24  I2C ADDRESS/BITS
25  -----------------------------------------------------------------------*/
26 #define ADS1X15_ADDRESS (0x48)
27 /*=========================================================================*/
28 
29 /*=========================================================================
30  POINTER REGISTER
31  -----------------------------------------------------------------------*/
32 #define ADS1X15_REG_POINTER_MASK (0x03)
33 #define ADS1X15_REG_POINTER_CONVERT (0x00)
34 #define ADS1X15_REG_POINTER_CONFIG (0x01)
35 #define ADS1X15_REG_POINTER_LOWTHRESH (0x02)
36 #define ADS1X15_REG_POINTER_HITHRESH (0x03)
37 /*=========================================================================*/
38 
39 /*=========================================================================
40  CONFIG REGISTER
41  -----------------------------------------------------------------------*/
42 #define ADS1X15_REG_CONFIG_OS_MASK (0x8000)
43 #define ADS1X15_REG_CONFIG_OS_SINGLE \
44  (0x8000)
45 #define ADS1X15_REG_CONFIG_OS_BUSY \
46  (0x0000)
47 #define ADS1X15_REG_CONFIG_OS_NOTBUSY \
48  (0x8000)
49 
50 #define ADS1X15_REG_CONFIG_MUX_MASK (0x7000)
51 #define ADS1X15_REG_CONFIG_MUX_DIFF_0_1 \
52  (0x0000)
53 #define ADS1X15_REG_CONFIG_MUX_DIFF_0_3 \
54  (0x1000)
55 #define ADS1X15_REG_CONFIG_MUX_DIFF_1_3 \
56  (0x2000)
57 #define ADS1X15_REG_CONFIG_MUX_DIFF_2_3 \
58  (0x3000)
59 #define ADS1X15_REG_CONFIG_MUX_SINGLE_0 (0x4000)
60 #define ADS1X15_REG_CONFIG_MUX_SINGLE_1 (0x5000)
61 #define ADS1X15_REG_CONFIG_MUX_SINGLE_2 (0x6000)
62 #define ADS1X15_REG_CONFIG_MUX_SINGLE_3 (0x7000)
63 
64 constexpr uint16_t MUX_BY_CHANNEL[] = {
69 };
70 
71 #define ADS1X15_REG_CONFIG_PGA_MASK (0x0E00)
72 #define ADS1X15_REG_CONFIG_PGA_6_144V (0x0000)
73 #define ADS1X15_REG_CONFIG_PGA_4_096V (0x0200)
74 #define ADS1X15_REG_CONFIG_PGA_2_048V \
75  (0x0400)
76 #define ADS1X15_REG_CONFIG_PGA_1_024V (0x0600)
77 #define ADS1X15_REG_CONFIG_PGA_0_512V (0x0800)
78 #define ADS1X15_REG_CONFIG_PGA_0_256V (0x0A00)
79 
80 #define ADS1X15_REG_CONFIG_MODE_MASK (0x0100)
81 #define ADS1X15_REG_CONFIG_MODE_CONTIN (0x0000)
82 #define ADS1X15_REG_CONFIG_MODE_SINGLE \
83  (0x0100)
84 
85 #define ADS1X15_REG_CONFIG_RATE_MASK (0x00E0)
86 
87 #define ADS1X15_REG_CONFIG_CMODE_MASK (0x0010)
88 #define ADS1X15_REG_CONFIG_CMODE_TRAD \
89  (0x0000)
90 #define ADS1X15_REG_CONFIG_CMODE_WINDOW (0x0010)
91 
92 #define ADS1X15_REG_CONFIG_CPOL_MASK (0x0008)
93 #define ADS1X15_REG_CONFIG_CPOL_ACTVLOW \
94  (0x0000)
95 #define ADS1X15_REG_CONFIG_CPOL_ACTVHI \
96  (0x0008)
97 
98 #define ADS1X15_REG_CONFIG_CLAT_MASK \
99  (0x0004)
100 #define ADS1X15_REG_CONFIG_CLAT_NONLAT \
101  (0x0000)
102 #define ADS1X15_REG_CONFIG_CLAT_LATCH (0x0004)
103 
104 #define ADS1X15_REG_CONFIG_CQUE_MASK (0x0003)
105 #define ADS1X15_REG_CONFIG_CQUE_1CONV \
106  (0x0000)
107 #define ADS1X15_REG_CONFIG_CQUE_2CONV \
108  (0x0001)
109 #define ADS1X15_REG_CONFIG_CQUE_4CONV \
110  (0x0002)
111 #define ADS1X15_REG_CONFIG_CQUE_NONE \
112  (0x0003)
113 /*=========================================================================*/
114 
116 typedef enum {
117  GAIN_TWOTHIRDS = ADS1X15_REG_CONFIG_PGA_6_144V,
120  GAIN_FOUR = ADS1X15_REG_CONFIG_PGA_1_024V,
121  GAIN_EIGHT = ADS1X15_REG_CONFIG_PGA_0_512V,
122  GAIN_SIXTEEN = ADS1X15_REG_CONFIG_PGA_0_256V
123 } adsGain_t;
124 
126 #define RATE_ADS1015_128SPS (0x0000)
127 #define RATE_ADS1015_250SPS (0x0020)
128 #define RATE_ADS1015_490SPS (0x0040)
129 #define RATE_ADS1015_920SPS (0x0060)
130 #define RATE_ADS1015_1600SPS (0x0080)
131 #define RATE_ADS1015_2400SPS (0x00A0)
132 #define RATE_ADS1015_3300SPS (0x00C0)
133 
134 #define RATE_ADS1115_8SPS (0x0000)
135 #define RATE_ADS1115_16SPS (0x0020)
136 #define RATE_ADS1115_32SPS (0x0040)
137 #define RATE_ADS1115_64SPS (0x0060)
138 #define RATE_ADS1115_128SPS (0x0080)
139 #define RATE_ADS1115_250SPS (0x00A0)
140 #define RATE_ADS1115_475SPS (0x00C0)
141 #define RATE_ADS1115_860SPS (0x00E0)
142 
143 /**************************************************************************/
147 /**************************************************************************/
149 protected:
150  // Instance-specific properties
151  Adafruit_I2CDevice *m_i2c_dev;
152  uint8_t m_bitShift;
154  uint16_t m_dataRate;
155 
156 public:
157  bool begin(uint8_t i2c_addr = ADS1X15_ADDRESS, TwoWire *wire = &Wire);
158  int16_t readADC_SingleEnded(uint8_t channel);
159  int16_t readADC_Differential_0_1();
160  int16_t readADC_Differential_0_3();
161  int16_t readADC_Differential_1_3();
162  int16_t readADC_Differential_2_3();
163  void startComparator_SingleEnded(uint8_t channel, int16_t threshold);
164  int16_t getLastConversionResults();
165  float computeVolts(int16_t counts);
166  void setGain(adsGain_t gain);
167  adsGain_t getGain();
168  void setDataRate(uint16_t rate);
169  uint16_t getDataRate();
170 
171  void startADCReading(uint16_t mux, bool continuous);
172 
173  bool conversionComplete();
174 
175 private:
176  void writeRegister(uint8_t reg, uint16_t value);
177  uint16_t readRegister(uint8_t reg);
178  uint8_t buffer[3];
179 };
180 
181 /**************************************************************************/
185 /**************************************************************************/
187 public:
189 };
190 
191 /**************************************************************************/
195 /**************************************************************************/
197 public:
199 };
200 
201 #endif
bool begin(uint8_t i2c_addr=ADS1X15_ADDRESS, TwoWire *wire=&Wire)
Sets up the HW (reads coefficients values, etc.)
Definition: Adafruit_ADS1X15.cpp:65
void startADCReading(uint16_t mux, bool continuous)
Non-blocking start conversion function.
Definition: Adafruit_ADS1X15.cpp:328
Sensor driver for the Adafruit ADS1X15 ADC breakouts.
Definition: Adafruit_ADS1X15.h:148
adsGain_t m_gain
ADC gain.
Definition: Adafruit_ADS1X15.h:153
#define ADS1X15_REG_CONFIG_PGA_6_144V
+/-6.144V range = Gain 2/3
Definition: Adafruit_ADS1X15.h:72
int16_t getLastConversionResults()
In order to clear the comparator, we need to read the conversion results. This function reads the las...
Definition: Adafruit_ADS1X15.cpp:261
#define ADS1X15_REG_CONFIG_PGA_4_096V
+/-4.096V range = Gain 1
Definition: Adafruit_ADS1X15.h:73
#define ADS1X15_REG_CONFIG_MUX_SINGLE_2
Single-ended AIN2.
Definition: Adafruit_ADS1X15.h:61
#define ADS1X15_REG_CONFIG_MUX_SINGLE_1
Single-ended AIN1.
Definition: Adafruit_ADS1X15.h:60
void setGain(adsGain_t gain)
Sets the gain and input voltage range.
Definition: Adafruit_ADS1X15.cpp:77
bool conversionComplete()
Returns true if conversion is complete, false otherwise.
Definition: Adafruit_ADS1X15.cpp:370
#define ADS1X15_REG_CONFIG_PGA_0_512V
+/-0.512V range = Gain 8
Definition: Adafruit_ADS1X15.h:77
#define ADS1X15_ADDRESS
1001 000 (ADDR = GND)
Definition: Adafruit_ADS1X15.h:26
int16_t readADC_Differential_0_1()
Reads the conversion results, measuring the voltage difference between the P (AIN0) and N (AIN1) inpu...
Definition: Adafruit_ADS1X15.cpp:140
adsGain_t getGain()
Gets a gain and input voltage range.
Definition: Adafruit_ADS1X15.cpp:86
int16_t readADC_SingleEnded(uint8_t channel)
Gets a single-ended ADC reading from the specified channel.
Definition: Adafruit_ADS1X15.cpp:115
Adafruit_I2CDevice * m_i2c_dev
I2C bus device.
Definition: Adafruit_ADS1X15.h:151
#define ADS1X15_REG_CONFIG_PGA_2_048V
+/-2.048V range = Gain 2 (default)
Definition: Adafruit_ADS1X15.h:74
uint16_t m_dataRate
Data rate.
Definition: Adafruit_ADS1X15.h:154
#define ADS1X15_REG_CONFIG_MUX_SINGLE_3
Single-ended AIN3.
Definition: Adafruit_ADS1X15.h:62
int16_t readADC_Differential_0_3()
Reads the conversion results, measuring the voltage difference between the P (AIN0) and N (AIN3) inpu...
Definition: Adafruit_ADS1X15.cpp:160
uint16_t getDataRate()
Gets the current data rate.
Definition: Adafruit_ADS1X15.cpp:104
constexpr uint16_t MUX_BY_CHANNEL[]
MUX config by channel.
Definition: Adafruit_ADS1X15.h:64
#define ADS1X15_REG_CONFIG_PGA_0_256V
+/-0.256V range = Gain 16
Definition: Adafruit_ADS1X15.h:78
float computeVolts(int16_t counts)
Compute volts for the given raw counts.
Definition: Adafruit_ADS1X15.cpp:286
void setDataRate(uint16_t rate)
Sets the data rate.
Definition: Adafruit_ADS1X15.cpp:95
int16_t readADC_Differential_1_3()
Reads the conversion results, measuring the voltage difference between the P (AIN1) and N (AIN3) inpu...
Definition: Adafruit_ADS1X15.cpp:180
uint8_t m_bitShift
bit shift amount
Definition: Adafruit_ADS1X15.h:152
#define ADS1X15_REG_CONFIG_MUX_SINGLE_0
Single-ended AIN0.
Definition: Adafruit_ADS1X15.h:59
adsGain_t
Definition: Adafruit_ADS1X15.h:116
Sensor driver for the Adafruit ADS1015 ADC breakout.
Definition: Adafruit_ADS1X15.h:186
Sensor driver for the Adafruit ADS1115 ADC breakout.
Definition: Adafruit_ADS1X15.h:196
void startComparator_SingleEnded(uint8_t channel, int16_t threshold)
Sets up the comparator to operate in basic mode, causing the ALERT/RDY pin to assert (go from high to...
Definition: Adafruit_ADS1X15.cpp:224
#define ADS1X15_REG_CONFIG_PGA_1_024V
+/-1.024V range = Gain 4
Definition: Adafruit_ADS1X15.h:76
int16_t readADC_Differential_2_3()
Reads the conversion results, measuring the voltage difference between the P (AIN2) and N (AIN3) inpu...
Definition: Adafruit_ADS1X15.cpp:201