diff options
Diffstat (limited to 'peripheral/libupm/src/ads1x15/ads1x15.h')
-rw-r--r-- | peripheral/libupm/src/ads1x15/ads1x15.h | 424 |
1 files changed, 0 insertions, 424 deletions
diff --git a/peripheral/libupm/src/ads1x15/ads1x15.h b/peripheral/libupm/src/ads1x15/ads1x15.h deleted file mode 100644 index 8ff4fa3..0000000 --- a/peripheral/libupm/src/ads1x15/ads1x15.h +++ /dev/null @@ -1,424 +0,0 @@ -/* - * Author: Marc Graham <marc@m2ag.net> - * Copyright (c) 2015 Intel Corporation. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#pragma once - -#include <iostream> -#include <string> -#include "mraa.hpp" -#include "mraa/i2c.hpp" - -/*========================================================================= - I2C ADDRESS/BITS - -----------------------------------------------------------------------*/ -#define ADS1X15_ADDRESS (0x48) // 1001 000 (ADDR = GND) -/*=========================================================================*/ - - -/*========================================================================= - POINTER REGISTER - -----------------------------------------------------------------------*/ -#define ADS1X15_REG_POINTER_MASK (0x03) -#define ADS1X15_REG_POINTER_CONVERT (0x00) -#define ADS1X15_REG_POINTER_CONFIG (0x01) -#define ADS1X15_REG_POINTER_LOWTHRESH (0x02) -#define ADS1X15_REG_POINTER_HITHRESH (0x03) -/*=========================================================================*/ - -/*========================================================================= - CONFIG REGISTER - - -----------------------------------------------------------------------*/ -#define ADS1X15_OS_MASK (0x8000) -#define ADS1X15_OS_SINGLE (0x8000) // Write: Set to start a single-conversion -#define ADS1X15_OS_BUSY (0x0000) // Read: Bit = 0 when conversion is in progress -#define ADS1X15_OS_NOTBUSY (0x8000) // Read: Bit = 1 when device is not performing a conversion - -#define ADS1X15_MUX_MASK (0x7000) -#define ADS1X15_MUX_DIFF_0_1 (0x0000) // Differential P = AIN0, N = AIN1 (default) -#define ADS1X15_MUX_DIFF_0_3 (0x1000) // Differential P = AIN0, N = AIN3 -#define ADS1X15_MUX_DIFF_1_3 (0x2000) // Differential P = AIN1, N = AIN3 -#define ADS1X15_MUX_DIFF_2_3 (0x3000) // Differential P = AIN2, N = AIN3 -#define ADS1X15_MUX_SINGLE_0 (0x4000) // Single-ended AIN0 -#define ADS1X15_MUX_SINGLE_1 (0x5000) // Single-ended AIN1 -#define ADS1X15_MUX_SINGLE_2 (0x6000) // Single-ended AIN2 -#define ADS1X15_MUX_SINGLE_3 (0x7000) // Single-ended AIN3 - -#define ADS1X15_PGA_MASK (0x0E00) -#define ADS1X15_PGA_6_144V (0x0000) // +/-6.144V range = Gain 2/3 -#define ADS1X15_PGA_4_096V (0x0200) // +/-4.096V range = Gain 1 -#define ADS1X15_PGA_2_048V (0x0400) // +/-2.048V range = Gain 2 (default) -#define ADS1X15_PGA_1_024V (0x0600) // +/-1.024V range = Gain 4 -#define ADS1X15_PGA_0_512V (0x0800) // +/-0.512V range = Gain 8 -#define ADS1X15_PGA_0_256V (0x0A00) // +/-0.256V range = Gain 16 - -#define ADS1X15_MODE_MASK (0x0100) -#define ADS1X15_MODE_CONTIN (0x0000) // Continuous conversion mode -#define ADS1X15_MODE_SINGLE (0x0100) // Power-down single-shot mode (default) - -#define ADS1X15_DR_MASK (0x00E0) - -#define ADS1X15_CMODE_MASK (0x0010) -#define ADS1X15_CMODE_TRAD (0x0000) // Traditional comparator with hysteresis (default) -#define ADS1X15_CMODE_WINDOW (0x0010) // Window comparator - -#define ADS1X15_CPOL_MASK (0x0008) -#define ADS1X15_CPOL_ACTVLOW (0x0000) // ALERT/RDY pin is low when active (default) -#define ADS1X15_CPOL_ACTVHI (0x0008) // ALERT/RDY pin is high when active - -#define ADS1X15_CLAT_MASK (0x0400) // Determines if ALERT/RDY pin latches once asserted -#define ADS1X15_CLAT_NONLAT (0x0000) // Non-latching comparator (default) -#define ADS1X15_CLAT_LATCH (0x0400) // Latching comparator - -#define ADS1X15_CQUE_MASK (0x0003) -/* This wouldn't compile for the python wrapper. with these in for some reason. -#define ADS1X15_CQUE_1CONV (0x0000) // Assert ALERT/RDY after one conversions -#define ADS1X15_CQUE_2CONV (0x0001) // Assert ALERT/RDY after two conversions -#define ADS1X15_CQUE_4CONV (0x0002) // Assert ALERT/RDY after four conversions -#define ADS1X15_CQUE_NONE (0x0003) // Disable the comparator and put ALERT/RDY in high state (default) -*/ -/*=========================================================================*/ - -namespace upm { - /** - * @brief ADS1X15 family adc library - * - * Library for TI analog to digital converter ic. Base clase fro ADS1X15 provides all the functionality that - * ADS1115 and ADS1015 ics have in common. - * - * @defgroup ads1x15 libupm-ads1x15 - * @ingroup ti adafruit i2c electric - */ - class ADS1X15 { - - public: - - /** - * @enum ADSGAIN - * @brief uint16_t enum containing values for - * setting gain for ADS1X15 devices. - * - * @var ADSGAIN::TWOTHIRDS = 0x0000 - * @var ADSGAIN::ONE = 0x0200 - * @var ADSGAIN::TWO = 0x0400 - * @var ADSGAIN::FOUR = 0x0600 - * @var ADSGAIN::EIGHT = 0x0800 - * @var ADSGAIN::SIXTEEN = 0x0A00 - */ - typedef enum ADSGAIN { - GAIN_TWOTHIRDS = ADS1X15_PGA_6_144V, - GAIN_ONE = ADS1X15_PGA_4_096V, - GAIN_TWO = ADS1X15_PGA_2_048V, - GAIN_FOUR = ADS1X15_PGA_1_024V, - GAIN_EIGHT = ADS1X15_PGA_0_512V, - GAIN_SIXTEEN = ADS1X15_PGA_0_256V - } ADSGAIN ; - - /** - * @enum ADSMUXMODE - * @brief uint16_t enum containing values used - * for selecting ADS1X15 read operations. - * - * @var ADSMUXMODE::DIFF_0_1 = 0x0000 - * @var ADSMUXMODE::DIFF_0_2 = 0x1000 - * @var ADSMUXMODE::DIFF_1_3 = 0x2000 - * @var ADSMUXMODE::DIFF_2_3 = 0x3000 - * @var ADSMUXMODE::SINGLE_0 = 0x4000 - * @var ADSMUXMODE::SINGLE_1 = 0x5000 - * @var ADSMUXMODE::SINGLE_2 = 0x6000 - * @var ADSMUXMODE::SINGLE_3 = 0x7000 - */ - typedef enum ADSMUXMODE { - DIFF_0_1 = ADS1X15_MUX_DIFF_0_1, // Differential P = AIN0, N = AIN1 (default) - DIFF_0_3 = ADS1X15_MUX_DIFF_0_3, // Differential P = AIN0, N = AIN3 - DIFF_1_3 = ADS1X15_MUX_DIFF_1_3, // Differential P = AIN1, N = AIN3 - DIFF_2_3 = ADS1X15_MUX_DIFF_2_3, // Differential P = AIN2, N = AIN3 - SINGLE_0 = ADS1X15_MUX_SINGLE_0, // Single-ended AIN0 - SINGLE_1 = ADS1X15_MUX_SINGLE_1, // Single-ended AIN1 - SINGLE_2 = ADS1X15_MUX_SINGLE_2, // Single-ended AIN2 - SINGLE_3 = ADS1X15_MUX_SINGLE_3 // Single-ended AIN3 - } ADSMUXMODE; - - /** - * @enum ADSCOMP - * @brief uint16_t enum containing values - * for setting ADS1X15 comparator queue modes. - * - * @var ADSCOMP::CQUE_1CONV = 0x0000 - * @var ADSCOMP::CQUE_2CONV = 0x0001 - * @var ADSCOMP::CQUE_3CONV = 0x0002 - * @var ADSCOMP::CQUE_NONE = 0x0003 - */ - typedef enum ADSCOMP { - CQUE_1CONV = 0x0000, // Assert ALERT/RDY after one conversions - CQUE_2CONV = 0x0001, // Assert ALERT/RDY after two conversions - CQUE_4CONV = 0x0002, // Assert ALERT/RDY after four conversions - CQUE_NONE = 0x0003 // Disable the comparator and put ALERT/RDY in high state (default) - } ADSCOMP; - - /** - * @enum ADSTHRESH - * @brief uint8_t enum containing register addresses - * used for setting HI and LOW threshold values as - * well as setting conversion ready and set to default. - * - * @var ADSTHRESH::THRESH_LOW = 0x02 - * @var ADSTHRESH::THRESH_HIGH = 0x03 - * @var ADSTHRESH::CONVERSION_RDY = 0x04 - * @var ADSTHRESH::THRESH_DEFAULT = 0x05 - */ - typedef enum ADSTHRESH { - THRESH_LOW = ADS1X15_REG_POINTER_LOWTHRESH, - THRESH_HIGH = ADS1X15_REG_POINTER_HITHRESH, - CONVERSION_RDY = 0x04, - THRESH_DEFAULT = 0x05 - - } ADSTHRESH; - - /** - * @enum ADSSAMPLERATE - * @brief uint16_t enum containing values - * representing the sample rate of the device. - * Will be overridden in subclass - * - * @var ADSSAMPLERATE::SPS_DEFAULT = 0x0080 - */ - typedef enum ADSSAMPLERATE { - SPS_DEFAULT = 0x0080 - } ADSSAMPLERATE; - - /** - * ADS1X15 constructor - * - * @param bus i2c bus the sensor is attached to. - * @param address. Device address. Default is 0x48. - */ - ADS1X15(int bus, uint8_t address); - - /** - * ADS1X15 destructor - */ - virtual ~ADS1X15 (); - - /** - * Returns the name of the sensor - */ - std::string name() - { - return m_name; - } - - /** - * Returns the contents of conversion register without performing - * a conversion operation. Will use a multiplier based on the - * current gain setting to give the voltage as a float. Used - * internally to return the HI and LOW threshold values. - * - * @param reg uint8_t value specifying register to read. - * Should generally be called with no parameter. - */ - float getLastSample(int reg = ADS1X15_REG_POINTER_CONVERT); - - /** - * Performs a read as specified by ADS1X15::ADSMUXMOE and - * returns the value as a float. Uses getLastSample() internally - * to return voltage value. - * - * @pram mode ADSMUXMODE specifying inputs to be sampled. - */ - float getSample(ADSMUXMODE mode = ADS1X15::DIFF_0_1); - - /** - * Returns the current gain setting being used by the device - * as an ADSGAIN value. - */ - ADSGAIN getGain(){ - return (ADSGAIN)(m_config_reg & ADS1X15_PGA_MASK); - } - - /** - * Sets the PGA gain bits to the desired gain. Default - * is +/- 2.094 volts. - * - * @param gain ADSGAIN value reprenting the desired gain. - * See warnings in spec sheet. - */ - void setGain(ADSGAIN gain = ADS1X15::GAIN_TWO); - - /** - * Returns the current device sample rate a an ADSSAMPLERATE - * value. - */ - ADSSAMPLERATE getSPS(void){ - return (ADSSAMPLERATE)(m_config_reg & ADS1X15_DR_MASK); - } - - /** - * Sets the sample rate of the device. This function - * needs to be overrode in subclasses as the ADS1115 and - * ADS1015 have different data rates. - * - * @param ADSSAMPLERATE enum - * SPS_DEFAULT = 0x0080 - */ - virtual void setSPS(ADSSAMPLERATE rate); - - /** - * Returns the comparator mode. - * False = Traditional comparator with Hysteresis (default) - * True = Window Comparator - */ - bool getCompMode(void){ - return (bool)(m_config_reg & ADS1X15_CMODE_MASK); - } - - /** - * Sets the comparator mode of the device. - * - * @param mode bool value denoting mode. - * False = Traditional comparator with Hysteresis (default) - * True = Window Comparator - */ - void setCompMode(bool mode = false); - - /** - * Get comparator polarity. Reports the polarity - * of the ALERT/RDY pin. Returns: - * False = Active Low (default) - * True = Active High - */ - bool getCompPol(void){ - return (bool)(m_config_reg & ADS1X15_CPOL_MASK); - } - - /** - * Sets the comparator polarity. Controls the - * polarity of the ALERT/RDY pin. - * - * @param mode bool. - * False = Active Low (default) - * True = Active High - */ - void setCompPol(bool mode = false); - - /** - * Returns bool representing the state of the - * comparator latching functionality. - * False = Non Latching comparator (default) - * True = Latching Comparator - */ - bool getCompLatch(void){ - return (bool)(m_config_reg & ADS1X15_CLAT_MASK); - } - - /** - * Sets bit controlling comparator operation. - * - * @param mode bool - * False = Non Latching comparator (default) - * True = Latching Comparator - */ - void setCompLatch(bool mode = false); - - /** - * Returns ADSCOMP value representing the state of - * comparator queue. - * - * CQUE_1CONV = Assert after one conversion - * CQUE_2CONV = Assert after two conversions - * CQUE_2CONV = Assert after four conversions - * CQUE_NONE = Disable comparator (default) - */ - ADSCOMP getCompQue(void){ - return (ADSCOMP)(m_config_reg & ADS1X15_CQUE_MASK); - } - - /** - * Sets bits controlling Comparator queue operation. - * - * @param mode ADSCOMP enum. - * CQUE_1CONV = Assert after one conversion - * CQUE_2CONV = Assert after two conversions - * CQUE_2CONV = Assert after four conversions - * CQUE_NONE = Disable comparator (default) - */ - void setCompQue(ADSCOMP mode = ADS1X15::CQUE_NONE); - - /** - * Returns bool reflecting state of device mode bit. - * - * False = Power Down Single shot mode (default) - * True = Continuous conversion mode - */ - bool getContinuous(void){ - return !(bool)(m_config_reg & ADS1X15_MODE_MASK); - } - - /** - * Sets the state of device mode but. - * - * @param mode bool - * False = Power Down Single shot mode (default) - * True = Continuous conversion mode - */ - void setContinuous(bool mode = false); - - /** - * Returns current high or low threshold setting. - * - * @param reg ADSTHRES enum value. - * Returns 0.0 unless THRESH_HIGH or THRESH_LOW requested. - */ - float getThresh(ADSTHRESH reg = THRESH_LOW); - - /** - * Sets threshold levels or configures for conversion ready - * operation of ALERT/RDY output. - * - * @param reg ADSTHRESH enum - * @param value float value to set threshold register to. - * - * THRESH_LOW = Sets low thresh register. - * THRESH_HIGH = Sets high thresh register. - * CONVERSION_RDY = Configures conversion ready operation - * THRESH_DEFAULT = resets high/low registers to startup values. - */ - void setThresh(ADSTHRESH reg = THRESH_DEFAULT , float value = 0.0); - - protected: - std::string m_name; - float m_conversionDelay; - uint8_t m_bitShift; - uint16_t m_config_reg; - //Must be overridden in subclass for proper values. - virtual float getMultiplier(void) = 0; - //Must be overridden in subclass for proper values. - virtual void setDelay(void) = 0; - void getCurrentConfig(); - void updateConfigRegister(uint16_t update, bool read = false); - uint16_t swapWord(uint16_t value); - - mraa::I2c* i2c; - - };} |