Ultra-Small, Low-Power, I2C-Compatible, 860-SPS, 16-Bit ADCs With Internal Reference, Oscillator, and Programmable Comparator
ADS111X.cpp@2:aecccd48773a, 2020-06-18 (annotated)
- Committer:
- mcm
- Date:
- Thu Jun 18 16:11:01 2020 +0000
- Revision:
- 2:aecccd48773a
- Parent:
- 0:9dd3592a3761
- Child:
- 3:4a9619b441f0
The functions file is ready for review.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mcm | 2:aecccd48773a | 1 | /** |
mcm | 2:aecccd48773a | 2 | * @brief ADS111X.cpp |
mcm | 2:aecccd48773a | 3 | * @details Ultra-Small, Low-Power, I2C-Compatible, 860-SPS, 16-Bit ADCs With Internal Reference, Oscillator, and Programmable Comparator. |
mcm | 2:aecccd48773a | 4 | * Function file. |
mcm | 2:aecccd48773a | 5 | * |
mcm | 2:aecccd48773a | 6 | * |
mcm | 2:aecccd48773a | 7 | * @return N/A |
mcm | 2:aecccd48773a | 8 | * |
mcm | 2:aecccd48773a | 9 | * @author Manuel Caballero |
mcm | 2:aecccd48773a | 10 | * @date 18/June/2020 |
mcm | 2:aecccd48773a | 11 | * @version 18/June/2020 The ORIGIN |
mcm | 2:aecccd48773a | 12 | * @pre N/A. |
mcm | 2:aecccd48773a | 13 | * @warning N/A |
mcm | 2:aecccd48773a | 14 | * @pre This code belongs to AqueronteBlog ( http://unbarquero.blogspot.com ). |
mcm | 2:aecccd48773a | 15 | */ |
mcm | 2:aecccd48773a | 16 | |
mcm | 2:aecccd48773a | 17 | #include "ADS111X.h" |
mcm | 2:aecccd48773a | 18 | |
mcm | 2:aecccd48773a | 19 | |
mcm | 2:aecccd48773a | 20 | ADS111X::ADS111X ( PinName sda, PinName scl, uint32_t addr, uint32_t freq, ADS111X_device_t device ) |
mcm | 2:aecccd48773a | 21 | : _i2c ( sda, scl ) |
mcm | 2:aecccd48773a | 22 | , _ADS111X_Addr ( addr ) |
mcm | 2:aecccd48773a | 23 | , _device ( device ) |
mcm | 2:aecccd48773a | 24 | { |
mcm | 2:aecccd48773a | 25 | _i2c.frequency( freq ); |
mcm | 2:aecccd48773a | 26 | } |
mcm | 2:aecccd48773a | 27 | |
mcm | 2:aecccd48773a | 28 | |
mcm | 2:aecccd48773a | 29 | ADS111X::~ADS111X() |
mcm | 2:aecccd48773a | 30 | { |
mcm | 2:aecccd48773a | 31 | } |
mcm | 2:aecccd48773a | 32 | |
mcm | 2:aecccd48773a | 33 | |
mcm | 2:aecccd48773a | 34 | /** |
mcm | 2:aecccd48773a | 35 | * @brief ADS111X_StartSingleConversion ( void ); |
mcm | 2:aecccd48773a | 36 | * |
mcm | 2:aecccd48773a | 37 | * @details It starts a new single conversion. |
mcm | 2:aecccd48773a | 38 | * |
mcm | 2:aecccd48773a | 39 | * @param[in] N/A. |
mcm | 2:aecccd48773a | 40 | * |
mcm | 2:aecccd48773a | 41 | * @param[out] N/A. |
mcm | 2:aecccd48773a | 42 | * |
mcm | 2:aecccd48773a | 43 | * |
mcm | 2:aecccd48773a | 44 | * @return Status of ADS111X_StartSingleConversion. |
mcm | 2:aecccd48773a | 45 | * |
mcm | 2:aecccd48773a | 46 | * |
mcm | 2:aecccd48773a | 47 | * @author Manuel Caballero |
mcm | 2:aecccd48773a | 48 | * @date 18/June/2020 |
mcm | 2:aecccd48773a | 49 | * @version 18/June/2020 The ORIGIN |
mcm | 2:aecccd48773a | 50 | * @pre This function can only be used when in power-down state and has no effect |
mcm | 2:aecccd48773a | 51 | * when a conversion is ongoing. |
mcm | 2:aecccd48773a | 52 | * @warning N/A. |
mcm | 2:aecccd48773a | 53 | */ |
mcm | 2:aecccd48773a | 54 | ADS111X::ADS111X_status_t ADS111X::ADS111X_StartSingleConversion ( void ) |
mcm | 2:aecccd48773a | 55 | { |
mcm | 2:aecccd48773a | 56 | char cmd[3] = { 0U }; |
mcm | 2:aecccd48773a | 57 | uint16_t myConfig = 0U; |
mcm | 2:aecccd48773a | 58 | uint32_t aux = I2C_SUCCESS; |
mcm | 2:aecccd48773a | 59 | |
mcm | 2:aecccd48773a | 60 | /* Read the register to mask it */ |
mcm | 2:aecccd48773a | 61 | cmd[0] = ADS111X_CONFIG; |
mcm | 2:aecccd48773a | 62 | aux |= _i2c.write ( _ADS111X_Addr, &cmd[0], 1U, true ); |
mcm | 2:aecccd48773a | 63 | aux |= _i2c.read ( _ADS111X_Addr, &cmd[1], 2U ); |
mcm | 2:aecccd48773a | 64 | |
mcm | 2:aecccd48773a | 65 | /* Mask it and update the register */ |
mcm | 2:aecccd48773a | 66 | myConfig = cmd[1]; |
mcm | 2:aecccd48773a | 67 | myConfig <<= 8U; |
mcm | 2:aecccd48773a | 68 | myConfig |= cmd[2]; |
mcm | 2:aecccd48773a | 69 | |
mcm | 2:aecccd48773a | 70 | myConfig |= CONFIG_OS_BUSY; |
mcm | 2:aecccd48773a | 71 | cmd[1] = (char)( myConfig >> 8U ); |
mcm | 2:aecccd48773a | 72 | cmd[2] = (char)( myConfig ); |
mcm | 2:aecccd48773a | 73 | aux |= _i2c.write ( _ADS111X_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false ); |
mcm | 2:aecccd48773a | 74 | |
mcm | 2:aecccd48773a | 75 | |
mcm | 2:aecccd48773a | 76 | |
mcm | 2:aecccd48773a | 77 | if ( aux == I2C_SUCCESS ) |
mcm | 2:aecccd48773a | 78 | { |
mcm | 2:aecccd48773a | 79 | return ADS111X_SUCCESS; |
mcm | 2:aecccd48773a | 80 | } |
mcm | 2:aecccd48773a | 81 | else |
mcm | 2:aecccd48773a | 82 | { |
mcm | 2:aecccd48773a | 83 | return ADS111X_FAILURE; |
mcm | 2:aecccd48773a | 84 | } |
mcm | 2:aecccd48773a | 85 | } |
mcm | 2:aecccd48773a | 86 | |
mcm | 2:aecccd48773a | 87 | |
mcm | 2:aecccd48773a | 88 | |
mcm | 2:aecccd48773a | 89 | /** |
mcm | 2:aecccd48773a | 90 | * @brief ADS111X_GetOS ( ADS111X_config_t* ); |
mcm | 2:aecccd48773a | 91 | * |
mcm | 2:aecccd48773a | 92 | * @details It checks if the device is not currently performing a conversion. |
mcm | 2:aecccd48773a | 93 | * |
mcm | 2:aecccd48773a | 94 | * @param[in] N/A. |
mcm | 2:aecccd48773a | 95 | * |
mcm | 2:aecccd48773a | 96 | * @param[out] myADS111X: Operational status flag. |
mcm | 2:aecccd48773a | 97 | * |
mcm | 2:aecccd48773a | 98 | * |
mcm | 2:aecccd48773a | 99 | * @return Status of ADS111X_GetOS. |
mcm | 2:aecccd48773a | 100 | * |
mcm | 2:aecccd48773a | 101 | * |
mcm | 2:aecccd48773a | 102 | * @author Manuel Caballero |
mcm | 2:aecccd48773a | 103 | * @date 18/June/2020 |
mcm | 2:aecccd48773a | 104 | * @version 18/June/2020 The ORIGIN |
mcm | 2:aecccd48773a | 105 | * @pre N/A |
mcm | 2:aecccd48773a | 106 | * @warning N/A. |
mcm | 2:aecccd48773a | 107 | */ |
mcm | 2:aecccd48773a | 108 | ADS111X::ADS111X_status_t ADS111X::ADS111X_GetOS ( ADS111X_config_t* myADS111X ) |
mcm | 2:aecccd48773a | 109 | { |
mcm | 2:aecccd48773a | 110 | char cmd[2] = { 0U }; |
mcm | 2:aecccd48773a | 111 | uint16_t myConfig = 0U; |
mcm | 2:aecccd48773a | 112 | uint32_t aux = I2C_SUCCESS; |
mcm | 2:aecccd48773a | 113 | |
mcm | 2:aecccd48773a | 114 | /* Read the register to mask it */ |
mcm | 2:aecccd48773a | 115 | cmd[0] = ADS111X_CONFIG; |
mcm | 2:aecccd48773a | 116 | aux |= _i2c.write ( _ADS111X_Addr, &cmd[0], 1U, true ); |
mcm | 2:aecccd48773a | 117 | aux |= _i2c.read ( _ADS111X_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ) ); |
mcm | 2:aecccd48773a | 118 | |
mcm | 2:aecccd48773a | 119 | /* Parse it */ |
mcm | 2:aecccd48773a | 120 | myConfig = cmd[0]; |
mcm | 2:aecccd48773a | 121 | myConfig <<= 8U; |
mcm | 2:aecccd48773a | 122 | myConfig |= cmd[1]; |
mcm | 2:aecccd48773a | 123 | myADS111X->os = (ADS111X_config_os_t)( myConfig & CONFIG_OS_MASK ); |
mcm | 2:aecccd48773a | 124 | |
mcm | 2:aecccd48773a | 125 | |
mcm | 2:aecccd48773a | 126 | |
mcm | 2:aecccd48773a | 127 | if ( aux == I2C_SUCCESS ) |
mcm | 2:aecccd48773a | 128 | { |
mcm | 2:aecccd48773a | 129 | return ADS111X_SUCCESS; |
mcm | 2:aecccd48773a | 130 | } |
mcm | 2:aecccd48773a | 131 | else |
mcm | 2:aecccd48773a | 132 | { |
mcm | 2:aecccd48773a | 133 | return ADS111X_FAILURE; |
mcm | 2:aecccd48773a | 134 | } |
mcm | 2:aecccd48773a | 135 | } |
mcm | 2:aecccd48773a | 136 | |
mcm | 2:aecccd48773a | 137 | |
mcm | 2:aecccd48773a | 138 | |
mcm | 2:aecccd48773a | 139 | /** |
mcm | 2:aecccd48773a | 140 | * @brief ADS111X_SetMux ( ADS111X_data_t ); |
mcm | 2:aecccd48773a | 141 | * |
mcm | 2:aecccd48773a | 142 | * @details It sets input multiplexer configuration. |
mcm | 2:aecccd48773a | 143 | * |
mcm | 2:aecccd48773a | 144 | * @param[in] myADS111X: Input multiplexer configuration. |
mcm | 2:aecccd48773a | 145 | * |
mcm | 2:aecccd48773a | 146 | * @param[out] N/A. |
mcm | 2:aecccd48773a | 147 | * |
mcm | 2:aecccd48773a | 148 | * |
mcm | 2:aecccd48773a | 149 | * @return Status of ADS111X_SetMux. |
mcm | 2:aecccd48773a | 150 | * |
mcm | 2:aecccd48773a | 151 | * |
mcm | 2:aecccd48773a | 152 | * @author Manuel Caballero |
mcm | 2:aecccd48773a | 153 | * @date 18/June/2020 |
mcm | 2:aecccd48773a | 154 | * @version 18/June/2020 The ORIGIN |
mcm | 2:aecccd48773a | 155 | * @pre N/A |
mcm | 2:aecccd48773a | 156 | * @warning ADS1115 only. |
mcm | 2:aecccd48773a | 157 | */ |
mcm | 2:aecccd48773a | 158 | ADS111X::ADS111X_status_t ADS111X::ADS111X_SetMux ( ADS111X_data_t myADS111X ) |
mcm | 2:aecccd48773a | 159 | { |
mcm | 2:aecccd48773a | 160 | char cmd[3] = { 0U }; |
mcm | 2:aecccd48773a | 161 | uint16_t myConfig = 0U; |
mcm | 2:aecccd48773a | 162 | uint32_t aux = I2C_SUCCESS; |
mcm | 2:aecccd48773a | 163 | |
mcm | 2:aecccd48773a | 164 | /* Only ADS1015 supports this functionality */ |
mcm | 2:aecccd48773a | 165 | if ( myADS111X.device == DEVICE_ADS1115 ) |
mcm | 2:aecccd48773a | 166 | { |
mcm | 2:aecccd48773a | 167 | /* Read the register to mask it */ |
mcm | 2:aecccd48773a | 168 | cmd[0] = ADS111X_CONFIG; |
mcm | 2:aecccd48773a | 169 | aux |= _i2c.write ( _ADS111X_Addr, &cmd[0], 1U, true ); |
mcm | 2:aecccd48773a | 170 | aux |= _i2c.read ( _ADS111X_Addr, &cmd[1], 2U ); |
mcm | 2:aecccd48773a | 171 | |
mcm | 2:aecccd48773a | 172 | /* Mask it and update the register */ |
mcm | 2:aecccd48773a | 173 | myConfig = cmd[1]; |
mcm | 2:aecccd48773a | 174 | myConfig <<= 8U; |
mcm | 2:aecccd48773a | 175 | myConfig |= cmd[2]; |
mcm | 2:aecccd48773a | 176 | |
mcm | 2:aecccd48773a | 177 | myConfig &= ~CONFIG_MUX_MASK; |
mcm | 2:aecccd48773a | 178 | myConfig |= myADS111X.config.mux; |
mcm | 2:aecccd48773a | 179 | cmd[1] = (char)( myConfig >> 8U ); |
mcm | 2:aecccd48773a | 180 | cmd[2] = (char)( myConfig ); |
mcm | 2:aecccd48773a | 181 | aux |= _i2c.write ( _ADS111X_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false ); |
mcm | 2:aecccd48773a | 182 | } |
mcm | 2:aecccd48773a | 183 | else |
mcm | 2:aecccd48773a | 184 | { |
mcm | 2:aecccd48773a | 185 | return ADS111X_DEVICE_NOT_SUPPORTED; |
mcm | 2:aecccd48773a | 186 | } |
mcm | 2:aecccd48773a | 187 | |
mcm | 2:aecccd48773a | 188 | |
mcm | 2:aecccd48773a | 189 | if ( aux == I2C_SUCCESS ) |
mcm | 2:aecccd48773a | 190 | { |
mcm | 2:aecccd48773a | 191 | return ADS111X_SUCCESS; |
mcm | 2:aecccd48773a | 192 | } |
mcm | 2:aecccd48773a | 193 | else |
mcm | 2:aecccd48773a | 194 | { |
mcm | 2:aecccd48773a | 195 | return ADS111X_FAILURE; |
mcm | 2:aecccd48773a | 196 | } |
mcm | 2:aecccd48773a | 197 | } |
mcm | 2:aecccd48773a | 198 | |
mcm | 2:aecccd48773a | 199 | |
mcm | 2:aecccd48773a | 200 | |
mcm | 2:aecccd48773a | 201 | /** |
mcm | 2:aecccd48773a | 202 | * @brief ADS111X_GetMux ( ADS111X_data_t* ); |
mcm | 2:aecccd48773a | 203 | * |
mcm | 2:aecccd48773a | 204 | * @details It gets input multiplexer configuration. |
mcm | 2:aecccd48773a | 205 | * |
mcm | 2:aecccd48773a | 206 | * @param[in] N/A. |
mcm | 2:aecccd48773a | 207 | * |
mcm | 2:aecccd48773a | 208 | * @param[out] myADS111X: Input multiplexer configuration.. |
mcm | 2:aecccd48773a | 209 | * |
mcm | 2:aecccd48773a | 210 | * |
mcm | 2:aecccd48773a | 211 | * @return Status of ADS111X_GetMux. |
mcm | 2:aecccd48773a | 212 | * |
mcm | 2:aecccd48773a | 213 | * |
mcm | 2:aecccd48773a | 214 | * @author Manuel Caballero |
mcm | 2:aecccd48773a | 215 | * @date 18/June/2020 |
mcm | 2:aecccd48773a | 216 | * @version 18/June/2020 The ORIGIN |
mcm | 2:aecccd48773a | 217 | * @pre N/A |
mcm | 2:aecccd48773a | 218 | * @warning ADS1015 only. |
mcm | 2:aecccd48773a | 219 | */ |
mcm | 2:aecccd48773a | 220 | ADS111X::ADS111X_status_t ADS111X::ADS111X_GetMux ( ADS111X_data_t* myADS111X ) |
mcm | 2:aecccd48773a | 221 | { |
mcm | 2:aecccd48773a | 222 | char cmd[2] = { 0U }; |
mcm | 2:aecccd48773a | 223 | uint16_t myConfig = 0U; |
mcm | 2:aecccd48773a | 224 | uint32_t aux = I2C_SUCCESS; |
mcm | 2:aecccd48773a | 225 | |
mcm | 2:aecccd48773a | 226 | /* Only ADS1015 supports this functionality */ |
mcm | 2:aecccd48773a | 227 | if ( myADS111X->device == DEVICE_ADS1115 ) |
mcm | 2:aecccd48773a | 228 | { |
mcm | 2:aecccd48773a | 229 | /* Read the register to mask it */ |
mcm | 2:aecccd48773a | 230 | cmd[0] = ADS111X_CONFIG; |
mcm | 2:aecccd48773a | 231 | aux |= _i2c.write ( _ADS111X_Addr, &cmd[0], 1U, true ); |
mcm | 2:aecccd48773a | 232 | aux |= _i2c.read ( _ADS111X_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ) ); |
mcm | 2:aecccd48773a | 233 | |
mcm | 2:aecccd48773a | 234 | /* Parse the data */ |
mcm | 2:aecccd48773a | 235 | myConfig = cmd[0]; |
mcm | 2:aecccd48773a | 236 | myConfig <<= 8U; |
mcm | 2:aecccd48773a | 237 | myConfig |= cmd[1]; |
mcm | 2:aecccd48773a | 238 | myADS111X->config.mux = (ADS111X_config_mux_t)( myConfig & CONFIG_MUX_MASK ); |
mcm | 2:aecccd48773a | 239 | } |
mcm | 2:aecccd48773a | 240 | else |
mcm | 2:aecccd48773a | 241 | { |
mcm | 2:aecccd48773a | 242 | return ADS111X_DEVICE_NOT_SUPPORTED; |
mcm | 2:aecccd48773a | 243 | } |
mcm | 2:aecccd48773a | 244 | |
mcm | 2:aecccd48773a | 245 | |
mcm | 2:aecccd48773a | 246 | if ( aux == I2C_SUCCESS ) |
mcm | 2:aecccd48773a | 247 | { |
mcm | 2:aecccd48773a | 248 | return ADS111X_SUCCESS; |
mcm | 2:aecccd48773a | 249 | } |
mcm | 2:aecccd48773a | 250 | else |
mcm | 2:aecccd48773a | 251 | { |
mcm | 2:aecccd48773a | 252 | return ADS111X_FAILURE; |
mcm | 2:aecccd48773a | 253 | } |
mcm | 2:aecccd48773a | 254 | } |
mcm | 2:aecccd48773a | 255 | |
mcm | 2:aecccd48773a | 256 | |
mcm | 2:aecccd48773a | 257 | |
mcm | 2:aecccd48773a | 258 | /** |
mcm | 2:aecccd48773a | 259 | * @brief ADS111X_SetGain ( ADS111X_data_t ); |
mcm | 2:aecccd48773a | 260 | * |
mcm | 2:aecccd48773a | 261 | * @details It sets programmable gain amplifier. |
mcm | 2:aecccd48773a | 262 | * |
mcm | 2:aecccd48773a | 263 | * @param[in] myPGA: Programmable gain. |
mcm | 2:aecccd48773a | 264 | * |
mcm | 2:aecccd48773a | 265 | * @param[out] N/A. |
mcm | 2:aecccd48773a | 266 | * |
mcm | 2:aecccd48773a | 267 | * |
mcm | 2:aecccd48773a | 268 | * @return Status of ADS111X_SetGain. |
mcm | 2:aecccd48773a | 269 | * |
mcm | 2:aecccd48773a | 270 | * |
mcm | 2:aecccd48773a | 271 | * @author Manuel Caballero |
mcm | 2:aecccd48773a | 272 | * @date 18/June/2020 |
mcm | 2:aecccd48773a | 273 | * @version 18/June/2020 The ORIGIN |
mcm | 2:aecccd48773a | 274 | * @pre N/A |
mcm | 2:aecccd48773a | 275 | * @warning Not ADS1113. |
mcm | 2:aecccd48773a | 276 | */ |
mcm | 2:aecccd48773a | 277 | ADS111X::ADS111X_status_t ADS111X::ADS111X_SetGain ( ADS111X_data_t myPGA ) |
mcm | 2:aecccd48773a | 278 | { |
mcm | 2:aecccd48773a | 279 | char cmd[3] = { 0U }; |
mcm | 2:aecccd48773a | 280 | uint16_t myConfig = 0U; |
mcm | 2:aecccd48773a | 281 | uint32_t aux = I2C_SUCCESS; |
mcm | 2:aecccd48773a | 282 | |
mcm | 2:aecccd48773a | 283 | /* Only ADS1115/ADS1114 supports this functionality */ |
mcm | 2:aecccd48773a | 284 | if ( myPGA.device != DEVICE_ADS1113 ) |
mcm | 2:aecccd48773a | 285 | { |
mcm | 2:aecccd48773a | 286 | /* Read the register to mask it */ |
mcm | 2:aecccd48773a | 287 | cmd[0] = ADS111X_CONFIG; |
mcm | 2:aecccd48773a | 288 | aux |= _i2c.write ( _ADS111X_Addr, &cmd[0], 1U, true ); |
mcm | 2:aecccd48773a | 289 | aux |= _i2c.read ( _ADS111X_Addr, &cmd[1], 2U ); |
mcm | 2:aecccd48773a | 290 | |
mcm | 2:aecccd48773a | 291 | /* Mask it and update the register */ |
mcm | 2:aecccd48773a | 292 | myConfig = cmd[1]; |
mcm | 2:aecccd48773a | 293 | myConfig <<= 8U; |
mcm | 2:aecccd48773a | 294 | myConfig |= cmd[2]; |
mcm | 2:aecccd48773a | 295 | |
mcm | 2:aecccd48773a | 296 | myConfig &= ~CONFIG_PGA_MASK; |
mcm | 2:aecccd48773a | 297 | myConfig |= myPGA.config.pga; |
mcm | 2:aecccd48773a | 298 | cmd[1] = (char)( myConfig >> 8U ); |
mcm | 2:aecccd48773a | 299 | cmd[2] = (char)( myConfig ); |
mcm | 2:aecccd48773a | 300 | aux |= _i2c.write ( _ADS111X_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false ); |
mcm | 2:aecccd48773a | 301 | } |
mcm | 2:aecccd48773a | 302 | else |
mcm | 2:aecccd48773a | 303 | { |
mcm | 2:aecccd48773a | 304 | return ADS111X_DEVICE_NOT_SUPPORTED; |
mcm | 2:aecccd48773a | 305 | } |
mcm | 2:aecccd48773a | 306 | |
mcm | 2:aecccd48773a | 307 | |
mcm | 2:aecccd48773a | 308 | if ( aux == I2C_SUCCESS ) |
mcm | 2:aecccd48773a | 309 | { |
mcm | 2:aecccd48773a | 310 | return ADS111X_SUCCESS; |
mcm | 2:aecccd48773a | 311 | } |
mcm | 2:aecccd48773a | 312 | else |
mcm | 2:aecccd48773a | 313 | { |
mcm | 2:aecccd48773a | 314 | return ADS111X_FAILURE; |
mcm | 2:aecccd48773a | 315 | } |
mcm | 2:aecccd48773a | 316 | } |
mcm | 2:aecccd48773a | 317 | |
mcm | 2:aecccd48773a | 318 | |
mcm | 2:aecccd48773a | 319 | |
mcm | 2:aecccd48773a | 320 | /** |
mcm | 2:aecccd48773a | 321 | * @brief ADS111X_GetGain ( ADS111X_data_t* ); |
mcm | 2:aecccd48773a | 322 | * |
mcm | 2:aecccd48773a | 323 | * @details It gets programmable gain amplifier. |
mcm | 2:aecccd48773a | 324 | * |
mcm | 2:aecccd48773a | 325 | * @param[in] N/A. |
mcm | 2:aecccd48773a | 326 | * |
mcm | 2:aecccd48773a | 327 | * @param[out] myPGA: Programmable gain. |
mcm | 2:aecccd48773a | 328 | * |
mcm | 2:aecccd48773a | 329 | * |
mcm | 2:aecccd48773a | 330 | * @return Status of ADS111X_GetGain. |
mcm | 2:aecccd48773a | 331 | * |
mcm | 2:aecccd48773a | 332 | * |
mcm | 2:aecccd48773a | 333 | * @author Manuel Caballero |
mcm | 2:aecccd48773a | 334 | * @date 18/June/2020 |
mcm | 2:aecccd48773a | 335 | * @version 18/June/2020 The ORIGIN |
mcm | 2:aecccd48773a | 336 | * @pre N/A |
mcm | 2:aecccd48773a | 337 | * @warning Not ADS1113. |
mcm | 2:aecccd48773a | 338 | */ |
mcm | 2:aecccd48773a | 339 | ADS111X::ADS111X_status_t ADS111X::ADS111X_GetGain ( ADS111X_data_t* myPGA ) |
mcm | 2:aecccd48773a | 340 | { |
mcm | 2:aecccd48773a | 341 | char cmd[2] = { 0U }; |
mcm | 2:aecccd48773a | 342 | uint16_t myConfig = 0U; |
mcm | 2:aecccd48773a | 343 | uint32_t aux = I2C_SUCCESS; |
mcm | 2:aecccd48773a | 344 | |
mcm | 2:aecccd48773a | 345 | /* Only ADS1115/ADS1114 supports this functionality */ |
mcm | 2:aecccd48773a | 346 | if ( myPGA->device != DEVICE_ADS1113 ) |
mcm | 2:aecccd48773a | 347 | { |
mcm | 2:aecccd48773a | 348 | /* Read the register to mask it */ |
mcm | 2:aecccd48773a | 349 | cmd[0] = ADS111X_CONFIG; |
mcm | 2:aecccd48773a | 350 | aux |= _i2c.write ( _ADS111X_Addr, &cmd[0], 1U, true ); |
mcm | 2:aecccd48773a | 351 | aux |= _i2c.read ( _ADS111X_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ) ); |
mcm | 2:aecccd48773a | 352 | |
mcm | 2:aecccd48773a | 353 | /* Parse the data */ |
mcm | 2:aecccd48773a | 354 | myConfig = cmd[0]; |
mcm | 2:aecccd48773a | 355 | myConfig <<= 8U; |
mcm | 2:aecccd48773a | 356 | myConfig |= cmd[1]; |
mcm | 2:aecccd48773a | 357 | myPGA->config.pga = (ADS111X_config_pga_t)( myConfig & CONFIG_PGA_MASK ); |
mcm | 2:aecccd48773a | 358 | } |
mcm | 2:aecccd48773a | 359 | else |
mcm | 2:aecccd48773a | 360 | { |
mcm | 2:aecccd48773a | 361 | return ADS111X_DEVICE_NOT_SUPPORTED; |
mcm | 2:aecccd48773a | 362 | } |
mcm | 2:aecccd48773a | 363 | |
mcm | 2:aecccd48773a | 364 | |
mcm | 2:aecccd48773a | 365 | if ( aux == I2C_SUCCESS ) |
mcm | 2:aecccd48773a | 366 | { |
mcm | 2:aecccd48773a | 367 | return ADS111X_SUCCESS; |
mcm | 2:aecccd48773a | 368 | } |
mcm | 2:aecccd48773a | 369 | else |
mcm | 2:aecccd48773a | 370 | { |
mcm | 2:aecccd48773a | 371 | return ADS111X_FAILURE; |
mcm | 2:aecccd48773a | 372 | } |
mcm | 2:aecccd48773a | 373 | } |
mcm | 2:aecccd48773a | 374 | |
mcm | 2:aecccd48773a | 375 | |
mcm | 2:aecccd48773a | 376 | |
mcm | 2:aecccd48773a | 377 | /** |
mcm | 2:aecccd48773a | 378 | * @brief ADS111X_SetMode ( ADS111X_config_t ); |
mcm | 2:aecccd48773a | 379 | * |
mcm | 2:aecccd48773a | 380 | * @details It sets the device operating mode. |
mcm | 2:aecccd48773a | 381 | * |
mcm | 2:aecccd48773a | 382 | * @param[in] myMode: Continuous/Single-shot mode conversion. |
mcm | 2:aecccd48773a | 383 | * |
mcm | 2:aecccd48773a | 384 | * @param[out] N/A. |
mcm | 2:aecccd48773a | 385 | * |
mcm | 2:aecccd48773a | 386 | * |
mcm | 2:aecccd48773a | 387 | * @return Status of ADS111X_SetMode. |
mcm | 2:aecccd48773a | 388 | * |
mcm | 2:aecccd48773a | 389 | * |
mcm | 2:aecccd48773a | 390 | * @author Manuel Caballero |
mcm | 2:aecccd48773a | 391 | * @date 18/June/2020 |
mcm | 2:aecccd48773a | 392 | * @version 18/June/2020 The ORIGIN |
mcm | 2:aecccd48773a | 393 | * @pre N/A |
mcm | 2:aecccd48773a | 394 | * @warning N/A. |
mcm | 2:aecccd48773a | 395 | */ |
mcm | 2:aecccd48773a | 396 | ADS111X::ADS111X_status_t ADS111X::ADS111X_SetMode ( ADS111X_config_t myMode ) |
mcm | 2:aecccd48773a | 397 | { |
mcm | 2:aecccd48773a | 398 | char cmd[3] = { 0U }; |
mcm | 2:aecccd48773a | 399 | uint16_t myConfig = 0U; |
mcm | 2:aecccd48773a | 400 | uint32_t aux = I2C_SUCCESS; |
mcm | 2:aecccd48773a | 401 | |
mcm | 2:aecccd48773a | 402 | /* Read the register to mask it */ |
mcm | 2:aecccd48773a | 403 | cmd[0] = ADS111X_CONFIG; |
mcm | 2:aecccd48773a | 404 | aux |= _i2c.write ( _ADS111X_Addr, &cmd[0], 1U, true ); |
mcm | 2:aecccd48773a | 405 | aux |= _i2c.read ( _ADS111X_Addr, &cmd[1], 2U ); |
mcm | 2:aecccd48773a | 406 | |
mcm | 2:aecccd48773a | 407 | /* Mask it and update the register */ |
mcm | 2:aecccd48773a | 408 | myConfig = cmd[1]; |
mcm | 2:aecccd48773a | 409 | myConfig <<= 8U; |
mcm | 2:aecccd48773a | 410 | myConfig |= cmd[2]; |
mcm | 2:aecccd48773a | 411 | |
mcm | 2:aecccd48773a | 412 | myConfig &= ~CONFIG_MODE_MASK; |
mcm | 2:aecccd48773a | 413 | myConfig |= myMode.mode; |
mcm | 2:aecccd48773a | 414 | cmd[1] = (char)( myConfig >> 8U ); |
mcm | 2:aecccd48773a | 415 | cmd[2] = (char)( myConfig ); |
mcm | 2:aecccd48773a | 416 | aux |= _i2c.write ( _ADS111X_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false ); |
mcm | 2:aecccd48773a | 417 | |
mcm | 2:aecccd48773a | 418 | |
mcm | 2:aecccd48773a | 419 | |
mcm | 2:aecccd48773a | 420 | if ( aux == I2C_SUCCESS ) |
mcm | 2:aecccd48773a | 421 | { |
mcm | 2:aecccd48773a | 422 | return ADS111X_SUCCESS; |
mcm | 2:aecccd48773a | 423 | } |
mcm | 2:aecccd48773a | 424 | else |
mcm | 2:aecccd48773a | 425 | { |
mcm | 2:aecccd48773a | 426 | return ADS111X_FAILURE; |
mcm | 2:aecccd48773a | 427 | } |
mcm | 2:aecccd48773a | 428 | } |
mcm | 2:aecccd48773a | 429 | |
mcm | 2:aecccd48773a | 430 | |
mcm | 2:aecccd48773a | 431 | |
mcm | 2:aecccd48773a | 432 | /** |
mcm | 2:aecccd48773a | 433 | * @brief ADS111X_GetMode ( ADS111X_config_t* ); |
mcm | 2:aecccd48773a | 434 | * |
mcm | 2:aecccd48773a | 435 | * @details It gets the device operating mode. |
mcm | 2:aecccd48773a | 436 | * |
mcm | 2:aecccd48773a | 437 | * @param[in] N/A |
mcm | 2:aecccd48773a | 438 | * |
mcm | 2:aecccd48773a | 439 | * @param[out] myMode: Continuous/Single-shot mode conversion. |
mcm | 2:aecccd48773a | 440 | * |
mcm | 2:aecccd48773a | 441 | * |
mcm | 2:aecccd48773a | 442 | * @return Status of ADS111X_GetMode. |
mcm | 2:aecccd48773a | 443 | * |
mcm | 2:aecccd48773a | 444 | * |
mcm | 2:aecccd48773a | 445 | * @author Manuel Caballero |
mcm | 2:aecccd48773a | 446 | * @date 18/June/2020 |
mcm | 2:aecccd48773a | 447 | * @version 18/June/2020 The ORIGIN |
mcm | 2:aecccd48773a | 448 | * @pre N/A |
mcm | 2:aecccd48773a | 449 | * @warning N/A. |
mcm | 2:aecccd48773a | 450 | */ |
mcm | 2:aecccd48773a | 451 | ADS111X::ADS111X_status_t ADS111X::ADS111X_GetMode ( ADS111X_config_t* myMode ) |
mcm | 2:aecccd48773a | 452 | { |
mcm | 2:aecccd48773a | 453 | char cmd[2] = { 0U }; |
mcm | 2:aecccd48773a | 454 | uint16_t myConfig = 0U; |
mcm | 2:aecccd48773a | 455 | uint32_t aux = I2C_SUCCESS; |
mcm | 2:aecccd48773a | 456 | |
mcm | 2:aecccd48773a | 457 | /* Read the register to mask it */ |
mcm | 2:aecccd48773a | 458 | cmd[0] = ADS111X_CONFIG; |
mcm | 2:aecccd48773a | 459 | aux |= _i2c.write ( _ADS111X_Addr, &cmd[0], 1U, true ); |
mcm | 2:aecccd48773a | 460 | aux |= _i2c.read ( _ADS111X_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ) ); |
mcm | 2:aecccd48773a | 461 | |
mcm | 2:aecccd48773a | 462 | /* Parse the data */ |
mcm | 2:aecccd48773a | 463 | myConfig = cmd[0]; |
mcm | 2:aecccd48773a | 464 | myConfig <<= 8U; |
mcm | 2:aecccd48773a | 465 | myConfig |= cmd[1]; |
mcm | 2:aecccd48773a | 466 | myMode->mode = (ADS111X_config_mode_t)( myConfig & CONFIG_MODE_MASK ); |
mcm | 2:aecccd48773a | 467 | |
mcm | 2:aecccd48773a | 468 | |
mcm | 2:aecccd48773a | 469 | |
mcm | 2:aecccd48773a | 470 | if ( aux == I2C_SUCCESS ) |
mcm | 2:aecccd48773a | 471 | { |
mcm | 2:aecccd48773a | 472 | return ADS111X_SUCCESS; |
mcm | 2:aecccd48773a | 473 | } |
mcm | 2:aecccd48773a | 474 | else |
mcm | 2:aecccd48773a | 475 | { |
mcm | 2:aecccd48773a | 476 | return ADS111X_FAILURE; |
mcm | 2:aecccd48773a | 477 | } |
mcm | 2:aecccd48773a | 478 | } |
mcm | 2:aecccd48773a | 479 | |
mcm | 2:aecccd48773a | 480 | |
mcm | 2:aecccd48773a | 481 | |
mcm | 2:aecccd48773a | 482 | /** |
mcm | 2:aecccd48773a | 483 | * @brief ADS111X_SetDataRate ( ADS111X_config_t ); |
mcm | 2:aecccd48773a | 484 | * |
mcm | 2:aecccd48773a | 485 | * @details It sets the data rate. |
mcm | 2:aecccd48773a | 486 | * |
mcm | 2:aecccd48773a | 487 | * @param[in] myDR: Data rate. |
mcm | 2:aecccd48773a | 488 | * |
mcm | 2:aecccd48773a | 489 | * @param[out] N/A. |
mcm | 2:aecccd48773a | 490 | * |
mcm | 2:aecccd48773a | 491 | * |
mcm | 2:aecccd48773a | 492 | * @return Status of ADS111X_SetDataRate. |
mcm | 2:aecccd48773a | 493 | * |
mcm | 2:aecccd48773a | 494 | * |
mcm | 2:aecccd48773a | 495 | * @author Manuel Caballero |
mcm | 2:aecccd48773a | 496 | * @date 18/June/2020 |
mcm | 2:aecccd48773a | 497 | * @version 18/June/2020 The ORIGIN |
mcm | 2:aecccd48773a | 498 | * @pre N/A |
mcm | 2:aecccd48773a | 499 | * @warning N/A. |
mcm | 2:aecccd48773a | 500 | */ |
mcm | 2:aecccd48773a | 501 | ADS111X::ADS111X_status_t ADS111X::ADS111X_SetDataRate ( ADS111X_config_t myDR ) |
mcm | 2:aecccd48773a | 502 | { |
mcm | 2:aecccd48773a | 503 | char cmd[3] = { 0U }; |
mcm | 2:aecccd48773a | 504 | uint16_t myConfig = 0U; |
mcm | 2:aecccd48773a | 505 | uint32_t aux = I2C_SUCCESS; |
mcm | 2:aecccd48773a | 506 | |
mcm | 2:aecccd48773a | 507 | /* Read the register to mask it */ |
mcm | 2:aecccd48773a | 508 | cmd[0] = ADS111X_CONFIG; |
mcm | 2:aecccd48773a | 509 | aux |= _i2c.write ( _ADS111X_Addr, &cmd[0], 1U, true ); |
mcm | 2:aecccd48773a | 510 | aux |= _i2c.read ( _ADS111X_Addr, &cmd[1], 2U ); |
mcm | 2:aecccd48773a | 511 | |
mcm | 2:aecccd48773a | 512 | /* Mask it and update the register */ |
mcm | 2:aecccd48773a | 513 | myConfig = cmd[1]; |
mcm | 2:aecccd48773a | 514 | myConfig <<= 8U; |
mcm | 2:aecccd48773a | 515 | myConfig |= cmd[2]; |
mcm | 2:aecccd48773a | 516 | |
mcm | 2:aecccd48773a | 517 | myConfig &= ~CONFIG_DR_MASK; |
mcm | 2:aecccd48773a | 518 | myConfig |= myDR.dr; |
mcm | 2:aecccd48773a | 519 | cmd[1] = (char)( myConfig >> 8U ); |
mcm | 2:aecccd48773a | 520 | cmd[2] = (char)( myConfig ); |
mcm | 2:aecccd48773a | 521 | aux |= _i2c.write ( _ADS111X_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false ); |
mcm | 2:aecccd48773a | 522 | |
mcm | 2:aecccd48773a | 523 | |
mcm | 2:aecccd48773a | 524 | |
mcm | 2:aecccd48773a | 525 | if ( aux == I2C_SUCCESS ) |
mcm | 2:aecccd48773a | 526 | { |
mcm | 2:aecccd48773a | 527 | return ADS111X_SUCCESS; |
mcm | 2:aecccd48773a | 528 | } |
mcm | 2:aecccd48773a | 529 | else |
mcm | 2:aecccd48773a | 530 | { |
mcm | 2:aecccd48773a | 531 | return ADS111X_FAILURE; |
mcm | 2:aecccd48773a | 532 | } |
mcm | 2:aecccd48773a | 533 | } |
mcm | 2:aecccd48773a | 534 | |
mcm | 2:aecccd48773a | 535 | |
mcm | 2:aecccd48773a | 536 | |
mcm | 2:aecccd48773a | 537 | /** |
mcm | 2:aecccd48773a | 538 | * @brief ADS111X_GetDataRate ( ADS111X_config_t* ); |
mcm | 2:aecccd48773a | 539 | * |
mcm | 2:aecccd48773a | 540 | * @details It gets the data rate. |
mcm | 2:aecccd48773a | 541 | * |
mcm | 2:aecccd48773a | 542 | * @param[in] N/A. |
mcm | 2:aecccd48773a | 543 | * |
mcm | 2:aecccd48773a | 544 | * @param[out] myDR: Data rate. |
mcm | 2:aecccd48773a | 545 | * |
mcm | 2:aecccd48773a | 546 | * |
mcm | 2:aecccd48773a | 547 | * @return Status of ADS111X_GetDataRate. |
mcm | 2:aecccd48773a | 548 | * |
mcm | 2:aecccd48773a | 549 | * |
mcm | 2:aecccd48773a | 550 | * @author Manuel Caballero |
mcm | 2:aecccd48773a | 551 | * @date 18/June/2020 |
mcm | 2:aecccd48773a | 552 | * @version 18/June/2020 The ORIGIN |
mcm | 2:aecccd48773a | 553 | * @pre N/A |
mcm | 2:aecccd48773a | 554 | * @warning N/A. |
mcm | 2:aecccd48773a | 555 | */ |
mcm | 2:aecccd48773a | 556 | ADS111X::ADS111X_status_t ADS111X::ADS111X_GetDataRate ( ADS111X_config_t* myDR ) |
mcm | 2:aecccd48773a | 557 | { |
mcm | 2:aecccd48773a | 558 | char cmd[2] = { 0U }; |
mcm | 2:aecccd48773a | 559 | uint16_t myConfig = 0U; |
mcm | 2:aecccd48773a | 560 | uint32_t aux = I2C_SUCCESS; |
mcm | 2:aecccd48773a | 561 | |
mcm | 2:aecccd48773a | 562 | /* Read the register to mask it */ |
mcm | 2:aecccd48773a | 563 | cmd[0] = ADS111X_CONFIG; |
mcm | 2:aecccd48773a | 564 | aux |= _i2c.write ( _ADS111X_Addr, &cmd[0], 1U, true ); |
mcm | 2:aecccd48773a | 565 | aux |= _i2c.read ( _ADS111X_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ) ); |
mcm | 2:aecccd48773a | 566 | |
mcm | 2:aecccd48773a | 567 | /* Parse the data */ |
mcm | 2:aecccd48773a | 568 | myConfig = cmd[0]; |
mcm | 2:aecccd48773a | 569 | myConfig <<= 8U; |
mcm | 2:aecccd48773a | 570 | myConfig |= cmd[1]; |
mcm | 2:aecccd48773a | 571 | myDR->dr = (ADS111X_config_dr_t)( myConfig & CONFIG_DR_MASK ); |
mcm | 2:aecccd48773a | 572 | |
mcm | 2:aecccd48773a | 573 | |
mcm | 2:aecccd48773a | 574 | |
mcm | 2:aecccd48773a | 575 | if ( aux == I2C_SUCCESS ) |
mcm | 2:aecccd48773a | 576 | { |
mcm | 2:aecccd48773a | 577 | return ADS111X_SUCCESS; |
mcm | 2:aecccd48773a | 578 | } |
mcm | 2:aecccd48773a | 579 | else |
mcm | 2:aecccd48773a | 580 | { |
mcm | 2:aecccd48773a | 581 | return ADS111X_FAILURE; |
mcm | 2:aecccd48773a | 582 | } |
mcm | 2:aecccd48773a | 583 | } |
mcm | 2:aecccd48773a | 584 | |
mcm | 2:aecccd48773a | 585 | |
mcm | 2:aecccd48773a | 586 | |
mcm | 2:aecccd48773a | 587 | /** |
mcm | 2:aecccd48773a | 588 | * @brief ADS111X_SetComparator ( ADS111X_data_t ); |
mcm | 2:aecccd48773a | 589 | * |
mcm | 2:aecccd48773a | 590 | * @details It sets the comparator configuration. |
mcm | 2:aecccd48773a | 591 | * |
mcm | 2:aecccd48773a | 592 | * @param[in] myCOMP: Comparator Mode/Polarity/Latching/Queue and disable. |
mcm | 2:aecccd48773a | 593 | * |
mcm | 2:aecccd48773a | 594 | * @param[out] N/A. |
mcm | 2:aecccd48773a | 595 | * |
mcm | 2:aecccd48773a | 596 | * |
mcm | 2:aecccd48773a | 597 | * @return Status of ADS111X_SetComparator. |
mcm | 2:aecccd48773a | 598 | * |
mcm | 2:aecccd48773a | 599 | * |
mcm | 2:aecccd48773a | 600 | * @author Manuel Caballero |
mcm | 2:aecccd48773a | 601 | * @date 18/June/2020 |
mcm | 2:aecccd48773a | 602 | * @version 18/June/2020 The ORIGIN |
mcm | 2:aecccd48773a | 603 | * @pre N/A |
mcm | 2:aecccd48773a | 604 | * @warning ADS1114 and ADS1115 only. |
mcm | 2:aecccd48773a | 605 | */ |
mcm | 2:aecccd48773a | 606 | ADS111X::ADS111X_status_t ADS111X::ADS111X_SetComparator ( ADS111X_data_t myCOMP ) |
mcm | 2:aecccd48773a | 607 | { |
mcm | 2:aecccd48773a | 608 | char cmd[3] = { 0U }; |
mcm | 2:aecccd48773a | 609 | uint16_t myConfig = 0U; |
mcm | 2:aecccd48773a | 610 | uint32_t aux = I2C_SUCCESS; |
mcm | 2:aecccd48773a | 611 | |
mcm | 2:aecccd48773a | 612 | /* Only ADS1115/ADS1114 supports this functionality */ |
mcm | 2:aecccd48773a | 613 | if ( myCOMP.device != DEVICE_ADS1113 ) |
mcm | 2:aecccd48773a | 614 | { |
mcm | 2:aecccd48773a | 615 | /* Read the register to mask it */ |
mcm | 2:aecccd48773a | 616 | cmd[0] = ADS111X_CONFIG; |
mcm | 2:aecccd48773a | 617 | aux |= _i2c.write ( _ADS111X_Addr, &cmd[0], 1U, true ); |
mcm | 2:aecccd48773a | 618 | aux |= _i2c.read ( _ADS111X_Addr, &cmd[1], 2U ); |
mcm | 2:aecccd48773a | 619 | |
mcm | 2:aecccd48773a | 620 | /* Mask it and update the register */ |
mcm | 2:aecccd48773a | 621 | myConfig = cmd[1]; |
mcm | 2:aecccd48773a | 622 | myConfig <<= 8U; |
mcm | 2:aecccd48773a | 623 | myConfig |= cmd[2]; |
mcm | 2:aecccd48773a | 624 | |
mcm | 2:aecccd48773a | 625 | myConfig &= ~( CONFIG_COMP_MODE_MASK | CONFIG_COMP_POL_MASK | CONFIG_COMP_LAT_MASK | CONFIG_COMP_QUE_MASK ); |
mcm | 2:aecccd48773a | 626 | myConfig |= ( myCOMP.config.comp_mode | myCOMP.config.comp_pol | myCOMP.config.comp_lat | myCOMP.config.comp_que ); |
mcm | 2:aecccd48773a | 627 | cmd[1] = (char)( myConfig >> 8U ); |
mcm | 2:aecccd48773a | 628 | cmd[2] = (char)( myConfig ); |
mcm | 2:aecccd48773a | 629 | aux |= _i2c.write ( _ADS111X_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false ); |
mcm | 2:aecccd48773a | 630 | } |
mcm | 2:aecccd48773a | 631 | else |
mcm | 2:aecccd48773a | 632 | { |
mcm | 2:aecccd48773a | 633 | return ADS111X_DEVICE_NOT_SUPPORTED; |
mcm | 2:aecccd48773a | 634 | } |
mcm | 2:aecccd48773a | 635 | |
mcm | 2:aecccd48773a | 636 | |
mcm | 2:aecccd48773a | 637 | if ( aux == I2C_SUCCESS ) |
mcm | 2:aecccd48773a | 638 | { |
mcm | 2:aecccd48773a | 639 | return ADS111X_SUCCESS; |
mcm | 2:aecccd48773a | 640 | } |
mcm | 2:aecccd48773a | 641 | else |
mcm | 2:aecccd48773a | 642 | { |
mcm | 2:aecccd48773a | 643 | return ADS111X_FAILURE; |
mcm | 2:aecccd48773a | 644 | } |
mcm | 2:aecccd48773a | 645 | } |
mcm | 2:aecccd48773a | 646 | |
mcm | 2:aecccd48773a | 647 | |
mcm | 2:aecccd48773a | 648 | |
mcm | 2:aecccd48773a | 649 | /** |
mcm | 2:aecccd48773a | 650 | * @brief ADS111X_GetComparator ( ADS111X_data_t* ); |
mcm | 2:aecccd48773a | 651 | * |
mcm | 2:aecccd48773a | 652 | * @details It gets the comparator configuration. |
mcm | 2:aecccd48773a | 653 | * |
mcm | 2:aecccd48773a | 654 | * @param[in] N/A. |
mcm | 2:aecccd48773a | 655 | * |
mcm | 2:aecccd48773a | 656 | * @param[out] myCOMP: Comparator Mode/Polarity/Latching/Queue and disable. |
mcm | 2:aecccd48773a | 657 | * |
mcm | 2:aecccd48773a | 658 | * |
mcm | 2:aecccd48773a | 659 | * @return Status of ADS111X_GetComparator. |
mcm | 2:aecccd48773a | 660 | * |
mcm | 2:aecccd48773a | 661 | * |
mcm | 2:aecccd48773a | 662 | * @author Manuel Caballero |
mcm | 2:aecccd48773a | 663 | * @date 18/June/2020 |
mcm | 2:aecccd48773a | 664 | * @version 18/June/2020 The ORIGIN |
mcm | 2:aecccd48773a | 665 | * @pre N/A |
mcm | 2:aecccd48773a | 666 | * @warning ADS1114 and ADS1115 only. |
mcm | 2:aecccd48773a | 667 | */ |
mcm | 2:aecccd48773a | 668 | ADS111X::ADS111X_status_t ADS111X::ADS111X_GetComparator ( ADS111X_data_t* myCOMP ) |
mcm | 2:aecccd48773a | 669 | { |
mcm | 2:aecccd48773a | 670 | char cmd[2] = { 0U }; |
mcm | 2:aecccd48773a | 671 | uint16_t myConfig = 0U; |
mcm | 2:aecccd48773a | 672 | uint32_t aux = I2C_SUCCESS; |
mcm | 2:aecccd48773a | 673 | |
mcm | 2:aecccd48773a | 674 | /* Only ADS1115/ADS1114 supports this functionality */ |
mcm | 2:aecccd48773a | 675 | if ( myCOMP->device != DEVICE_ADS1113 ) |
mcm | 2:aecccd48773a | 676 | { |
mcm | 2:aecccd48773a | 677 | /* Read the register to mask it */ |
mcm | 2:aecccd48773a | 678 | cmd[0] = ADS111X_CONFIG; |
mcm | 2:aecccd48773a | 679 | aux |= _i2c.write ( _ADS111X_Addr, &cmd[0], 1U, true ); |
mcm | 2:aecccd48773a | 680 | aux |= _i2c.read ( _ADS111X_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ) ); |
mcm | 2:aecccd48773a | 681 | |
mcm | 2:aecccd48773a | 682 | /* Parse the data */ |
mcm | 2:aecccd48773a | 683 | myConfig = cmd[0]; |
mcm | 2:aecccd48773a | 684 | myConfig <<= 8U; |
mcm | 2:aecccd48773a | 685 | myConfig |= cmd[1]; |
mcm | 2:aecccd48773a | 686 | |
mcm | 2:aecccd48773a | 687 | myCOMP->config.comp_mode = (ADS111X_config_comp_mode_t)( myConfig & CONFIG_COMP_MODE_MASK ); |
mcm | 2:aecccd48773a | 688 | myCOMP->config.comp_pol = (ADS111X_config_comp_pol_t)( myConfig & CONFIG_COMP_POL_MASK ); |
mcm | 2:aecccd48773a | 689 | myCOMP->config.comp_lat = (ADS111X_config_comp_lat_t)( myConfig & CONFIG_COMP_LAT_MASK ); |
mcm | 2:aecccd48773a | 690 | myCOMP->config.comp_que = (ADS111X_config_comp_que_t)( myConfig & CONFIG_COMP_QUE_MASK ); |
mcm | 2:aecccd48773a | 691 | } |
mcm | 2:aecccd48773a | 692 | else |
mcm | 2:aecccd48773a | 693 | { |
mcm | 2:aecccd48773a | 694 | return ADS111X_DEVICE_NOT_SUPPORTED; |
mcm | 2:aecccd48773a | 695 | } |
mcm | 2:aecccd48773a | 696 | |
mcm | 2:aecccd48773a | 697 | |
mcm | 2:aecccd48773a | 698 | if ( aux == I2C_SUCCESS ) |
mcm | 2:aecccd48773a | 699 | { |
mcm | 2:aecccd48773a | 700 | return ADS111X_SUCCESS; |
mcm | 2:aecccd48773a | 701 | } |
mcm | 2:aecccd48773a | 702 | else |
mcm | 2:aecccd48773a | 703 | { |
mcm | 2:aecccd48773a | 704 | return ADS111X_FAILURE; |
mcm | 2:aecccd48773a | 705 | } |
mcm | 2:aecccd48773a | 706 | } |
mcm | 2:aecccd48773a | 707 | |
mcm | 2:aecccd48773a | 708 | |
mcm | 2:aecccd48773a | 709 | |
mcm | 2:aecccd48773a | 710 | /** |
mcm | 2:aecccd48773a | 711 | * @brief ADS111X_SetLowThresholdValue ( ADS111X_thresh_t ); |
mcm | 2:aecccd48773a | 712 | * |
mcm | 2:aecccd48773a | 713 | * @details It sets the low threshold value. |
mcm | 2:aecccd48773a | 714 | * |
mcm | 2:aecccd48773a | 715 | * @param[in] myLoThres: low threshold value. |
mcm | 2:aecccd48773a | 716 | * |
mcm | 2:aecccd48773a | 717 | * @param[out] N/A. |
mcm | 2:aecccd48773a | 718 | * |
mcm | 2:aecccd48773a | 719 | * |
mcm | 2:aecccd48773a | 720 | * @return Status of ADS111X_SetLowThresholdValue. |
mcm | 2:aecccd48773a | 721 | * |
mcm | 2:aecccd48773a | 722 | * |
mcm | 2:aecccd48773a | 723 | * @author Manuel Caballero |
mcm | 2:aecccd48773a | 724 | * @date 18/June/2020 |
mcm | 2:aecccd48773a | 725 | * @version 18/June/2020 The ORIGIN |
mcm | 2:aecccd48773a | 726 | * @pre N/A |
mcm | 2:aecccd48773a | 727 | * @warning N/A. |
mcm | 2:aecccd48773a | 728 | */ |
mcm | 2:aecccd48773a | 729 | ADS111X::ADS111X_status_t ADS111X::ADS111X_SetLowThresholdValue ( ADS111X_thresh_t myLoThres ) |
mcm | 2:aecccd48773a | 730 | { |
mcm | 2:aecccd48773a | 731 | char cmd[3] = { 0U }; |
mcm | 2:aecccd48773a | 732 | uint32_t aux = I2C_SUCCESS; |
mcm | 2:aecccd48773a | 733 | |
mcm | 2:aecccd48773a | 734 | /* Update the register */ |
mcm | 2:aecccd48773a | 735 | myLoThres.lo_thresh <<= 4U; |
mcm | 2:aecccd48773a | 736 | |
mcm | 2:aecccd48773a | 737 | cmd[0] = ADS111X_LO_THRESH; |
mcm | 2:aecccd48773a | 738 | cmd[1] = (char)( myLoThres.lo_thresh >> 8U ); |
mcm | 2:aecccd48773a | 739 | cmd[2] = (char)( myLoThres.lo_thresh ); |
mcm | 2:aecccd48773a | 740 | aux |= _i2c.write ( _ADS111X_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false ); |
mcm | 2:aecccd48773a | 741 | |
mcm | 2:aecccd48773a | 742 | |
mcm | 2:aecccd48773a | 743 | if ( aux == I2C_SUCCESS ) |
mcm | 2:aecccd48773a | 744 | { |
mcm | 2:aecccd48773a | 745 | return ADS111X_SUCCESS; |
mcm | 2:aecccd48773a | 746 | } |
mcm | 2:aecccd48773a | 747 | else |
mcm | 2:aecccd48773a | 748 | { |
mcm | 2:aecccd48773a | 749 | return ADS111X_FAILURE; |
mcm | 2:aecccd48773a | 750 | } |
mcm | 2:aecccd48773a | 751 | } |
mcm | 2:aecccd48773a | 752 | |
mcm | 2:aecccd48773a | 753 | |
mcm | 2:aecccd48773a | 754 | |
mcm | 2:aecccd48773a | 755 | /** |
mcm | 2:aecccd48773a | 756 | * @brief ADS111X_GetLowThresholdValue ( ADS111X_thresh_t ); |
mcm | 2:aecccd48773a | 757 | * |
mcm | 2:aecccd48773a | 758 | * @details It gets the low threshold value. |
mcm | 2:aecccd48773a | 759 | * |
mcm | 2:aecccd48773a | 760 | * @param[in] N/A. |
mcm | 2:aecccd48773a | 761 | * |
mcm | 2:aecccd48773a | 762 | * @param[out] myLoThres: low threshold value. |
mcm | 2:aecccd48773a | 763 | * |
mcm | 2:aecccd48773a | 764 | * |
mcm | 2:aecccd48773a | 765 | * @return Status of ADS111X_GetLowThresholdValue. |
mcm | 2:aecccd48773a | 766 | * |
mcm | 2:aecccd48773a | 767 | * |
mcm | 2:aecccd48773a | 768 | * @author Manuel Caballero |
mcm | 2:aecccd48773a | 769 | * @date 18/June/2020 |
mcm | 2:aecccd48773a | 770 | * @version 18/June/2020 The ORIGIN |
mcm | 2:aecccd48773a | 771 | * @pre N/A |
mcm | 2:aecccd48773a | 772 | * @warning N/A. |
mcm | 2:aecccd48773a | 773 | */ |
mcm | 2:aecccd48773a | 774 | ADS111X::ADS111X_status_t ADS111X::ADS111X_GetLowThresholdValue ( ADS111X_thresh_t* myLoThres ) |
mcm | 2:aecccd48773a | 775 | { |
mcm | 2:aecccd48773a | 776 | char cmd[2] = { 0U }; |
mcm | 2:aecccd48773a | 777 | uint32_t aux = I2C_SUCCESS; |
mcm | 2:aecccd48773a | 778 | |
mcm | 2:aecccd48773a | 779 | /* Read the register to mask it */ |
mcm | 2:aecccd48773a | 780 | cmd[0] = ADS111X_LO_THRESH; |
mcm | 2:aecccd48773a | 781 | aux |= _i2c.write ( _ADS111X_Addr, &cmd[0], 1U, true ); |
mcm | 2:aecccd48773a | 782 | aux |= _i2c.read ( _ADS111X_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ) ); |
mcm | 2:aecccd48773a | 783 | |
mcm | 2:aecccd48773a | 784 | /* Parse the data */ |
mcm | 2:aecccd48773a | 785 | myLoThres->lo_thresh = cmd[0]; |
mcm | 2:aecccd48773a | 786 | myLoThres->lo_thresh <<= 8U; |
mcm | 2:aecccd48773a | 787 | myLoThres->lo_thresh |= cmd[1]; |
mcm | 2:aecccd48773a | 788 | |
mcm | 2:aecccd48773a | 789 | |
mcm | 2:aecccd48773a | 790 | |
mcm | 2:aecccd48773a | 791 | if ( aux == I2C_SUCCESS ) |
mcm | 2:aecccd48773a | 792 | { |
mcm | 2:aecccd48773a | 793 | return ADS111X_SUCCESS; |
mcm | 2:aecccd48773a | 794 | } |
mcm | 2:aecccd48773a | 795 | else |
mcm | 2:aecccd48773a | 796 | { |
mcm | 2:aecccd48773a | 797 | return ADS111X_FAILURE; |
mcm | 2:aecccd48773a | 798 | } |
mcm | 2:aecccd48773a | 799 | } |
mcm | 2:aecccd48773a | 800 | |
mcm | 2:aecccd48773a | 801 | |
mcm | 2:aecccd48773a | 802 | |
mcm | 2:aecccd48773a | 803 | /** |
mcm | 2:aecccd48773a | 804 | * @brief ADS111X_SetHighThresholdValue ( ADS111X_thresh_t ); |
mcm | 2:aecccd48773a | 805 | * |
mcm | 2:aecccd48773a | 806 | * @details It sets the high threshold value. |
mcm | 2:aecccd48773a | 807 | * |
mcm | 2:aecccd48773a | 808 | * @param[in] myHiThres: High threshold value. |
mcm | 2:aecccd48773a | 809 | * |
mcm | 2:aecccd48773a | 810 | * @param[out] N/A. |
mcm | 2:aecccd48773a | 811 | * |
mcm | 2:aecccd48773a | 812 | * |
mcm | 2:aecccd48773a | 813 | * @return Status of ADS111X_SetHighThresholdValue. |
mcm | 2:aecccd48773a | 814 | * |
mcm | 2:aecccd48773a | 815 | * |
mcm | 2:aecccd48773a | 816 | * @author Manuel Caballero |
mcm | 2:aecccd48773a | 817 | * @date 18/June/2020 |
mcm | 2:aecccd48773a | 818 | * @version 18/June/2020 The ORIGIN |
mcm | 2:aecccd48773a | 819 | * @pre N/A |
mcm | 2:aecccd48773a | 820 | * @warning N/A. |
mcm | 2:aecccd48773a | 821 | */ |
mcm | 2:aecccd48773a | 822 | ADS111X::ADS111X_status_t ADS111X::ADS111X_SetHighThresholdValue ( ADS111X_thresh_t myHiThres ) |
mcm | 2:aecccd48773a | 823 | { |
mcm | 2:aecccd48773a | 824 | char cmd[3] = { 0U }; |
mcm | 2:aecccd48773a | 825 | uint32_t aux = I2C_SUCCESS; |
mcm | 2:aecccd48773a | 826 | |
mcm | 2:aecccd48773a | 827 | /* Update the register */ |
mcm | 2:aecccd48773a | 828 | myHiThres.hi_thresh <<= 4U; |
mcm | 2:aecccd48773a | 829 | |
mcm | 2:aecccd48773a | 830 | cmd[0] = ADS111X_HI_THRESH; |
mcm | 2:aecccd48773a | 831 | cmd[1] = (char)( myHiThres.hi_thresh >> 8U ); |
mcm | 2:aecccd48773a | 832 | cmd[2] = (char)( myHiThres.hi_thresh ); |
mcm | 2:aecccd48773a | 833 | aux |= _i2c.write ( _ADS111X_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false ); |
mcm | 2:aecccd48773a | 834 | |
mcm | 2:aecccd48773a | 835 | |
mcm | 2:aecccd48773a | 836 | |
mcm | 2:aecccd48773a | 837 | if ( aux == I2C_SUCCESS ) |
mcm | 2:aecccd48773a | 838 | { |
mcm | 2:aecccd48773a | 839 | return ADS111X_SUCCESS; |
mcm | 2:aecccd48773a | 840 | } |
mcm | 2:aecccd48773a | 841 | else |
mcm | 2:aecccd48773a | 842 | { |
mcm | 2:aecccd48773a | 843 | return ADS111X_FAILURE; |
mcm | 2:aecccd48773a | 844 | } |
mcm | 2:aecccd48773a | 845 | } |
mcm | 2:aecccd48773a | 846 | |
mcm | 2:aecccd48773a | 847 | |
mcm | 2:aecccd48773a | 848 | |
mcm | 2:aecccd48773a | 849 | /** |
mcm | 2:aecccd48773a | 850 | * @brief ADS111X_GetHighThresholdValue ( ADS111X_thresh_t ); |
mcm | 2:aecccd48773a | 851 | * |
mcm | 2:aecccd48773a | 852 | * @details It gets the high threshold value. |
mcm | 2:aecccd48773a | 853 | * |
mcm | 2:aecccd48773a | 854 | * @param[in] N/A. |
mcm | 2:aecccd48773a | 855 | * |
mcm | 2:aecccd48773a | 856 | * @param[out] myHiThres: High threshold value. |
mcm | 2:aecccd48773a | 857 | * |
mcm | 2:aecccd48773a | 858 | * |
mcm | 2:aecccd48773a | 859 | * @return Status of ADS111X_GetHighThresholdValue. |
mcm | 2:aecccd48773a | 860 | * |
mcm | 2:aecccd48773a | 861 | * |
mcm | 2:aecccd48773a | 862 | * @author Manuel Caballero |
mcm | 2:aecccd48773a | 863 | * @date 18/June/2020 |
mcm | 2:aecccd48773a | 864 | * @version 18/June/2020 The ORIGIN |
mcm | 2:aecccd48773a | 865 | * @pre N/A |
mcm | 2:aecccd48773a | 866 | * @warning N/A. |
mcm | 2:aecccd48773a | 867 | */ |
mcm | 2:aecccd48773a | 868 | ADS111X::ADS111X_status_t ADS111X::ADS111X_GetHighThresholdValue ( ADS111X_thresh_t* myHiThres ) |
mcm | 2:aecccd48773a | 869 | { |
mcm | 2:aecccd48773a | 870 | char cmd[2] = { 0U }; |
mcm | 2:aecccd48773a | 871 | uint32_t aux = I2C_SUCCESS; |
mcm | 2:aecccd48773a | 872 | |
mcm | 2:aecccd48773a | 873 | /* Read the register to mask it */ |
mcm | 2:aecccd48773a | 874 | cmd[0] = ADS111X_HI_THRESH; |
mcm | 2:aecccd48773a | 875 | aux |= _i2c.write ( _ADS111X_Addr, &cmd[0], 1U, true ); |
mcm | 2:aecccd48773a | 876 | aux |= _i2c.read ( _ADS111X_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ) ); |
mcm | 2:aecccd48773a | 877 | |
mcm | 2:aecccd48773a | 878 | /* Parse the data */ |
mcm | 2:aecccd48773a | 879 | myHiThres->hi_thresh = cmd[0]; |
mcm | 2:aecccd48773a | 880 | myHiThres->hi_thresh <<= 8U; |
mcm | 2:aecccd48773a | 881 | myHiThres->hi_thresh |= cmd[1]; |
mcm | 2:aecccd48773a | 882 | |
mcm | 2:aecccd48773a | 883 | |
mcm | 2:aecccd48773a | 884 | |
mcm | 2:aecccd48773a | 885 | if ( aux == I2C_SUCCESS ) |
mcm | 2:aecccd48773a | 886 | { |
mcm | 2:aecccd48773a | 887 | return ADS111X_SUCCESS; |
mcm | 2:aecccd48773a | 888 | } |
mcm | 2:aecccd48773a | 889 | else |
mcm | 2:aecccd48773a | 890 | { |
mcm | 2:aecccd48773a | 891 | return ADS111X_FAILURE; |
mcm | 2:aecccd48773a | 892 | } |
mcm | 2:aecccd48773a | 893 | } |
mcm | 2:aecccd48773a | 894 | |
mcm | 2:aecccd48773a | 895 | |
mcm | 2:aecccd48773a | 896 | |
mcm | 2:aecccd48773a | 897 | /** |
mcm | 2:aecccd48773a | 898 | * @brief ADS111X_GetRawConversion ( ADS111X_conversion_t* ); |
mcm | 2:aecccd48773a | 899 | * |
mcm | 2:aecccd48773a | 900 | * @details It gets the raw conversion value |
mcm | 2:aecccd48773a | 901 | * |
mcm | 2:aecccd48773a | 902 | * @param[in] N/A. |
mcm | 2:aecccd48773a | 903 | * |
mcm | 2:aecccd48773a | 904 | * @param[out] myRawD: Raw conversion value. |
mcm | 2:aecccd48773a | 905 | * |
mcm | 2:aecccd48773a | 906 | * |
mcm | 2:aecccd48773a | 907 | * @return Status of ADS111X_GetRawConversion. |
mcm | 2:aecccd48773a | 908 | * |
mcm | 2:aecccd48773a | 909 | * |
mcm | 2:aecccd48773a | 910 | * @author Manuel Caballero |
mcm | 2:aecccd48773a | 911 | * @date 18/June/2020 |
mcm | 2:aecccd48773a | 912 | * @version 18/June/2020 The ORIGIN |
mcm | 2:aecccd48773a | 913 | * @pre N/A |
mcm | 2:aecccd48773a | 914 | * @warning N/A. |
mcm | 2:aecccd48773a | 915 | */ |
mcm | 2:aecccd48773a | 916 | ADS111X::ADS111X_status_t ADS111X::ADS111X_GetRawConversion ( ADS111X_conversion_t* myRawD ) |
mcm | 2:aecccd48773a | 917 | { |
mcm | 2:aecccd48773a | 918 | char cmd[2] = { 0U }; |
mcm | 2:aecccd48773a | 919 | uint32_t aux = I2C_SUCCESS; |
mcm | 2:aecccd48773a | 920 | |
mcm | 2:aecccd48773a | 921 | /* Read the register to mask it */ |
mcm | 2:aecccd48773a | 922 | cmd[0] = ADS111X_CONVERSION; |
mcm | 2:aecccd48773a | 923 | aux |= _i2c.write ( _ADS111X_Addr, &cmd[0], 1U, true ); |
mcm | 2:aecccd48773a | 924 | aux |= _i2c.read ( _ADS111X_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ) ); |
mcm | 2:aecccd48773a | 925 | |
mcm | 2:aecccd48773a | 926 | /* Parse the data */ |
mcm | 2:aecccd48773a | 927 | myRawD->raw_conversion = cmd[0]; |
mcm | 2:aecccd48773a | 928 | myRawD->raw_conversion <<= 8U; |
mcm | 2:aecccd48773a | 929 | myRawD->raw_conversion |= cmd[1]; |
mcm | 2:aecccd48773a | 930 | |
mcm | 2:aecccd48773a | 931 | |
mcm | 2:aecccd48773a | 932 | |
mcm | 2:aecccd48773a | 933 | if ( aux == I2C_SUCCESS ) |
mcm | 2:aecccd48773a | 934 | { |
mcm | 2:aecccd48773a | 935 | return ADS111X_SUCCESS; |
mcm | 2:aecccd48773a | 936 | } |
mcm | 2:aecccd48773a | 937 | else |
mcm | 2:aecccd48773a | 938 | { |
mcm | 2:aecccd48773a | 939 | return ADS111X_FAILURE; |
mcm | 2:aecccd48773a | 940 | } |
mcm | 2:aecccd48773a | 941 | } |
mcm | 2:aecccd48773a | 942 | |
mcm | 2:aecccd48773a | 943 | |
mcm | 2:aecccd48773a | 944 | |
mcm | 2:aecccd48773a | 945 | /** |
mcm | 2:aecccd48773a | 946 | * @brief ADS111X_GetConversion ( ADS111X_data_t* ); |
mcm | 2:aecccd48773a | 947 | * |
mcm | 2:aecccd48773a | 948 | * @details It gets the conversion value |
mcm | 2:aecccd48773a | 949 | * |
mcm | 2:aecccd48773a | 950 | * @param[in] N/A. |
mcm | 2:aecccd48773a | 951 | * |
mcm | 2:aecccd48773a | 952 | * @param[out] myD: Conversion value. |
mcm | 2:aecccd48773a | 953 | * |
mcm | 2:aecccd48773a | 954 | * |
mcm | 2:aecccd48773a | 955 | * @return Status of ADS111X_GetConversion. |
mcm | 2:aecccd48773a | 956 | * |
mcm | 2:aecccd48773a | 957 | * |
mcm | 2:aecccd48773a | 958 | * @author Manuel Caballero |
mcm | 2:aecccd48773a | 959 | * @date 18/June/2020 |
mcm | 2:aecccd48773a | 960 | * @version 18/June/2020 The ORIGIN |
mcm | 2:aecccd48773a | 961 | * @pre N/A |
mcm | 2:aecccd48773a | 962 | * @warning N/A. |
mcm | 2:aecccd48773a | 963 | */ |
mcm | 2:aecccd48773a | 964 | ADS111X::ADS111X_status_t ADS111X::ADS111X_GetConversion ( ADS111X_data_t* myD ) |
mcm | 2:aecccd48773a | 965 | { |
mcm | 2:aecccd48773a | 966 | double myGain = 0.0; |
mcm | 2:aecccd48773a | 967 | double myFactor = 0.0; |
mcm | 2:aecccd48773a | 968 | ADS111X_status_t aux = ADS111X_SUCCESS; |
mcm | 2:aecccd48773a | 969 | |
mcm | 2:aecccd48773a | 970 | /* Get the raw conversion value */ |
mcm | 2:aecccd48773a | 971 | aux = ADS111X_GetRawConversion ( &(myD->conversion) ); |
mcm | 2:aecccd48773a | 972 | |
mcm | 2:aecccd48773a | 973 | /* Set up the gain accordingly */ |
mcm | 2:aecccd48773a | 974 | switch ( myD->device ) |
mcm | 2:aecccd48773a | 975 | { |
mcm | 2:aecccd48773a | 976 | case DEVICE_ADS1113: |
mcm | 2:aecccd48773a | 977 | myGain = 2.048; |
mcm | 2:aecccd48773a | 978 | break; |
mcm | 2:aecccd48773a | 979 | |
mcm | 2:aecccd48773a | 980 | default: |
mcm | 2:aecccd48773a | 981 | case DEVICE_ADS1114: |
mcm | 2:aecccd48773a | 982 | case DEVICE_ADS1115: |
mcm | 2:aecccd48773a | 983 | switch ( myD->config.pga ) |
mcm | 2:aecccd48773a | 984 | { |
mcm | 2:aecccd48773a | 985 | case CONFIG_PGA_FSR_6_144_V: |
mcm | 2:aecccd48773a | 986 | myGain = 6.144; |
mcm | 2:aecccd48773a | 987 | break; |
mcm | 2:aecccd48773a | 988 | |
mcm | 2:aecccd48773a | 989 | case CONFIG_PGA_FSR_4_096_V: |
mcm | 2:aecccd48773a | 990 | myGain = 4.096; |
mcm | 2:aecccd48773a | 991 | break; |
mcm | 2:aecccd48773a | 992 | |
mcm | 2:aecccd48773a | 993 | default: |
mcm | 2:aecccd48773a | 994 | case CONFIG_PGA_FSR_2_048_V: |
mcm | 2:aecccd48773a | 995 | myGain = 2.048; |
mcm | 2:aecccd48773a | 996 | break; |
mcm | 2:aecccd48773a | 997 | |
mcm | 2:aecccd48773a | 998 | case CONFIG_PGA_FSR_1_024_V: |
mcm | 2:aecccd48773a | 999 | myGain = 1.024; |
mcm | 2:aecccd48773a | 1000 | break; |
mcm | 2:aecccd48773a | 1001 | |
mcm | 2:aecccd48773a | 1002 | case CONFIG_PGA_FSR_0_512_V: |
mcm | 2:aecccd48773a | 1003 | myGain = 0.512; |
mcm | 2:aecccd48773a | 1004 | break; |
mcm | 2:aecccd48773a | 1005 | |
mcm | 2:aecccd48773a | 1006 | case CONFIG_PGA_FSR_0_256_V: |
mcm | 2:aecccd48773a | 1007 | myGain = 0.256; |
mcm | 2:aecccd48773a | 1008 | break; |
mcm | 2:aecccd48773a | 1009 | } |
mcm | 2:aecccd48773a | 1010 | break; |
mcm | 2:aecccd48773a | 1011 | } |
mcm | 2:aecccd48773a | 1012 | |
mcm | 2:aecccd48773a | 1013 | |
mcm | 2:aecccd48773a | 1014 | /* Check the scale */ |
mcm | 2:aecccd48773a | 1015 | if ( myD->conversion.raw_conversion == 0x8000 ) |
mcm | 2:aecccd48773a | 1016 | { |
mcm | 2:aecccd48773a | 1017 | myFactor = myGain; |
mcm | 2:aecccd48773a | 1018 | } |
mcm | 2:aecccd48773a | 1019 | else if ( myD->conversion.raw_conversion == 0x7FFF ) |
mcm | 2:aecccd48773a | 1020 | { |
mcm | 2:aecccd48773a | 1021 | myFactor = ( myGain * ( 32768.0 - 1.0 ) ) / 32768.0; |
mcm | 2:aecccd48773a | 1022 | } |
mcm | 2:aecccd48773a | 1023 | else |
mcm | 2:aecccd48773a | 1024 | { |
mcm | 2:aecccd48773a | 1025 | myFactor = myGain / 32768.0; |
mcm | 2:aecccd48773a | 1026 | } |
mcm | 2:aecccd48773a | 1027 | |
mcm | 2:aecccd48773a | 1028 | |
mcm | 2:aecccd48773a | 1029 | /* Result */ |
mcm | 2:aecccd48773a | 1030 | myD->conversion.conversion = (float)( myFactor * myD->conversion.raw_conversion ); |
mcm | 2:aecccd48773a | 1031 | |
mcm | 2:aecccd48773a | 1032 | |
mcm | 2:aecccd48773a | 1033 | return aux; |
mcm | 2:aecccd48773a | 1034 | } |
mcm | 2:aecccd48773a | 1035 | |
mcm | 2:aecccd48773a | 1036 | |
mcm | 2:aecccd48773a | 1037 | |
mcm | 2:aecccd48773a | 1038 | /** |
mcm | 2:aecccd48773a | 1039 | * @brief ADS111X_SoftReset ( void ); |
mcm | 2:aecccd48773a | 1040 | * |
mcm | 2:aecccd48773a | 1041 | * @details It triggers a softreset. |
mcm | 2:aecccd48773a | 1042 | * |
mcm | 2:aecccd48773a | 1043 | * @param[in] N/A. |
mcm | 2:aecccd48773a | 1044 | * |
mcm | 2:aecccd48773a | 1045 | * @param[out] N/A. |
mcm | 2:aecccd48773a | 1046 | * |
mcm | 2:aecccd48773a | 1047 | * |
mcm | 2:aecccd48773a | 1048 | * @return Status of ADS111X_SoftReset. |
mcm | 2:aecccd48773a | 1049 | * |
mcm | 2:aecccd48773a | 1050 | * |
mcm | 2:aecccd48773a | 1051 | * @author Manuel Caballero |
mcm | 2:aecccd48773a | 1052 | * @date 18/June/2020 |
mcm | 2:aecccd48773a | 1053 | * @version 18/June/2020 The ORIGIN |
mcm | 2:aecccd48773a | 1054 | * @pre N/A |
mcm | 2:aecccd48773a | 1055 | * @warning N/A. |
mcm | 2:aecccd48773a | 1056 | */ |
mcm | 2:aecccd48773a | 1057 | ADS111X::ADS111X_status_t ADS111X::ADS111X_SoftReset ( void ) |
mcm | 2:aecccd48773a | 1058 | { |
mcm | 2:aecccd48773a | 1059 | char cmd = 0U; |
mcm | 2:aecccd48773a | 1060 | uint32_t aux = I2C_SUCCESS; |
mcm | 2:aecccd48773a | 1061 | |
mcm | 2:aecccd48773a | 1062 | |
mcm | 2:aecccd48773a | 1063 | /* Update the register */ |
mcm | 2:aecccd48773a | 1064 | cmd = ADS111X_RESET_COMMAND; |
mcm | 2:aecccd48773a | 1065 | aux |= _i2c.write ( 0x00, &cmd, 1U, false ); |
mcm | 2:aecccd48773a | 1066 | |
mcm | 2:aecccd48773a | 1067 | |
mcm | 2:aecccd48773a | 1068 | |
mcm | 2:aecccd48773a | 1069 | if ( aux == I2C_SUCCESS ) |
mcm | 2:aecccd48773a | 1070 | { |
mcm | 2:aecccd48773a | 1071 | return ADS111X_SUCCESS; |
mcm | 2:aecccd48773a | 1072 | } |
mcm | 2:aecccd48773a | 1073 | else |
mcm | 2:aecccd48773a | 1074 | { |
mcm | 2:aecccd48773a | 1075 | return ADS111X_FAILURE; |
mcm | 2:aecccd48773a | 1076 | } |
mcm | 2:aecccd48773a | 1077 | } |