A library for ADS1015 and ADS1115 from Texas Instruments.
Fork of ADS1015 by
Diff: Adafruit_ADS1015.cpp
- Revision:
- 2:d864e21d4e58
- Parent:
- 0:8174d9ceeca1
- Child:
- 4:6445a678d458
--- a/Adafruit_ADS1015.cpp Sun Nov 10 18:44:47 2013 +0000 +++ b/Adafruit_ADS1015.cpp Sat Oct 11 08:20:09 2014 +0000 @@ -30,12 +30,13 @@ @brief Writes 16-bits to the specified destination register */ /**************************************************************************/ -void Adafruit_ADS1015::writeRegister(uint8_t i2cAddress, uint8_t reg, uint16_t value) { - char cmd[3]; - cmd[0] = (char)reg; - cmd[1] = (char)(value>>8); - cmd[2] = (char)(value & 0xFF); - m_i2c->write(i2cAddress, cmd, 3); +void Adafruit_ADS1015::writeRegister(uint8_t i2cAddress, uint8_t reg, uint16_t value) +{ + char cmd[3]; + cmd[0] = (char)reg; + cmd[1] = (char)(value>>8); + cmd[2] = (char)(value & 0xFF); + m_i2c->write(i2cAddress, cmd, 3); } /**************************************************************************/ @@ -43,12 +44,13 @@ @brief Reads 16-bits from the specified register */ /**************************************************************************/ -uint16_t Adafruit_ADS1015::readRegister(uint8_t i2cAddress, uint8_t reg) { - char data[2]; - data[0] = reg; // temporary use this to send address to conversion register - m_i2c->write(i2cAddress, data, 1); - m_i2c->read(i2cAddress, data, 2); - return (data[0] << 8 | data [1]); +uint16_t Adafruit_ADS1015::readRegister(uint8_t i2cAddress, uint8_t reg) +{ + char data[2]; + data[0] = reg; // temporary use this to send address to conversion register + m_i2c->write(i2cAddress, data, 1); + m_i2c->read(i2cAddress, data, 2); + return (data[0] << 8 | data [1]); } /**************************************************************************/ @@ -56,14 +58,14 @@ @brief Instantiates a new ADS1015 class w/appropriate properties */ /**************************************************************************/ -Adafruit_ADS1015::Adafruit_ADS1015(I2C* i2c, uint8_t i2cAddress) +Adafruit_ADS1015::Adafruit_ADS1015(I2C* i2c, uint8_t i2cAddress) { - // shift 7 bit address 1 left: read expects 8 bit address, see I2C.h - m_i2cAddress = i2cAddress << 1; - m_conversionDelay = ADS1015_CONVERSIONDELAY; - m_bitShift = 4; - m_gain = GAIN_TWOTHIRDS; /* +/- 6.144V range (limited to VDD +0.3V max!) */ - m_i2c = i2c; + // shift 7 bit address 1 left: read expects 8 bit address, see I2C.h + m_i2cAddress = i2cAddress << 1; + m_conversionDelay = ADS1015_CONVERSIONDELAY; + m_bitShift = 4; + m_gain = GAIN_TWOTHIRDS; /* +/- 6.144V range (limited to VDD +0.3V max!) */ + m_i2c = i2c; } /**************************************************************************/ @@ -73,12 +75,12 @@ /**************************************************************************/ Adafruit_ADS1115::Adafruit_ADS1115(I2C* i2c, uint8_t i2cAddress) { - // shift 7 bit address 1 left: read expects 8 bit address, see mbed's I2C.h - m_i2cAddress = i2cAddress << 1; - m_conversionDelay = ADS1115_CONVERSIONDELAY; - m_bitShift = 0; - m_gain = GAIN_TWOTHIRDS; /* +/- 6.144V range (limited to VDD +0.3V max!) */ - m_i2c = i2c; + // shift 7 bit address 1 left: read expects 8 bit address, see mbed's I2C.h + m_i2cAddress = i2cAddress << 1; + m_conversionDelay = ADS1115_CONVERSIONDELAY; + m_bitShift = 0; + m_gain = GAIN_TWOTHIRDS; /* +/- 6.144V range (limited to VDD +0.3V max!) */ + m_i2c = i2c; } /**************************************************************************/ @@ -88,7 +90,7 @@ /**************************************************************************/ void Adafruit_ADS1015::setGain(adsGain_t gain) { - m_gain = gain; + m_gain = gain; } /**************************************************************************/ @@ -98,7 +100,7 @@ /**************************************************************************/ adsGain_t Adafruit_ADS1015::getGain() { - return m_gain; + return m_gain; } /**************************************************************************/ @@ -106,154 +108,147 @@ @brief Gets a single-ended ADC reading from the specified channel */ /**************************************************************************/ -uint16_t Adafruit_ADS1015::readADC_SingleEnded(uint8_t channel) { - if (channel > 3) - { - return 0; - } - - // Start with default values - uint16_t config = ADS1015_REG_CONFIG_CQUE_NONE | // Disable the comparator (default val) - ADS1015_REG_CONFIG_CLAT_NONLAT | // Non-latching (default val) - ADS1015_REG_CONFIG_CPOL_ACTVLOW | // Alert/Rdy active low (default val) - ADS1015_REG_CONFIG_CMODE_TRAD | // Traditional comparator (default val) - ADS1015_REG_CONFIG_DR_1600SPS | // 1600 samples per second (default) - ADS1015_REG_CONFIG_MODE_SINGLE; // Single-shot mode (default) +uint16_t Adafruit_ADS1015::readADC_SingleEnded(uint8_t channel) +{ + if (channel > 3) { + return 0; + } - // Set PGA/voltage range - config |= m_gain; + // Start with default values + uint16_t config = ADS1015_REG_CONFIG_CQUE_NONE | // Disable the comparator (default val) + ADS1015_REG_CONFIG_CLAT_NONLAT | // Non-latching (default val) + ADS1015_REG_CONFIG_CPOL_ACTVLOW | // Alert/Rdy active low (default val) + ADS1015_REG_CONFIG_CMODE_TRAD | // Traditional comparator (default val) + ADS1015_REG_CONFIG_DR_1600SPS | // 1600 samples per second (default) + ADS1015_REG_CONFIG_MODE_SINGLE; // Single-shot mode (default) + + // Set PGA/voltage range + config |= m_gain; - // Set single-ended input channel - switch (channel) - { - case (0): - config |= ADS1015_REG_CONFIG_MUX_SINGLE_0; - break; - case (1): - config |= ADS1015_REG_CONFIG_MUX_SINGLE_1; - break; - case (2): - config |= ADS1015_REG_CONFIG_MUX_SINGLE_2; - break; - case (3): - config |= ADS1015_REG_CONFIG_MUX_SINGLE_3; - break; - } + // Set single-ended input channel + switch (channel) { + case (0): + config |= ADS1015_REG_CONFIG_MUX_SINGLE_0; + break; + case (1): + config |= ADS1015_REG_CONFIG_MUX_SINGLE_1; + break; + case (2): + config |= ADS1015_REG_CONFIG_MUX_SINGLE_2; + break; + case (3): + config |= ADS1015_REG_CONFIG_MUX_SINGLE_3; + break; + } - // Set 'start single-conversion' bit - config |= ADS1015_REG_CONFIG_OS_SINGLE; + // Set 'start single-conversion' bit + config |= ADS1015_REG_CONFIG_OS_SINGLE; - // Write config register to the ADC - writeRegister(m_i2cAddress, ADS1015_REG_POINTER_CONFIG, config); + // Write config register to the ADC + writeRegister(m_i2cAddress, ADS1015_REG_POINTER_CONFIG, config); - // Wait for the conversion to complete - wait_ms(m_conversionDelay); + // Wait for the conversion to complete + wait_ms(m_conversionDelay); - // Read the conversion results - // Shift 12-bit results right 4 bits for the ADS1015 - return readRegister(m_i2cAddress, ADS1015_REG_POINTER_CONVERT) >> m_bitShift; + // Read the conversion results + // Shift 12-bit results right 4 bits for the ADS1015 + return readRegister(m_i2cAddress, ADS1015_REG_POINTER_CONVERT) >> m_bitShift; } /**************************************************************************/ -/*! +/*! @brief Reads the conversion results, measuring the voltage difference between the P (AIN0) and N (AIN1) input. Generates a signed value since the difference can be either positive or negative. */ /**************************************************************************/ -int16_t Adafruit_ADS1015::readADC_Differential_0_1() { - // Start with default values - uint16_t config = ADS1015_REG_CONFIG_CQUE_NONE | // Disable the comparator (default val) - ADS1015_REG_CONFIG_CLAT_NONLAT | // Non-latching (default val) - ADS1015_REG_CONFIG_CPOL_ACTVLOW | // Alert/Rdy active low (default val) - ADS1015_REG_CONFIG_CMODE_TRAD | // Traditional comparator (default val) - ADS1015_REG_CONFIG_DR_1600SPS | // 1600 samples per second (default) - ADS1015_REG_CONFIG_MODE_SINGLE; // Single-shot mode (default) +int16_t Adafruit_ADS1015::readADC_Differential_0_1() +{ + // Start with default values + uint16_t config = ADS1015_REG_CONFIG_CQUE_NONE | // Disable the comparator (default val) + ADS1015_REG_CONFIG_CLAT_NONLAT | // Non-latching (default val) + ADS1015_REG_CONFIG_CPOL_ACTVLOW | // Alert/Rdy active low (default val) + ADS1015_REG_CONFIG_CMODE_TRAD | // Traditional comparator (default val) + ADS1015_REG_CONFIG_DR_1600SPS | // 1600 samples per second (default) + ADS1015_REG_CONFIG_MODE_SINGLE; // Single-shot mode (default) - // Set PGA/voltage range - config |= m_gain; - - // Set channels - config |= ADS1015_REG_CONFIG_MUX_DIFF_0_1; // AIN0 = P, AIN1 = N + // Set PGA/voltage range + config |= m_gain; - // Set 'start single-conversion' bit - config |= ADS1015_REG_CONFIG_OS_SINGLE; + // Set channels + config |= ADS1015_REG_CONFIG_MUX_DIFF_0_1; // AIN0 = P, AIN1 = N - // Write config register to the ADC - writeRegister(m_i2cAddress, ADS1015_REG_POINTER_CONFIG, config); + // Set 'start single-conversion' bit + config |= ADS1015_REG_CONFIG_OS_SINGLE; - // Wait for the conversion to complete - wait_ms(m_conversionDelay); + // Write config register to the ADC + writeRegister(m_i2cAddress, ADS1015_REG_POINTER_CONFIG, config); + + // Wait for the conversion to complete + wait_ms(m_conversionDelay); - // Read the conversion results - uint16_t res = readRegister(m_i2cAddress, ADS1015_REG_POINTER_CONVERT) >> m_bitShift; - if (m_bitShift == 0) - { - return (int16_t)res; - } - else - { - // Shift 12-bit results right 4 bits for the ADS1015, - // making sure we keep the sign bit intact - if (res > 0x07FF) - { - // negative number - extend the sign to 16th bit - res |= 0xF000; + // Read the conversion results + uint16_t res = readRegister(m_i2cAddress, ADS1015_REG_POINTER_CONVERT) >> m_bitShift; + if (m_bitShift == 0) { + return (int16_t)res; + } else { + // Shift 12-bit results right 4 bits for the ADS1015, + // making sure we keep the sign bit intact + if (res > 0x07FF) { + // negative number - extend the sign to 16th bit + res |= 0xF000; + } + return (int16_t)res; } - return (int16_t)res; - } } /**************************************************************************/ -/*! +/*! @brief Reads the conversion results, measuring the voltage difference between the P (AIN2) and N (AIN3) input. Generates a signed value since the difference can be either positive or negative. */ /**************************************************************************/ -int16_t Adafruit_ADS1015::readADC_Differential_2_3() { - // Start with default values - uint16_t config = ADS1015_REG_CONFIG_CQUE_NONE | // Disable the comparator (default val) - ADS1015_REG_CONFIG_CLAT_NONLAT | // Non-latching (default val) - ADS1015_REG_CONFIG_CPOL_ACTVLOW | // Alert/Rdy active low (default val) - ADS1015_REG_CONFIG_CMODE_TRAD | // Traditional comparator (default val) - ADS1015_REG_CONFIG_DR_1600SPS | // 1600 samples per second (default) - ADS1015_REG_CONFIG_MODE_SINGLE; // Single-shot mode (default) +int16_t Adafruit_ADS1015::readADC_Differential_2_3() +{ + // Start with default values + uint16_t config = ADS1015_REG_CONFIG_CQUE_NONE | // Disable the comparator (default val) + ADS1015_REG_CONFIG_CLAT_NONLAT | // Non-latching (default val) + ADS1015_REG_CONFIG_CPOL_ACTVLOW | // Alert/Rdy active low (default val) + ADS1015_REG_CONFIG_CMODE_TRAD | // Traditional comparator (default val) + ADS1015_REG_CONFIG_DR_1600SPS | // 1600 samples per second (default) + ADS1015_REG_CONFIG_MODE_SINGLE; // Single-shot mode (default) - // Set PGA/voltage range - config |= m_gain; - - // Set channels - config |= ADS1015_REG_CONFIG_MUX_DIFF_2_3; // AIN2 = P, AIN3 = N + // Set PGA/voltage range + config |= m_gain; - // Set 'start single-conversion' bit - config |= ADS1015_REG_CONFIG_OS_SINGLE; + // Set channels + config |= ADS1015_REG_CONFIG_MUX_DIFF_2_3; // AIN2 = P, AIN3 = N - // Write config register to the ADC - writeRegister(m_i2cAddress, ADS1015_REG_POINTER_CONFIG, config); + // Set 'start single-conversion' bit + config |= ADS1015_REG_CONFIG_OS_SINGLE; - // Wait for the conversion to complete - wait_ms(m_conversionDelay); + // Write config register to the ADC + writeRegister(m_i2cAddress, ADS1015_REG_POINTER_CONFIG, config); + + // Wait for the conversion to complete + wait_ms(m_conversionDelay); - // Read the conversion results - uint16_t res = readRegister(m_i2cAddress, ADS1015_REG_POINTER_CONVERT) >> m_bitShift; - if (m_bitShift == 0) - { - return (int16_t)res; - } - else - { - // Shift 12-bit results right 4 bits for the ADS1015, - // making sure we keep the sign bit intact - if (res > 0x07FF) - { - // negative number - extend the sign to 16th bit - res |= 0xF000; + // Read the conversion results + uint16_t res = readRegister(m_i2cAddress, ADS1015_REG_POINTER_CONVERT) >> m_bitShift; + if (m_bitShift == 0) { + return (int16_t)res; + } else { + // Shift 12-bit results right 4 bits for the ADS1015, + // making sure we keep the sign bit intact + if (res > 0x07FF) { + // negative number - extend the sign to 16th bit + res |= 0xF000; + } + return (int16_t)res; } - return (int16_t)res; - } } /**************************************************************************/ @@ -267,41 +262,40 @@ /**************************************************************************/ void Adafruit_ADS1015::startComparator_SingleEnded(uint8_t channel, int16_t threshold) { - // Start with default values - uint16_t config = ADS1015_REG_CONFIG_CQUE_1CONV | // Comparator enabled and asserts on 1 match - ADS1015_REG_CONFIG_CLAT_LATCH | // Latching mode - ADS1015_REG_CONFIG_CPOL_ACTVLOW | // Alert/Rdy active low (default val) - ADS1015_REG_CONFIG_CMODE_TRAD | // Traditional comparator (default val) - ADS1015_REG_CONFIG_DR_1600SPS | // 1600 samples per second (default) - ADS1015_REG_CONFIG_MODE_CONTIN | // Continuous conversion mode - ADS1015_REG_CONFIG_MODE_CONTIN; // Continuous conversion mode + // Start with default values + uint16_t config = ADS1015_REG_CONFIG_CQUE_1CONV | // Comparator enabled and asserts on 1 match + ADS1015_REG_CONFIG_CLAT_LATCH | // Latching mode + ADS1015_REG_CONFIG_CPOL_ACTVLOW | // Alert/Rdy active low (default val) + ADS1015_REG_CONFIG_CMODE_TRAD | // Traditional comparator (default val) + ADS1015_REG_CONFIG_DR_1600SPS | // 1600 samples per second (default) + ADS1015_REG_CONFIG_MODE_CONTIN | // Continuous conversion mode + ADS1015_REG_CONFIG_MODE_CONTIN; // Continuous conversion mode + + // Set PGA/voltage range + config |= m_gain; - // Set PGA/voltage range - config |= m_gain; - - // Set single-ended input channel - switch (channel) - { - case (0): - config |= ADS1015_REG_CONFIG_MUX_SINGLE_0; - break; - case (1): - config |= ADS1015_REG_CONFIG_MUX_SINGLE_1; - break; - case (2): - config |= ADS1015_REG_CONFIG_MUX_SINGLE_2; - break; - case (3): - config |= ADS1015_REG_CONFIG_MUX_SINGLE_3; - break; - } + // Set single-ended input channel + switch (channel) { + case (0): + config |= ADS1015_REG_CONFIG_MUX_SINGLE_0; + break; + case (1): + config |= ADS1015_REG_CONFIG_MUX_SINGLE_1; + break; + case (2): + config |= ADS1015_REG_CONFIG_MUX_SINGLE_2; + break; + case (3): + config |= ADS1015_REG_CONFIG_MUX_SINGLE_3; + break; + } - // Set the high threshold register - // Shift 12-bit results left 4 bits for the ADS1015 - writeRegister(m_i2cAddress, ADS1015_REG_POINTER_HITHRESH, threshold << m_bitShift); + // Set the high threshold register + // Shift 12-bit results left 4 bits for the ADS1015 + writeRegister(m_i2cAddress, ADS1015_REG_POINTER_HITHRESH, threshold << m_bitShift); - // Write config register to the ADC - writeRegister(m_i2cAddress, ADS1015_REG_POINTER_CONFIG, config); + // Write config register to the ADC + writeRegister(m_i2cAddress, ADS1015_REG_POINTER_CONFIG, config); } /**************************************************************************/ @@ -313,24 +307,20 @@ /**************************************************************************/ int16_t Adafruit_ADS1015::getLastConversionResults() { - // Wait for the conversion to complete - wait_ms(m_conversionDelay); + // Wait for the conversion to complete + wait_ms(m_conversionDelay); - // Read the conversion results - uint16_t res = readRegister(m_i2cAddress, ADS1015_REG_POINTER_CONVERT) >> m_bitShift; - if (m_bitShift == 0) - { - return (int16_t)res; - } - else - { - // Shift 12-bit results right 4 bits for the ADS1015, - // making sure we keep the sign bit intact - if (res > 0x07FF) - { - // negative number - extend the sign to 16th bit - res |= 0xF000; + // Read the conversion results + uint16_t res = readRegister(m_i2cAddress, ADS1015_REG_POINTER_CONVERT) >> m_bitShift; + if (m_bitShift == 0) { + return (int16_t)res; + } else { + // Shift 12-bit results right 4 bits for the ADS1015, + // making sure we keep the sign bit intact + if (res > 0x07FF) { + // negative number - extend the sign to 16th bit + res |= 0xF000; + } + return (int16_t)res; } - return (int16_t)res; - } -} +} \ No newline at end of file