Ultra-Small, Low-Power, I2C-Compatible, 860-SPS, 16-Bit ADCs With Internal Reference, Oscillator, and Programmable Comparator

Committer:
mcm
Date:
Fri Jun 19 10:23:27 2020 +0000
Revision:
4:7853bced749c
Parent:
3:4a9619b441f0
A bug was fixed, the device is chosen once it is declared the class on mBed. The driver was tested and it works as expected.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mcm 1:8593e6fcf0c3 1 /**
mcm 1:8593e6fcf0c3 2 * @brief ADS111X.h
mcm 1:8593e6fcf0c3 3 * @details Ultra-Small, Low-Power, I2C-Compatible, 860-SPS, 16-Bit ADCs With Internal Reference, Oscillator, and Programmable Comparator.
mcm 1:8593e6fcf0c3 4 * Header file.
mcm 1:8593e6fcf0c3 5 *
mcm 1:8593e6fcf0c3 6 *
mcm 1:8593e6fcf0c3 7 * @return N/A
mcm 1:8593e6fcf0c3 8 *
mcm 1:8593e6fcf0c3 9 * @author Manuel Caballero
mcm 1:8593e6fcf0c3 10 * @date 18/June/2020
mcm 1:8593e6fcf0c3 11 * @version 18/June/2020 The ORIGIN
mcm 1:8593e6fcf0c3 12 * @pre N/A.
mcm 1:8593e6fcf0c3 13 * @warning N/A
mcm 1:8593e6fcf0c3 14 * @pre This code belongs to AqueronteBlog ( http://unbarquero.blogspot.com ).
mcm 1:8593e6fcf0c3 15 */
mcm 1:8593e6fcf0c3 16 #ifndef ADS111X_H
mcm 1:8593e6fcf0c3 17 #define ADS111X_H
mcm 1:8593e6fcf0c3 18
mcm 1:8593e6fcf0c3 19 #include "mbed.h"
mcm 1:8593e6fcf0c3 20
mcm 1:8593e6fcf0c3 21
mcm 1:8593e6fcf0c3 22 /**
mcm 1:8593e6fcf0c3 23 Example:
mcm 1:8593e6fcf0c3 24 @code
mcm 3:4a9619b441f0 25 #include "mbed.h"
mcm 3:4a9619b441f0 26 #include "ADS111X.h"
mcm 1:8593e6fcf0c3 27
mcm 3:4a9619b441f0 28 ADS111X myADS111X ( I2C_SDA, I2C_SCL, ADS111X::ADS111X_ADDRESS_GND, 100000, ADS111X::DEVICE_ADS1115 ); // I2C_SDA | I2C_SCL | DEVICE_ADS1115
mcm 3:4a9619b441f0 29 Serial pc ( USBTX, USBRX ); // tx, rx
mcm 3:4a9619b441f0 30
mcm 3:4a9619b441f0 31 DigitalOut myled ( LED1 );
mcm 3:4a9619b441f0 32 Ticker newAction;
mcm 3:4a9619b441f0 33
mcm 3:4a9619b441f0 34
mcm 3:4a9619b441f0 35 //@brief Constants.
mcm 3:4a9619b441f0 36
mcm 3:4a9619b441f0 37
mcm 3:4a9619b441f0 38 //@brief Variables.
mcm 3:4a9619b441f0 39 volatile uint32_t myState; // State that indicates when to perform a new sample
mcm 3:4a9619b441f0 40
mcm 3:4a9619b441f0 41
mcm 3:4a9619b441f0 42 //@brief FUNCTION PROTOTYPES
mcm 3:4a9619b441f0 43 void changeDATA ( void );
mcm 3:4a9619b441f0 44
mcm 3:4a9619b441f0 45
mcm 3:4a9619b441f0 46 //@brief FUNCTION FOR APPLICATION MAIN ENTRY.
mcm 3:4a9619b441f0 47 int main()
mcm 3:4a9619b441f0 48 {
mcm 3:4a9619b441f0 49 ADS111X::ADS111X_status_t aux;
mcm 3:4a9619b441f0 50 ADS111X::ADS111X_data_t myADS111X_Data;
mcm 3:4a9619b441f0 51
mcm 3:4a9619b441f0 52 pc.baud ( 115200 );
mcm 3:4a9619b441f0 53
mcm 3:4a9619b441f0 54 myled = 1;
mcm 3:4a9619b441f0 55 wait(3);
mcm 3:4a9619b441f0 56 myled = 0;
mcm 3:4a9619b441f0 57
mcm 3:4a9619b441f0 58 // Perform a softreset
mcm 3:4a9619b441f0 59 aux = myADS111X.ADS111X_SoftReset ();
mcm 3:4a9619b441f0 60 wait_ms ( 500U );
mcm 3:4a9619b441f0 61
mcm 3:4a9619b441f0 62 // Input multiplexor configuration ( channels ): AINp = AIN0 | AINn = GND
mcm 3:4a9619b441f0 63 myADS111X_Data.config.mux = ADS111X::CONFIG_MUX_AINP_AIN0_AND_AINN_GND;
mcm 3:4a9619b441f0 64 aux = myADS111X.ADS111X_SetMux ( myADS111X_Data );
mcm 3:4a9619b441f0 65
mcm 3:4a9619b441f0 66 // Gain: ±4.096V
mcm 3:4a9619b441f0 67 myADS111X_Data.config.pga = ADS111X::CONFIG_PGA_FSR_4_096_V;
mcm 3:4a9619b441f0 68 aux = myADS111X.ADS111X_SetGain ( myADS111X_Data );
mcm 3:4a9619b441f0 69
mcm 3:4a9619b441f0 70 // Mode: Single-shot
mcm 3:4a9619b441f0 71 myADS111X_Data.config.mode = ADS111X::CONFIG_MODE_SINGLE_SHOT;
mcm 3:4a9619b441f0 72 aux = myADS111X.ADS111X_SetMode ( myADS111X_Data.config );
mcm 3:4a9619b441f0 73
mcm 3:4a9619b441f0 74 // Data rate: 1600 SPS
mcm 3:4a9619b441f0 75 myADS111X_Data.config.dr = ADS111X::CONFIG_DR_128_SPS;
mcm 3:4a9619b441f0 76 aux = myADS111X.ADS111X_SetDataRate ( myADS111X_Data.config );
mcm 3:4a9619b441f0 77
mcm 3:4a9619b441f0 78 // Comparator: Disabled
mcm 3:4a9619b441f0 79 myADS111X_Data.config.comp_que = ADS111X::CONFIG_COMP_QUE_DISABLED;
mcm 3:4a9619b441f0 80 aux = myADS111X.ADS111X_SetComparator ( myADS111X_Data );
mcm 3:4a9619b441f0 81
mcm 3:4a9619b441f0 82 myState = 0UL; // Reset the variable
mcm 3:4a9619b441f0 83 newAction.attach( &changeDATA, 1U ); // the address of the function to be attached ( changeDATA ) and the interval ( 1s )
mcm 3:4a9619b441f0 84
mcm 3:4a9619b441f0 85 // Let the callbacks take care of everything
mcm 3:4a9619b441f0 86 while(1) {
mcm 3:4a9619b441f0 87 sleep();
mcm 3:4a9619b441f0 88
mcm 3:4a9619b441f0 89 if ( myState == 1UL ) {
mcm 3:4a9619b441f0 90 myled = 1U;
mcm 3:4a9619b441f0 91
mcm 3:4a9619b441f0 92 // Trigger a new conversion
mcm 3:4a9619b441f0 93 aux = myADS111X.ADS111X_StartSingleConversion ();
mcm 3:4a9619b441f0 94
mcm 3:4a9619b441f0 95 // Wait until the conversion is completed
mcm 3:4a9619b441f0 96 do {
mcm 3:4a9619b441f0 97 aux = myADS111X.ADS111X_GetOS ( &myADS111X_Data.config );
mcm 3:4a9619b441f0 98 } while( ( myADS111X_Data.config.os & ADS111X::CONFIG_OS_MASK ) == ADS111X::CONFIG_OS_BUSY ); // [TODO] Too dangerous! the uC may get stuck here
mcm 3:4a9619b441f0 99 // [WORKAROUND] Insert a counter.
mcm 3:4a9619b441f0 100 // Get the result
mcm 3:4a9619b441f0 101 aux = myADS111X.ADS111X_GetConversion ( &myADS111X_Data );
mcm 3:4a9619b441f0 102
mcm 3:4a9619b441f0 103 // Send data through the UART
mcm 3:4a9619b441f0 104 pc.printf ( "V: %d mV\r\n", (int32_t)( 1000 * myADS111X_Data.conversion.conversion ) );
mcm 3:4a9619b441f0 105
mcm 3:4a9619b441f0 106
mcm 3:4a9619b441f0 107 // Reset the variables
mcm 3:4a9619b441f0 108 myState = 0UL;
mcm 3:4a9619b441f0 109 myled = 0U;
mcm 3:4a9619b441f0 110 }
mcm 3:4a9619b441f0 111 }
mcm 3:4a9619b441f0 112 }
mcm 3:4a9619b441f0 113
mcm 3:4a9619b441f0 114
mcm 3:4a9619b441f0 115 // @brief changeDATA ( void )
mcm 3:4a9619b441f0 116 //
mcm 3:4a9619b441f0 117 // @details It changes myState variable
mcm 3:4a9619b441f0 118 //
mcm 3:4a9619b441f0 119 // @param[in] N/A
mcm 3:4a9619b441f0 120 //
mcm 3:4a9619b441f0 121 // @param[out] N/A.
mcm 3:4a9619b441f0 122 //
mcm 3:4a9619b441f0 123 // @return N/A.
mcm 3:4a9619b441f0 124 //
mcm 3:4a9619b441f0 125 // @author Manuel Caballero
mcm 3:4a9619b441f0 126 // @date 18/June/2020
mcm 3:4a9619b441f0 127 // @version 18/June/2020 The ORIGIN
mcm 3:4a9619b441f0 128 // @pre N/A
mcm 3:4a9619b441f0 129 // @warning N/A.
mcm 3:4a9619b441f0 130 void changeDATA ( void )
mcm 3:4a9619b441f0 131 {
mcm 3:4a9619b441f0 132 myState = 1UL;
mcm 3:4a9619b441f0 133 }
mcm 1:8593e6fcf0c3 134 @endcode
mcm 1:8593e6fcf0c3 135 */
mcm 1:8593e6fcf0c3 136
mcm 1:8593e6fcf0c3 137
mcm 1:8593e6fcf0c3 138 /*!
mcm 1:8593e6fcf0c3 139 Library for the ADS111X Ultra-Small, Low-Power, I2C-Compatible, 860-SPS, 16-Bit ADCs With Internal Reference, Oscillator, and Programmable Comparator.
mcm 1:8593e6fcf0c3 140 */
mcm 1:8593e6fcf0c3 141 class ADS111X
mcm 1:8593e6fcf0c3 142 {
mcm 1:8593e6fcf0c3 143 public:
mcm 1:8593e6fcf0c3 144 /**
mcm 1:8593e6fcf0c3 145 * @brief DEFAULT ADDRESSES
mcm 1:8593e6fcf0c3 146 */
mcm 1:8593e6fcf0c3 147 typedef enum {
mcm 3:4a9619b441f0 148 ADS111X_ADDRESS_GND = ( 0b1001000 << 1U ), /*!< I2C slave address byte, ADDR = GND */
mcm 3:4a9619b441f0 149 ADS111X_ADDRESS_VDD = ( 0b1001001 << 1U ), /*!< I2C slave address byte, ADDR = VDD */
mcm 3:4a9619b441f0 150 ADS111X_ADDRESS_SDA = ( 0b1001010 << 1U ), /*!< I2C slave address byte, ADDR = SDA */
mcm 3:4a9619b441f0 151 ADS111X_ADDRESS_SCL = ( 0b1001011 << 1U ) /*!< I2C slave address byte, ADDR = SCL */
mcm 1:8593e6fcf0c3 152 } ADS111X_addresses_t;
mcm 1:8593e6fcf0c3 153
mcm 1:8593e6fcf0c3 154
mcm 1:8593e6fcf0c3 155
mcm 1:8593e6fcf0c3 156 /**
mcm 1:8593e6fcf0c3 157 * @brief REGISTER MAP
mcm 1:8593e6fcf0c3 158 */
mcm 1:8593e6fcf0c3 159 typedef enum {
mcm 1:8593e6fcf0c3 160 ADS111X_CONVERSION = 0x00, /*!< Conversion register */
mcm 1:8593e6fcf0c3 161 ADS111X_CONFIG = 0x01, /*!< Config register */
mcm 1:8593e6fcf0c3 162 ADS111X_LO_THRESH = 0x02, /*!< Lo threshold register */
mcm 1:8593e6fcf0c3 163 ADS111X_HI_THRESH = 0x03, /*!< Hi threshold register */
mcm 1:8593e6fcf0c3 164 ADS111X_RESET_COMMAND = 0x06 /*!< Reset command ( with a general call ) */
mcm 1:8593e6fcf0c3 165 } ADS111X_register_map_t;
mcm 1:8593e6fcf0c3 166
mcm 1:8593e6fcf0c3 167
mcm 1:8593e6fcf0c3 168
mcm 1:8593e6fcf0c3 169 /**
mcm 1:8593e6fcf0c3 170 * @brief DEVICE.
mcm 1:8593e6fcf0c3 171 * NOTE: The user MUST define which device to use: ADS1013, ADS1014 or ADS1015.
mcm 1:8593e6fcf0c3 172 */
mcm 1:8593e6fcf0c3 173 typedef enum {
mcm 1:8593e6fcf0c3 174 DEVICE_ADS1113 = 0x00, /*!< Device: ADS1113 */
mcm 1:8593e6fcf0c3 175 DEVICE_ADS1114 = 0x01, /*!< Device: ADS1114 */
mcm 1:8593e6fcf0c3 176 DEVICE_ADS1115 = 0x02 /*!< Device: ADS1115 */
mcm 1:8593e6fcf0c3 177 } ADS111X_device_t;
mcm 1:8593e6fcf0c3 178
mcm 1:8593e6fcf0c3 179
mcm 1:8593e6fcf0c3 180
mcm 1:8593e6fcf0c3 181 /**
mcm 1:8593e6fcf0c3 182 * @brief CONFIG REGISTER. ( Default: 0x8583 )
mcm 1:8593e6fcf0c3 183 * NOTE: The 16-bit Config register is used to control the operating mode, input selection, data rate, full-scale range, and
mcm 1:8593e6fcf0c3 184 * comparator modes.
mcm 1:8593e6fcf0c3 185 */
mcm 1:8593e6fcf0c3 186 /* OS <15>
mcm 1:8593e6fcf0c3 187 * NOTE: Operational status or single-shot conversion start.
mcm 1:8593e6fcf0c3 188 */
mcm 1:8593e6fcf0c3 189 typedef enum {
mcm 1:8593e6fcf0c3 190 CONFIG_OS_MASK = ( 1U << 15U ), /*!< OS mask */
mcm 1:8593e6fcf0c3 191 CONFIG_OS_BUSY = ( 1U << 15U ), /*!< Device is not currently performing a conversion/Start a single conversion (when in power-down state) [Default] */
mcm 1:8593e6fcf0c3 192 CONFIG_OS_NOT_BUSY = ( 0U << 15U ) /*!< Device is currently performing a conversion */
mcm 1:8593e6fcf0c3 193 } ADS111X_config_os_t;
mcm 1:8593e6fcf0c3 194
mcm 1:8593e6fcf0c3 195
mcm 1:8593e6fcf0c3 196 /* MUX <14:12>
mcm 1:8593e6fcf0c3 197 * NOTE: Input multiplexer configuration ( ADS1115 only ).
mcm 1:8593e6fcf0c3 198 */
mcm 1:8593e6fcf0c3 199 typedef enum {
mcm 1:8593e6fcf0c3 200 CONFIG_MUX_MASK = ( 0b111 << 12U ), /*!< MUX mask */
mcm 1:8593e6fcf0c3 201 CONFIG_MUX_AINP_AIN0_AND_AINN_AIN1 = ( 0b000 << 12U ), /*!< AINP = AIN0 and AINN = AIN1 [ Default ] */
mcm 1:8593e6fcf0c3 202 CONFIG_MUX_AINP_AIN0_AND_AINN_AIN3 = ( 0b001 << 12U ), /*!< AINP = AIN0 and AINN = AIN3 */
mcm 1:8593e6fcf0c3 203 CONFIG_MUX_AINP_AIN1_AND_AINN_AIN3 = ( 0b010 << 12U ), /*!< AINP = AIN1 and AINN = AIN3 */
mcm 1:8593e6fcf0c3 204 CONFIG_MUX_AINP_AIN2_AND_AINN_AIN3 = ( 0b011 << 12U ), /*!< AINP = AIN2 and AINN = AIN3 */
mcm 1:8593e6fcf0c3 205 CONFIG_MUX_AINP_AIN0_AND_AINN_GND = ( 0b100 << 12U ), /*!< AINP = AIN0 and AINN = GND */
mcm 1:8593e6fcf0c3 206 CONFIG_MUX_AINP_AIN1_AND_AINN_GND = ( 0b101 << 12U ), /*!< AINP = AIN1 and AINN = GND */
mcm 1:8593e6fcf0c3 207 CONFIG_MUX_AINP_AIN2_AND_AINN_GND = ( 0b110 << 12U ), /*!< AINP = AIN2 and AINN = GND */
mcm 1:8593e6fcf0c3 208 CONFIG_MUX_AINP_AIN3_AND_AINN_GND = ( 0b111 << 12U ) /*!< AINP = AIN3 and AINN = GND */
mcm 1:8593e6fcf0c3 209 } ADS111X_config_mux_t;
mcm 1:8593e6fcf0c3 210
mcm 1:8593e6fcf0c3 211
mcm 1:8593e6fcf0c3 212 /* PGA <11:9>
mcm 1:8593e6fcf0c3 213 * NOTE: Programmable gain amplifier configuration ( These bits serve NO function on the ADS1113 ).
mcm 1:8593e6fcf0c3 214 */
mcm 1:8593e6fcf0c3 215 typedef enum {
mcm 1:8593e6fcf0c3 216 CONFIG_PGA_MASK = ( 0b111 << 9U ), /*!< PGA mask */
mcm 3:4a9619b441f0 217 CONFIG_PGA_FSR_6_144_V = ( 0b000 << 9U ), /*!< FSR = ±6.144 V */
mcm 3:4a9619b441f0 218 CONFIG_PGA_FSR_4_096_V = ( 0b001 << 9U ), /*!< FSR = ±4.096 V */
mcm 3:4a9619b441f0 219 CONFIG_PGA_FSR_2_048_V = ( 0b010 << 9U ), /*!< FSR = ±2.048 V [ Default ] */
mcm 3:4a9619b441f0 220 CONFIG_PGA_FSR_1_024_V = ( 0b011 << 9U ), /*!< FSR = ±1.024 V */
mcm 3:4a9619b441f0 221 CONFIG_PGA_FSR_0_512_V = ( 0b100 << 9U ), /*!< FSR = ±0.512 V */
mcm 3:4a9619b441f0 222 CONFIG_PGA_FSR_0_256_V = ( 0b101 << 9U ) /*!< FSR = ±0.256 V */
mcm 1:8593e6fcf0c3 223 } ADS111X_config_pga_t;
mcm 1:8593e6fcf0c3 224
mcm 1:8593e6fcf0c3 225
mcm 1:8593e6fcf0c3 226 /* MODE <8>
mcm 1:8593e6fcf0c3 227 * NOTE: Device operating mode.
mcm 1:8593e6fcf0c3 228 */
mcm 1:8593e6fcf0c3 229 typedef enum {
mcm 1:8593e6fcf0c3 230 CONFIG_MODE_MASK = ( 1U << 8U ), /*!< MODE mask */
mcm 1:8593e6fcf0c3 231 CONFIG_MODE_CONTINUOUS_CONVERSION = ( 0U << 8U ), /*!< Continuous-conversion mode */
mcm 1:8593e6fcf0c3 232 CONFIG_MODE_SINGLE_SHOT = ( 1U << 8U ) /*!< Single-shot mode or power-down state [ Default ] */
mcm 1:8593e6fcf0c3 233 } ADS111X_config_mode_t;
mcm 1:8593e6fcf0c3 234
mcm 1:8593e6fcf0c3 235
mcm 1:8593e6fcf0c3 236 /* DR <7:5>
mcm 1:8593e6fcf0c3 237 * NOTE: Data rate.
mcm 1:8593e6fcf0c3 238 */
mcm 1:8593e6fcf0c3 239 typedef enum {
mcm 1:8593e6fcf0c3 240 CONFIG_DR_MASK = ( 0b111 << 5U ), /*!< DR mask */
mcm 1:8593e6fcf0c3 241 CONFIG_DR_8_SPS = ( 0b000 << 5U ), /*!< 8 SPS */
mcm 1:8593e6fcf0c3 242 CONFIG_DR_16_SPS = ( 0b001 << 5U ), /*!< 16 SPS */
mcm 1:8593e6fcf0c3 243 CONFIG_DR_32_SPS = ( 0b010 << 5U ), /*!< 32 SPS */
mcm 1:8593e6fcf0c3 244 CONFIG_DR_64_SPS = ( 0b011 << 5U ), /*!< 64 SPS */
mcm 1:8593e6fcf0c3 245 CONFIG_DR_128_SPS = ( 0b100 << 5U ), /*!< 128 SPS [ Default ] */
mcm 1:8593e6fcf0c3 246 CONFIG_DR_250_SPS = ( 0b101 << 5U ), /*!< 250 SPS */
mcm 1:8593e6fcf0c3 247 CONFIG_DR_475_SPS = ( 0b110 << 5U ), /*!< 475 SPS */
mcm 1:8593e6fcf0c3 248 CONFIG_DR_860_SPS = ( 0b111 << 5U ) /*!< 860 SPS */
mcm 1:8593e6fcf0c3 249 } ADS111X_config_dr_t;
mcm 1:8593e6fcf0c3 250
mcm 1:8593e6fcf0c3 251
mcm 1:8593e6fcf0c3 252 /* COMP_MODE <4>
mcm 1:8593e6fcf0c3 253 * NOTE: Comparator mode ( ADS1114 and ADS1115 only )
mcm 1:8593e6fcf0c3 254 */
mcm 1:8593e6fcf0c3 255 typedef enum {
mcm 1:8593e6fcf0c3 256 CONFIG_COMP_MODE_MASK = ( 1U << 4U ), /*!< COMP_MODE mask */
mcm 1:8593e6fcf0c3 257 CONFIG_COMP_MODE_TRADITIONAL_COMPARATOR = ( 0U << 4U ), /*!< Traditional comparator [ Default ] */
mcm 1:8593e6fcf0c3 258 CONFIG_COMP_MODE_WINDOW_COMPARATOR = ( 1U << 4U ) /*!< Window comparator */
mcm 1:8593e6fcf0c3 259 } ADS111X_config_comp_mode_t;
mcm 1:8593e6fcf0c3 260
mcm 1:8593e6fcf0c3 261
mcm 1:8593e6fcf0c3 262 /* COMP_POL <3>
mcm 1:8593e6fcf0c3 263 * NOTE: Comparator polarity ( ADS1114 and ADS1115 only )
mcm 1:8593e6fcf0c3 264 */
mcm 1:8593e6fcf0c3 265 typedef enum {
mcm 1:8593e6fcf0c3 266 CONFIG_COMP_POL_MASK = ( 1U << 3U ), /*!< COMP_POL mask */
mcm 1:8593e6fcf0c3 267 CONFIG_COMP_POL_ACTIVE_LOW = ( 0U << 3U ), /*!< Active low [ Default ] */
mcm 1:8593e6fcf0c3 268 CONFIG_COMP_POL_ACTIVE_HIGH = ( 1U << 3U ) /*!< Active high */
mcm 1:8593e6fcf0c3 269 } ADS111X_config_comp_pol_t;
mcm 1:8593e6fcf0c3 270
mcm 1:8593e6fcf0c3 271
mcm 1:8593e6fcf0c3 272 /* COMP_LAT <2>
mcm 1:8593e6fcf0c3 273 * NOTE: Latching comparator ( ADS1114 and ADS1115 only )
mcm 1:8593e6fcf0c3 274 */
mcm 1:8593e6fcf0c3 275 typedef enum {
mcm 1:8593e6fcf0c3 276 CONFIG_COMP_LAT_MASK = ( 1U << 2U ), /*!< COMP_LAT mask */
mcm 1:8593e6fcf0c3 277 CONFIG_COMP_LAT_NONLATCHING_COMPARATOR = ( 0U << 2U ), /*!< Nonlatching comparator [ Default ] */
mcm 1:8593e6fcf0c3 278 CONFIG_COMP_LAT_LATCHING_COMPARATOR = ( 1U << 2U ) /*!< Latching comparator */
mcm 1:8593e6fcf0c3 279 } ADS111X_config_comp_lat_t;
mcm 1:8593e6fcf0c3 280
mcm 1:8593e6fcf0c3 281
mcm 1:8593e6fcf0c3 282 /* COMP_QUE <1:0>
mcm 1:8593e6fcf0c3 283 * NOTE: Comparator queue and disable ( ADS1114 and ADS1115 only )
mcm 1:8593e6fcf0c3 284 */
mcm 1:8593e6fcf0c3 285 typedef enum {
mcm 1:8593e6fcf0c3 286 CONFIG_COMP_QUE_MASK = ( 0b11 << 0U ), /*!< COMP_QUE mask */
mcm 1:8593e6fcf0c3 287 CONFIG_COMP_QUE_ASSERT_AFTER_ONE_CONVERSION = ( 0b00 << 0U ), /*!< Assert after one conversion */
mcm 1:8593e6fcf0c3 288 CONFIG_COMP_QUE_ASSERT_AFTER_TWO_CONVERSION = ( 0b01 << 0U ), /*!< Assert after two conversions */
mcm 1:8593e6fcf0c3 289 CONFIG_COMP_QUE_ASSERT_AFTER_FOUR_CONVERSION = ( 0b10 << 0U ), /*!< Assert after four conversions */
mcm 1:8593e6fcf0c3 290 CONFIG_COMP_QUE_DISABLED = ( 0b11 << 0U ) /*!< Disable comparator and set ALERT/RDY pin to high-impedance [ Default ] */
mcm 1:8593e6fcf0c3 291 } ADS111X_config_comp_que_t;
mcm 1:8593e6fcf0c3 292
mcm 1:8593e6fcf0c3 293
mcm 1:8593e6fcf0c3 294
mcm 1:8593e6fcf0c3 295 /**
mcm 1:8593e6fcf0c3 296 * @brief LO_THRESH REGISTER. ( Default: 0x8000 )
mcm 1:8593e6fcf0c3 297 */
mcm 1:8593e6fcf0c3 298 /* LO_THRESH <15:0>
mcm 1:8593e6fcf0c3 299 * NOTE: N/A.
mcm 1:8593e6fcf0c3 300 */
mcm 1:8593e6fcf0c3 301 typedef enum {
mcm 1:8593e6fcf0c3 302 LO_THRESH_MASK = 0xFFFF /*!< LO_THRESH mask */
mcm 1:8593e6fcf0c3 303 } ADS111X_lo_thresh_t;
mcm 1:8593e6fcf0c3 304
mcm 1:8593e6fcf0c3 305
mcm 1:8593e6fcf0c3 306
mcm 1:8593e6fcf0c3 307 /**
mcm 1:8593e6fcf0c3 308 * @brief HI_THRESH REGISTER. ( Default: 0x7FFF )
mcm 1:8593e6fcf0c3 309 */
mcm 1:8593e6fcf0c3 310 /* HI_THRESH <15:0>
mcm 1:8593e6fcf0c3 311 * NOTE: N/A.
mcm 1:8593e6fcf0c3 312 */
mcm 1:8593e6fcf0c3 313 typedef enum {
mcm 1:8593e6fcf0c3 314 HI_THRESH_MASK = 0xFFFF /*!< HI_THRESH mask */
mcm 1:8593e6fcf0c3 315 } ADS111X_hi_thresh_t;
mcm 1:8593e6fcf0c3 316
mcm 1:8593e6fcf0c3 317
mcm 1:8593e6fcf0c3 318
mcm 1:8593e6fcf0c3 319
mcm 1:8593e6fcf0c3 320
mcm 1:8593e6fcf0c3 321 #ifndef ADS111X_VECTOR_STRUCT_H
mcm 1:8593e6fcf0c3 322 #define ADS111X_VECTOR_STRUCT_H
mcm 1:8593e6fcf0c3 323 /* Configuration parameters */
mcm 1:8593e6fcf0c3 324 typedef struct {
mcm 1:8593e6fcf0c3 325 ADS111X_config_os_t os; /*!< Operational status */
mcm 1:8593e6fcf0c3 326 ADS111X_config_mux_t mux; /*!< Input multiplexer configuration (ADS1015 only) */
mcm 1:8593e6fcf0c3 327 ADS111X_config_pga_t pga; /*!< Programmable gain amplifier configuration (not ADS1013) */
mcm 1:8593e6fcf0c3 328 ADS111X_config_mode_t mode; /*!< Device operating mode */
mcm 1:8593e6fcf0c3 329 ADS111X_config_dr_t dr; /*!< Data rate */
mcm 1:8593e6fcf0c3 330 ADS111X_config_comp_mode_t comp_mode; /*!< Comparator mode (ADS1014 and ADS1015 only) */
mcm 1:8593e6fcf0c3 331 ADS111X_config_comp_pol_t comp_pol; /*!< Comparator polarity (ADS1014 and ADS1015 only) */
mcm 1:8593e6fcf0c3 332 ADS111X_config_comp_lat_t comp_lat; /*!< Latching comparator (ADS1014 and ADS1015 only) */
mcm 1:8593e6fcf0c3 333 ADS111X_config_comp_que_t comp_que; /*!< Comparator queue and disable (ADS1014 and ADS1015 only) */
mcm 1:8593e6fcf0c3 334 } ADS111X_config_t;
mcm 1:8593e6fcf0c3 335
mcm 1:8593e6fcf0c3 336
mcm 1:8593e6fcf0c3 337 /* Thresholds: High and low thresholds */
mcm 1:8593e6fcf0c3 338 typedef struct {
mcm 1:8593e6fcf0c3 339 int16_t lo_thresh; /*!< Low threshold value */
mcm 1:8593e6fcf0c3 340 int16_t hi_thresh; /*!< High threshold value */
mcm 1:8593e6fcf0c3 341 } ADS111X_thresh_t;
mcm 1:8593e6fcf0c3 342
mcm 1:8593e6fcf0c3 343
mcm 1:8593e6fcf0c3 344 /* Result Conversion: Raw value and conversion value */
mcm 1:8593e6fcf0c3 345 typedef struct {
mcm 1:8593e6fcf0c3 346 float conversion; /*!< Conversion value */
mcm 1:8593e6fcf0c3 347 int16_t raw_conversion; /*!< Raw conversion value */
mcm 1:8593e6fcf0c3 348 } ADS111X_conversion_t;
mcm 1:8593e6fcf0c3 349
mcm 1:8593e6fcf0c3 350
mcm 1:8593e6fcf0c3 351
mcm 1:8593e6fcf0c3 352 /* USER: User's global variables */
mcm 1:8593e6fcf0c3 353 typedef struct {
mcm 1:8593e6fcf0c3 354 /* Output */
mcm 1:8593e6fcf0c3 355 ADS111X_conversion_t conversion; /*!< Conversion values */
mcm 1:8593e6fcf0c3 356
mcm 1:8593e6fcf0c3 357 /* Configuration */
mcm 1:8593e6fcf0c3 358 ADS111X_config_t config; /*!< Configuration register */
mcm 1:8593e6fcf0c3 359
mcm 1:8593e6fcf0c3 360 /* Thresholds */
mcm 1:8593e6fcf0c3 361 ADS111X_thresh_t thresh; /*!< High/Low threshold values */
mcm 1:8593e6fcf0c3 362 } ADS111X_data_t;
mcm 1:8593e6fcf0c3 363 #endif
mcm 1:8593e6fcf0c3 364
mcm 1:8593e6fcf0c3 365
mcm 1:8593e6fcf0c3 366 /**
mcm 1:8593e6fcf0c3 367 * @brief INTERNAL CONSTANTS
mcm 1:8593e6fcf0c3 368 */
mcm 1:8593e6fcf0c3 369 typedef enum {
mcm 1:8593e6fcf0c3 370 ADS111X_SUCCESS = 0U, /*!< I2C communication success */
mcm 1:8593e6fcf0c3 371 ADS111X_FAILURE = 1U, /*!< I2C communication failure */
mcm 1:8593e6fcf0c3 372 ADS111X_DEVICE_NOT_SUPPORTED = 2U, /*!< Device not supported */
mcm 1:8593e6fcf0c3 373 ADS111X_VALUE_OUT_OF_RANGE = 3U, /*!< Value aout of range */
mcm 1:8593e6fcf0c3 374 ADS111X_DATA_CORRUPTED = 4U, /*!< D and lo/hi threshold data */
mcm 1:8593e6fcf0c3 375 I2C_SUCCESS = 0U /*!< I2C communication was fine */
mcm 1:8593e6fcf0c3 376 } ADS111X_status_t;
mcm 1:8593e6fcf0c3 377
mcm 1:8593e6fcf0c3 378
mcm 1:8593e6fcf0c3 379
mcm 1:8593e6fcf0c3 380
mcm 1:8593e6fcf0c3 381 /** Create an ADS111X object connected to the specified I2C pins.
mcm 1:8593e6fcf0c3 382 *
mcm 1:8593e6fcf0c3 383 * @param sda I2C data pin
mcm 1:8593e6fcf0c3 384 * @param scl I2C clock pin
mcm 1:8593e6fcf0c3 385 * @param addr I2C slave address
mcm 1:8593e6fcf0c3 386 * @param freq I2C frequency
mcm 1:8593e6fcf0c3 387 * @param device Device to use: ADS1113, ADS1114 or ADS1115
mcm 1:8593e6fcf0c3 388 */
mcm 1:8593e6fcf0c3 389 ADS111X ( PinName sda, PinName scl, uint32_t addr, uint32_t freq, ADS111X_device_t device );
mcm 1:8593e6fcf0c3 390
mcm 1:8593e6fcf0c3 391 /** Delete ADS111X object.
mcm 1:8593e6fcf0c3 392 */
mcm 1:8593e6fcf0c3 393 ~ADS111X();
mcm 1:8593e6fcf0c3 394
mcm 1:8593e6fcf0c3 395 /** It triggers a softreset.
mcm 1:8593e6fcf0c3 396 */
mcm 1:8593e6fcf0c3 397 ADS111X_status_t ADS111X_SoftReset ( void );
mcm 1:8593e6fcf0c3 398
mcm 1:8593e6fcf0c3 399 /** It gets the raw conversion value.
mcm 1:8593e6fcf0c3 400 */
mcm 1:8593e6fcf0c3 401 ADS111X_status_t ADS111X_GetRawConversion ( ADS111X_conversion_t* myRawD );
mcm 1:8593e6fcf0c3 402
mcm 1:8593e6fcf0c3 403 /** It gets the conversion value.
mcm 1:8593e6fcf0c3 404 */
mcm 1:8593e6fcf0c3 405 ADS111X_status_t ADS111X_GetConversion ( ADS111X_data_t* myD );
mcm 1:8593e6fcf0c3 406
mcm 1:8593e6fcf0c3 407 /** It starts a new single conversion.
mcm 1:8593e6fcf0c3 408 */
mcm 1:8593e6fcf0c3 409 ADS111X_status_t ADS111X_StartSingleConversion ( void );
mcm 1:8593e6fcf0c3 410
mcm 1:8593e6fcf0c3 411 /** It checks if the device is not currently performing a conversion.
mcm 1:8593e6fcf0c3 412 */
mcm 1:8593e6fcf0c3 413 ADS111X_status_t ADS111X_GetOS ( ADS111X_config_t* myADS111X );
mcm 1:8593e6fcf0c3 414
mcm 1:8593e6fcf0c3 415 /** It sets input multiplexer configuration ( ADS1015 only ).
mcm 1:8593e6fcf0c3 416 */
mcm 1:8593e6fcf0c3 417 ADS111X_status_t ADS111X_SetMux ( ADS111X_data_t myADS111X );
mcm 1:8593e6fcf0c3 418
mcm 1:8593e6fcf0c3 419 /** It gets input multiplexer configuration ( ADS1015 only ).
mcm 1:8593e6fcf0c3 420 */
mcm 1:8593e6fcf0c3 421 ADS111X_status_t ADS111X_GetMux ( ADS111X_data_t* myADS111X );
mcm 1:8593e6fcf0c3 422
mcm 1:8593e6fcf0c3 423 /** It sets programmable gain amplifier ( not ADS1013 ).
mcm 1:8593e6fcf0c3 424 */
mcm 1:8593e6fcf0c3 425 ADS111X_status_t ADS111X_SetGain ( ADS111X_data_t myPGA );
mcm 1:8593e6fcf0c3 426
mcm 1:8593e6fcf0c3 427 /** It gets programmable gain amplifier ( not ADS1013 ).
mcm 1:8593e6fcf0c3 428 */
mcm 1:8593e6fcf0c3 429 ADS111X_status_t ADS111X_GetGain ( ADS111X_data_t* myPGA );
mcm 1:8593e6fcf0c3 430
mcm 1:8593e6fcf0c3 431 /** It sets the device operating mode.
mcm 1:8593e6fcf0c3 432 */
mcm 1:8593e6fcf0c3 433 ADS111X_status_t ADS111X_SetMode ( ADS111X_config_t myMode );
mcm 1:8593e6fcf0c3 434
mcm 1:8593e6fcf0c3 435 /** It gets the device operating mode.
mcm 1:8593e6fcf0c3 436 */
mcm 1:8593e6fcf0c3 437 ADS111X_status_t ADS111X_GetMode ( ADS111X_config_t* myMode );
mcm 1:8593e6fcf0c3 438
mcm 1:8593e6fcf0c3 439 /** It sets the data rate.
mcm 1:8593e6fcf0c3 440 */
mcm 1:8593e6fcf0c3 441 ADS111X_status_t ADS111X_SetDataRate ( ADS111X_config_t myDR );
mcm 1:8593e6fcf0c3 442
mcm 1:8593e6fcf0c3 443 /** It gets the data rate.
mcm 1:8593e6fcf0c3 444 */
mcm 1:8593e6fcf0c3 445 ADS111X_status_t ADS111X_GetDataRate ( ADS111X_config_t* myDR );
mcm 1:8593e6fcf0c3 446
mcm 1:8593e6fcf0c3 447 /** It sets the comparator configuration.
mcm 1:8593e6fcf0c3 448 */
mcm 1:8593e6fcf0c3 449 ADS111X_status_t ADS111X_SetComparator ( ADS111X_data_t myCOMP );
mcm 1:8593e6fcf0c3 450
mcm 1:8593e6fcf0c3 451 /** It gets the comparator configuration.
mcm 1:8593e6fcf0c3 452 */
mcm 1:8593e6fcf0c3 453 ADS111X_status_t ADS111X_GetComparator ( ADS111X_data_t* myCOMP );
mcm 1:8593e6fcf0c3 454
mcm 1:8593e6fcf0c3 455 /** It sets the low threshold value.
mcm 1:8593e6fcf0c3 456 */
mcm 1:8593e6fcf0c3 457 ADS111X_status_t ADS111X_SetLowThresholdValue ( ADS111X_thresh_t myLoThres );
mcm 1:8593e6fcf0c3 458
mcm 1:8593e6fcf0c3 459 /** It gets the low threshold value.
mcm 1:8593e6fcf0c3 460 */
mcm 1:8593e6fcf0c3 461 ADS111X_status_t ADS111X_GetLowThresholdValue ( ADS111X_thresh_t* myLoThres );
mcm 1:8593e6fcf0c3 462
mcm 1:8593e6fcf0c3 463 /** It sets the high threshold value.
mcm 1:8593e6fcf0c3 464 */
mcm 1:8593e6fcf0c3 465 ADS111X_status_t ADS111X_SetHighThresholdValue ( ADS111X_thresh_t myHiThres );
mcm 1:8593e6fcf0c3 466
mcm 1:8593e6fcf0c3 467 /** It gets the high threshold value.
mcm 1:8593e6fcf0c3 468 */
mcm 1:8593e6fcf0c3 469 ADS111X_status_t ADS111X_GetHighThresholdValue ( ADS111X_thresh_t* myHiThres );
mcm 1:8593e6fcf0c3 470
mcm 1:8593e6fcf0c3 471
mcm 1:8593e6fcf0c3 472
mcm 1:8593e6fcf0c3 473 private:
mcm 1:8593e6fcf0c3 474 I2C _i2c;
mcm 1:8593e6fcf0c3 475 uint32_t _ADS111X_Addr;
mcm 1:8593e6fcf0c3 476 ADS111X_device_t _device;
mcm 1:8593e6fcf0c3 477 };
mcm 1:8593e6fcf0c3 478
mcm 1:8593e6fcf0c3 479 #endif