A library for ADS1015 and ADS1115 from Texas Instruments.

Fork of ADS1015 by Arve Seljebu

v1.3 - Added ADS1115_REG_CONFIG_DR & m_dataRate Jul 21. 2014 - Corrected m_conversionDelay - Now there is readADC() that returns counts and readADC_V() that returns voltage

Committer:
Sambo007
Date:
Wed May 21 13:12:24 2014 +0000
Revision:
1:a628fdaed351
Parent:
0:8174d9ceeca1
v1.2   - Fixed error in readADC_SingleEnded() sign bit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
arve0 0:8174d9ceeca1 1 /**************************************************************************/
arve0 0:8174d9ceeca1 2 /*!
arve0 0:8174d9ceeca1 3 @file Adafruit_ADS1015.cpp
arve0 0:8174d9ceeca1 4 @author K.Townsend (Adafruit Industries)
arve0 0:8174d9ceeca1 5 @license BSD (see LICENSE.txt)
arve0 0:8174d9ceeca1 6
arve0 0:8174d9ceeca1 7 Ported to mbed by Arve Seljebu - arve0.github.io
arve0 0:8174d9ceeca1 8
arve0 0:8174d9ceeca1 9 Driver for the ADS1015/ADS1115 ADC
arve0 0:8174d9ceeca1 10
arve0 0:8174d9ceeca1 11 This is a library for the Adafruit MPL115A2 breakout
arve0 0:8174d9ceeca1 12 ----> https://www.adafruit.com/products/1083
arve0 0:8174d9ceeca1 13
arve0 0:8174d9ceeca1 14 Adafruit invests time and resources providing this open source code,
arve0 0:8174d9ceeca1 15 please support Adafruit and open-source hardware by purchasing
arve0 0:8174d9ceeca1 16 products from Adafruit!
arve0 0:8174d9ceeca1 17
arve0 0:8174d9ceeca1 18 @section HISTORY
arve0 0:8174d9ceeca1 19
Sambo007 1:a628fdaed351 20 v1.0 - First release
Sambo007 1:a628fdaed351 21 v1.1 - Added ADS1115 support - W. Earl
Sambo007 1:a628fdaed351 22 v1.1.1 - Ported to mbed - Arve Seljebu
Sambo007 1:a628fdaed351 23 v1.2 - Fixed error in readADC_SingleEnded() sign bit - Sam Berjawi
arve0 0:8174d9ceeca1 24 */
arve0 0:8174d9ceeca1 25 /**************************************************************************/
arve0 0:8174d9ceeca1 26
arve0 0:8174d9ceeca1 27 #include <mbed.h>
arve0 0:8174d9ceeca1 28 #include "Adafruit_ADS1015.h"
arve0 0:8174d9ceeca1 29
arve0 0:8174d9ceeca1 30 /**************************************************************************/
arve0 0:8174d9ceeca1 31 /*!
arve0 0:8174d9ceeca1 32 @brief Writes 16-bits to the specified destination register
arve0 0:8174d9ceeca1 33 */
arve0 0:8174d9ceeca1 34 /**************************************************************************/
arve0 0:8174d9ceeca1 35 void Adafruit_ADS1015::writeRegister(uint8_t i2cAddress, uint8_t reg, uint16_t value) {
arve0 0:8174d9ceeca1 36 char cmd[3];
arve0 0:8174d9ceeca1 37 cmd[0] = (char)reg;
arve0 0:8174d9ceeca1 38 cmd[1] = (char)(value>>8);
arve0 0:8174d9ceeca1 39 cmd[2] = (char)(value & 0xFF);
arve0 0:8174d9ceeca1 40 m_i2c->write(i2cAddress, cmd, 3);
arve0 0:8174d9ceeca1 41 }
arve0 0:8174d9ceeca1 42
arve0 0:8174d9ceeca1 43 /**************************************************************************/
arve0 0:8174d9ceeca1 44 /*!
arve0 0:8174d9ceeca1 45 @brief Reads 16-bits from the specified register
arve0 0:8174d9ceeca1 46 */
arve0 0:8174d9ceeca1 47 /**************************************************************************/
arve0 0:8174d9ceeca1 48 uint16_t Adafruit_ADS1015::readRegister(uint8_t i2cAddress, uint8_t reg) {
arve0 0:8174d9ceeca1 49 char data[2];
arve0 0:8174d9ceeca1 50 data[0] = reg; // temporary use this to send address to conversion register
arve0 0:8174d9ceeca1 51 m_i2c->write(i2cAddress, data, 1);
arve0 0:8174d9ceeca1 52 m_i2c->read(i2cAddress, data, 2);
arve0 0:8174d9ceeca1 53 return (data[0] << 8 | data [1]);
arve0 0:8174d9ceeca1 54 }
arve0 0:8174d9ceeca1 55
arve0 0:8174d9ceeca1 56 /**************************************************************************/
arve0 0:8174d9ceeca1 57 /*!
arve0 0:8174d9ceeca1 58 @brief Instantiates a new ADS1015 class w/appropriate properties
arve0 0:8174d9ceeca1 59 */
arve0 0:8174d9ceeca1 60 /**************************************************************************/
arve0 0:8174d9ceeca1 61 Adafruit_ADS1015::Adafruit_ADS1015(I2C* i2c, uint8_t i2cAddress)
arve0 0:8174d9ceeca1 62 {
arve0 0:8174d9ceeca1 63 // shift 7 bit address 1 left: read expects 8 bit address, see I2C.h
arve0 0:8174d9ceeca1 64 m_i2cAddress = i2cAddress << 1;
arve0 0:8174d9ceeca1 65 m_conversionDelay = ADS1015_CONVERSIONDELAY;
arve0 0:8174d9ceeca1 66 m_bitShift = 4;
arve0 0:8174d9ceeca1 67 m_gain = GAIN_TWOTHIRDS; /* +/- 6.144V range (limited to VDD +0.3V max!) */
arve0 0:8174d9ceeca1 68 m_i2c = i2c;
arve0 0:8174d9ceeca1 69 }
arve0 0:8174d9ceeca1 70
arve0 0:8174d9ceeca1 71 /**************************************************************************/
arve0 0:8174d9ceeca1 72 /*!
arve0 0:8174d9ceeca1 73 @brief Instantiates a new ADS1115 class w/appropriate properties
arve0 0:8174d9ceeca1 74 */
arve0 0:8174d9ceeca1 75 /**************************************************************************/
arve0 0:8174d9ceeca1 76 Adafruit_ADS1115::Adafruit_ADS1115(I2C* i2c, uint8_t i2cAddress)
arve0 0:8174d9ceeca1 77 {
arve0 0:8174d9ceeca1 78 // shift 7 bit address 1 left: read expects 8 bit address, see mbed's I2C.h
arve0 0:8174d9ceeca1 79 m_i2cAddress = i2cAddress << 1;
arve0 0:8174d9ceeca1 80 m_conversionDelay = ADS1115_CONVERSIONDELAY;
arve0 0:8174d9ceeca1 81 m_bitShift = 0;
arve0 0:8174d9ceeca1 82 m_gain = GAIN_TWOTHIRDS; /* +/- 6.144V range (limited to VDD +0.3V max!) */
arve0 0:8174d9ceeca1 83 m_i2c = i2c;
arve0 0:8174d9ceeca1 84 }
arve0 0:8174d9ceeca1 85
arve0 0:8174d9ceeca1 86 /**************************************************************************/
arve0 0:8174d9ceeca1 87 /*!
arve0 0:8174d9ceeca1 88 @brief Sets the gain and input voltage range
arve0 0:8174d9ceeca1 89 */
arve0 0:8174d9ceeca1 90 /**************************************************************************/
arve0 0:8174d9ceeca1 91 void Adafruit_ADS1015::setGain(adsGain_t gain)
arve0 0:8174d9ceeca1 92 {
arve0 0:8174d9ceeca1 93 m_gain = gain;
arve0 0:8174d9ceeca1 94 }
arve0 0:8174d9ceeca1 95
arve0 0:8174d9ceeca1 96 /**************************************************************************/
arve0 0:8174d9ceeca1 97 /*!
arve0 0:8174d9ceeca1 98 @brief Gets a gain and input voltage range
arve0 0:8174d9ceeca1 99 */
arve0 0:8174d9ceeca1 100 /**************************************************************************/
arve0 0:8174d9ceeca1 101 adsGain_t Adafruit_ADS1015::getGain()
arve0 0:8174d9ceeca1 102 {
arve0 0:8174d9ceeca1 103 return m_gain;
arve0 0:8174d9ceeca1 104 }
arve0 0:8174d9ceeca1 105
arve0 0:8174d9ceeca1 106 /**************************************************************************/
arve0 0:8174d9ceeca1 107 /*!
arve0 0:8174d9ceeca1 108 @brief Gets a single-ended ADC reading from the specified channel
arve0 0:8174d9ceeca1 109 */
arve0 0:8174d9ceeca1 110 /**************************************************************************/
Sambo007 1:a628fdaed351 111 //uint16_t Adafruit_ADS1015::readADC_SingleEnded(uint8_t channel) { SWB
Sambo007 1:a628fdaed351 112 int16_t Adafruit_ADS1015::readADC_SingleEnded(uint8_t channel) {
arve0 0:8174d9ceeca1 113 if (channel > 3)
arve0 0:8174d9ceeca1 114 {
arve0 0:8174d9ceeca1 115 return 0;
arve0 0:8174d9ceeca1 116 }
arve0 0:8174d9ceeca1 117
arve0 0:8174d9ceeca1 118 // Start with default values
arve0 0:8174d9ceeca1 119 uint16_t config = ADS1015_REG_CONFIG_CQUE_NONE | // Disable the comparator (default val)
arve0 0:8174d9ceeca1 120 ADS1015_REG_CONFIG_CLAT_NONLAT | // Non-latching (default val)
arve0 0:8174d9ceeca1 121 ADS1015_REG_CONFIG_CPOL_ACTVLOW | // Alert/Rdy active low (default val)
arve0 0:8174d9ceeca1 122 ADS1015_REG_CONFIG_CMODE_TRAD | // Traditional comparator (default val)
arve0 0:8174d9ceeca1 123 ADS1015_REG_CONFIG_DR_1600SPS | // 1600 samples per second (default)
arve0 0:8174d9ceeca1 124 ADS1015_REG_CONFIG_MODE_SINGLE; // Single-shot mode (default)
arve0 0:8174d9ceeca1 125
arve0 0:8174d9ceeca1 126 // Set PGA/voltage range
arve0 0:8174d9ceeca1 127 config |= m_gain;
arve0 0:8174d9ceeca1 128
arve0 0:8174d9ceeca1 129 // Set single-ended input channel
arve0 0:8174d9ceeca1 130 switch (channel)
arve0 0:8174d9ceeca1 131 {
arve0 0:8174d9ceeca1 132 case (0):
arve0 0:8174d9ceeca1 133 config |= ADS1015_REG_CONFIG_MUX_SINGLE_0;
arve0 0:8174d9ceeca1 134 break;
arve0 0:8174d9ceeca1 135 case (1):
arve0 0:8174d9ceeca1 136 config |= ADS1015_REG_CONFIG_MUX_SINGLE_1;
arve0 0:8174d9ceeca1 137 break;
arve0 0:8174d9ceeca1 138 case (2):
arve0 0:8174d9ceeca1 139 config |= ADS1015_REG_CONFIG_MUX_SINGLE_2;
arve0 0:8174d9ceeca1 140 break;
arve0 0:8174d9ceeca1 141 case (3):
arve0 0:8174d9ceeca1 142 config |= ADS1015_REG_CONFIG_MUX_SINGLE_3;
arve0 0:8174d9ceeca1 143 break;
arve0 0:8174d9ceeca1 144 }
arve0 0:8174d9ceeca1 145
arve0 0:8174d9ceeca1 146 // Set 'start single-conversion' bit
arve0 0:8174d9ceeca1 147 config |= ADS1015_REG_CONFIG_OS_SINGLE;
arve0 0:8174d9ceeca1 148
arve0 0:8174d9ceeca1 149 // Write config register to the ADC
arve0 0:8174d9ceeca1 150 writeRegister(m_i2cAddress, ADS1015_REG_POINTER_CONFIG, config);
arve0 0:8174d9ceeca1 151
arve0 0:8174d9ceeca1 152 // Wait for the conversion to complete
arve0 0:8174d9ceeca1 153 wait_ms(m_conversionDelay);
arve0 0:8174d9ceeca1 154
arve0 0:8174d9ceeca1 155 // Read the conversion results
arve0 0:8174d9ceeca1 156 // Shift 12-bit results right 4 bits for the ADS1015
Sambo007 1:a628fdaed351 157 //return readRegister(m_i2cAddress, ADS1015_REG_POINTER_CONVERT) >> m_bitShift; SWB
Sambo007 1:a628fdaed351 158
Sambo007 1:a628fdaed351 159 // SWB
Sambo007 1:a628fdaed351 160 // Shift 12-bit results right 4 bits for the ADS1015
Sambo007 1:a628fdaed351 161 uint16_t res = readRegister(m_i2cAddress, ADS1015_REG_POINTER_CONVERT) >> m_bitShift;
Sambo007 1:a628fdaed351 162
Sambo007 1:a628fdaed351 163 if (m_bitShift == 0)
Sambo007 1:a628fdaed351 164 {
Sambo007 1:a628fdaed351 165 return (int16_t)res;
Sambo007 1:a628fdaed351 166 }
Sambo007 1:a628fdaed351 167 else
Sambo007 1:a628fdaed351 168 {
Sambo007 1:a628fdaed351 169 // Shift 12-bit results right 4 bits for the ADS1015,
Sambo007 1:a628fdaed351 170 // making sure we keep the sign bit intact
Sambo007 1:a628fdaed351 171 if (res > 0x07FF)
Sambo007 1:a628fdaed351 172 {
Sambo007 1:a628fdaed351 173 // negative number - extend the sign to 16th bit
Sambo007 1:a628fdaed351 174 res |= 0xF000;
Sambo007 1:a628fdaed351 175 }
Sambo007 1:a628fdaed351 176 return (int16_t)res;
Sambo007 1:a628fdaed351 177 }
arve0 0:8174d9ceeca1 178 }
arve0 0:8174d9ceeca1 179
arve0 0:8174d9ceeca1 180 /**************************************************************************/
arve0 0:8174d9ceeca1 181 /*!
arve0 0:8174d9ceeca1 182 @brief Reads the conversion results, measuring the voltage
arve0 0:8174d9ceeca1 183 difference between the P (AIN0) and N (AIN1) input. Generates
arve0 0:8174d9ceeca1 184 a signed value since the difference can be either
arve0 0:8174d9ceeca1 185 positive or negative.
arve0 0:8174d9ceeca1 186 */
arve0 0:8174d9ceeca1 187 /**************************************************************************/
arve0 0:8174d9ceeca1 188 int16_t Adafruit_ADS1015::readADC_Differential_0_1() {
arve0 0:8174d9ceeca1 189 // Start with default values
arve0 0:8174d9ceeca1 190 uint16_t config = ADS1015_REG_CONFIG_CQUE_NONE | // Disable the comparator (default val)
arve0 0:8174d9ceeca1 191 ADS1015_REG_CONFIG_CLAT_NONLAT | // Non-latching (default val)
arve0 0:8174d9ceeca1 192 ADS1015_REG_CONFIG_CPOL_ACTVLOW | // Alert/Rdy active low (default val)
arve0 0:8174d9ceeca1 193 ADS1015_REG_CONFIG_CMODE_TRAD | // Traditional comparator (default val)
arve0 0:8174d9ceeca1 194 ADS1015_REG_CONFIG_DR_1600SPS | // 1600 samples per second (default)
arve0 0:8174d9ceeca1 195 ADS1015_REG_CONFIG_MODE_SINGLE; // Single-shot mode (default)
arve0 0:8174d9ceeca1 196
arve0 0:8174d9ceeca1 197 // Set PGA/voltage range
arve0 0:8174d9ceeca1 198 config |= m_gain;
arve0 0:8174d9ceeca1 199
arve0 0:8174d9ceeca1 200 // Set channels
arve0 0:8174d9ceeca1 201 config |= ADS1015_REG_CONFIG_MUX_DIFF_0_1; // AIN0 = P, AIN1 = N
arve0 0:8174d9ceeca1 202
arve0 0:8174d9ceeca1 203 // Set 'start single-conversion' bit
arve0 0:8174d9ceeca1 204 config |= ADS1015_REG_CONFIG_OS_SINGLE;
arve0 0:8174d9ceeca1 205
arve0 0:8174d9ceeca1 206 // Write config register to the ADC
arve0 0:8174d9ceeca1 207 writeRegister(m_i2cAddress, ADS1015_REG_POINTER_CONFIG, config);
arve0 0:8174d9ceeca1 208
arve0 0:8174d9ceeca1 209 // Wait for the conversion to complete
arve0 0:8174d9ceeca1 210 wait_ms(m_conversionDelay);
arve0 0:8174d9ceeca1 211
arve0 0:8174d9ceeca1 212 // Read the conversion results
arve0 0:8174d9ceeca1 213 uint16_t res = readRegister(m_i2cAddress, ADS1015_REG_POINTER_CONVERT) >> m_bitShift;
arve0 0:8174d9ceeca1 214 if (m_bitShift == 0)
arve0 0:8174d9ceeca1 215 {
arve0 0:8174d9ceeca1 216 return (int16_t)res;
arve0 0:8174d9ceeca1 217 }
arve0 0:8174d9ceeca1 218 else
arve0 0:8174d9ceeca1 219 {
arve0 0:8174d9ceeca1 220 // Shift 12-bit results right 4 bits for the ADS1015,
arve0 0:8174d9ceeca1 221 // making sure we keep the sign bit intact
arve0 0:8174d9ceeca1 222 if (res > 0x07FF)
arve0 0:8174d9ceeca1 223 {
arve0 0:8174d9ceeca1 224 // negative number - extend the sign to 16th bit
arve0 0:8174d9ceeca1 225 res |= 0xF000;
arve0 0:8174d9ceeca1 226 }
arve0 0:8174d9ceeca1 227 return (int16_t)res;
arve0 0:8174d9ceeca1 228 }
arve0 0:8174d9ceeca1 229 }
arve0 0:8174d9ceeca1 230
arve0 0:8174d9ceeca1 231 /**************************************************************************/
arve0 0:8174d9ceeca1 232 /*!
arve0 0:8174d9ceeca1 233 @brief Reads the conversion results, measuring the voltage
arve0 0:8174d9ceeca1 234 difference between the P (AIN2) and N (AIN3) input. Generates
arve0 0:8174d9ceeca1 235 a signed value since the difference can be either
arve0 0:8174d9ceeca1 236 positive or negative.
arve0 0:8174d9ceeca1 237 */
arve0 0:8174d9ceeca1 238 /**************************************************************************/
arve0 0:8174d9ceeca1 239 int16_t Adafruit_ADS1015::readADC_Differential_2_3() {
arve0 0:8174d9ceeca1 240 // Start with default values
arve0 0:8174d9ceeca1 241 uint16_t config = ADS1015_REG_CONFIG_CQUE_NONE | // Disable the comparator (default val)
arve0 0:8174d9ceeca1 242 ADS1015_REG_CONFIG_CLAT_NONLAT | // Non-latching (default val)
arve0 0:8174d9ceeca1 243 ADS1015_REG_CONFIG_CPOL_ACTVLOW | // Alert/Rdy active low (default val)
arve0 0:8174d9ceeca1 244 ADS1015_REG_CONFIG_CMODE_TRAD | // Traditional comparator (default val)
arve0 0:8174d9ceeca1 245 ADS1015_REG_CONFIG_DR_1600SPS | // 1600 samples per second (default)
arve0 0:8174d9ceeca1 246 ADS1015_REG_CONFIG_MODE_SINGLE; // Single-shot mode (default)
arve0 0:8174d9ceeca1 247
arve0 0:8174d9ceeca1 248 // Set PGA/voltage range
arve0 0:8174d9ceeca1 249 config |= m_gain;
arve0 0:8174d9ceeca1 250
arve0 0:8174d9ceeca1 251 // Set channels
arve0 0:8174d9ceeca1 252 config |= ADS1015_REG_CONFIG_MUX_DIFF_2_3; // AIN2 = P, AIN3 = N
arve0 0:8174d9ceeca1 253
arve0 0:8174d9ceeca1 254 // Set 'start single-conversion' bit
arve0 0:8174d9ceeca1 255 config |= ADS1015_REG_CONFIG_OS_SINGLE;
arve0 0:8174d9ceeca1 256
arve0 0:8174d9ceeca1 257 // Write config register to the ADC
arve0 0:8174d9ceeca1 258 writeRegister(m_i2cAddress, ADS1015_REG_POINTER_CONFIG, config);
arve0 0:8174d9ceeca1 259
arve0 0:8174d9ceeca1 260 // Wait for the conversion to complete
arve0 0:8174d9ceeca1 261 wait_ms(m_conversionDelay);
arve0 0:8174d9ceeca1 262
arve0 0:8174d9ceeca1 263 // Read the conversion results
arve0 0:8174d9ceeca1 264 uint16_t res = readRegister(m_i2cAddress, ADS1015_REG_POINTER_CONVERT) >> m_bitShift;
arve0 0:8174d9ceeca1 265 if (m_bitShift == 0)
arve0 0:8174d9ceeca1 266 {
arve0 0:8174d9ceeca1 267 return (int16_t)res;
arve0 0:8174d9ceeca1 268 }
arve0 0:8174d9ceeca1 269 else
arve0 0:8174d9ceeca1 270 {
arve0 0:8174d9ceeca1 271 // Shift 12-bit results right 4 bits for the ADS1015,
arve0 0:8174d9ceeca1 272 // making sure we keep the sign bit intact
arve0 0:8174d9ceeca1 273 if (res > 0x07FF)
arve0 0:8174d9ceeca1 274 {
arve0 0:8174d9ceeca1 275 // negative number - extend the sign to 16th bit
arve0 0:8174d9ceeca1 276 res |= 0xF000;
arve0 0:8174d9ceeca1 277 }
arve0 0:8174d9ceeca1 278 return (int16_t)res;
arve0 0:8174d9ceeca1 279 }
arve0 0:8174d9ceeca1 280 }
arve0 0:8174d9ceeca1 281
arve0 0:8174d9ceeca1 282 /**************************************************************************/
arve0 0:8174d9ceeca1 283 /*!
arve0 0:8174d9ceeca1 284 @brief Sets up the comparator to operate in basic mode, causing the
arve0 0:8174d9ceeca1 285 ALERT/RDY pin to assert (go from high to low) when the ADC
arve0 0:8174d9ceeca1 286 value exceeds the specified threshold.
arve0 0:8174d9ceeca1 287
arve0 0:8174d9ceeca1 288 This will also set the ADC in continuous conversion mode.
arve0 0:8174d9ceeca1 289 */
arve0 0:8174d9ceeca1 290 /**************************************************************************/
arve0 0:8174d9ceeca1 291 void Adafruit_ADS1015::startComparator_SingleEnded(uint8_t channel, int16_t threshold)
arve0 0:8174d9ceeca1 292 {
arve0 0:8174d9ceeca1 293 // Start with default values
arve0 0:8174d9ceeca1 294 uint16_t config = ADS1015_REG_CONFIG_CQUE_1CONV | // Comparator enabled and asserts on 1 match
arve0 0:8174d9ceeca1 295 ADS1015_REG_CONFIG_CLAT_LATCH | // Latching mode
arve0 0:8174d9ceeca1 296 ADS1015_REG_CONFIG_CPOL_ACTVLOW | // Alert/Rdy active low (default val)
arve0 0:8174d9ceeca1 297 ADS1015_REG_CONFIG_CMODE_TRAD | // Traditional comparator (default val)
arve0 0:8174d9ceeca1 298 ADS1015_REG_CONFIG_DR_1600SPS | // 1600 samples per second (default)
arve0 0:8174d9ceeca1 299 ADS1015_REG_CONFIG_MODE_CONTIN | // Continuous conversion mode
arve0 0:8174d9ceeca1 300 ADS1015_REG_CONFIG_MODE_CONTIN; // Continuous conversion mode
arve0 0:8174d9ceeca1 301
arve0 0:8174d9ceeca1 302 // Set PGA/voltage range
arve0 0:8174d9ceeca1 303 config |= m_gain;
arve0 0:8174d9ceeca1 304
arve0 0:8174d9ceeca1 305 // Set single-ended input channel
arve0 0:8174d9ceeca1 306 switch (channel)
arve0 0:8174d9ceeca1 307 {
arve0 0:8174d9ceeca1 308 case (0):
arve0 0:8174d9ceeca1 309 config |= ADS1015_REG_CONFIG_MUX_SINGLE_0;
arve0 0:8174d9ceeca1 310 break;
arve0 0:8174d9ceeca1 311 case (1):
arve0 0:8174d9ceeca1 312 config |= ADS1015_REG_CONFIG_MUX_SINGLE_1;
arve0 0:8174d9ceeca1 313 break;
arve0 0:8174d9ceeca1 314 case (2):
arve0 0:8174d9ceeca1 315 config |= ADS1015_REG_CONFIG_MUX_SINGLE_2;
arve0 0:8174d9ceeca1 316 break;
arve0 0:8174d9ceeca1 317 case (3):
arve0 0:8174d9ceeca1 318 config |= ADS1015_REG_CONFIG_MUX_SINGLE_3;
arve0 0:8174d9ceeca1 319 break;
arve0 0:8174d9ceeca1 320 }
arve0 0:8174d9ceeca1 321
arve0 0:8174d9ceeca1 322 // Set the high threshold register
arve0 0:8174d9ceeca1 323 // Shift 12-bit results left 4 bits for the ADS1015
arve0 0:8174d9ceeca1 324 writeRegister(m_i2cAddress, ADS1015_REG_POINTER_HITHRESH, threshold << m_bitShift);
arve0 0:8174d9ceeca1 325
arve0 0:8174d9ceeca1 326 // Write config register to the ADC
arve0 0:8174d9ceeca1 327 writeRegister(m_i2cAddress, ADS1015_REG_POINTER_CONFIG, config);
arve0 0:8174d9ceeca1 328 }
arve0 0:8174d9ceeca1 329
arve0 0:8174d9ceeca1 330 /**************************************************************************/
arve0 0:8174d9ceeca1 331 /*!
arve0 0:8174d9ceeca1 332 @brief In order to clear the comparator, we need to read the
arve0 0:8174d9ceeca1 333 conversion results. This function reads the last conversion
arve0 0:8174d9ceeca1 334 results without changing the config value.
arve0 0:8174d9ceeca1 335 */
arve0 0:8174d9ceeca1 336 /**************************************************************************/
arve0 0:8174d9ceeca1 337 int16_t Adafruit_ADS1015::getLastConversionResults()
arve0 0:8174d9ceeca1 338 {
arve0 0:8174d9ceeca1 339 // Wait for the conversion to complete
arve0 0:8174d9ceeca1 340 wait_ms(m_conversionDelay);
arve0 0:8174d9ceeca1 341
arve0 0:8174d9ceeca1 342 // Read the conversion results
arve0 0:8174d9ceeca1 343 uint16_t res = readRegister(m_i2cAddress, ADS1015_REG_POINTER_CONVERT) >> m_bitShift;
arve0 0:8174d9ceeca1 344 if (m_bitShift == 0)
arve0 0:8174d9ceeca1 345 {
arve0 0:8174d9ceeca1 346 return (int16_t)res;
arve0 0:8174d9ceeca1 347 }
arve0 0:8174d9ceeca1 348 else
arve0 0:8174d9ceeca1 349 {
arve0 0:8174d9ceeca1 350 // Shift 12-bit results right 4 bits for the ADS1015,
arve0 0:8174d9ceeca1 351 // making sure we keep the sign bit intact
arve0 0:8174d9ceeca1 352 if (res > 0x07FF)
arve0 0:8174d9ceeca1 353 {
arve0 0:8174d9ceeca1 354 // negative number - extend the sign to 16th bit
arve0 0:8174d9ceeca1 355 res |= 0xF000;
arve0 0:8174d9ceeca1 356 }
arve0 0:8174d9ceeca1 357 return (int16_t)res;
arve0 0:8174d9ceeca1 358 }
arve0 0:8174d9ceeca1 359 }