Ultra-Small, Low-Power, I2C-Compatible, 860-SPS, 16-Bit ADCs With Internal Reference, Oscillator, and Programmable Comparator
ADS111X.cpp@4:7853bced749c, 2020-06-19 (annotated)
- 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?
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 | 4:7853bced749c | 165 | if ( _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 | 4:7853bced749c | 226 | /* Only ADS1115 supports this functionality */ |
mcm | 4:7853bced749c | 227 | if ( _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 | 4:7853bced749c | 284 | if ( _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 | 4:7853bced749c | 346 | if ( _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 | 4:7853bced749c | 613 | if ( _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 | 4:7853bced749c | 675 | if ( _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 | 3:4a9619b441f0 | 966 | float myGain = 0.0; |
mcm | 3:4a9619b441f0 | 967 | float 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 | 3:4a9619b441f0 | 971 | aux = ADS111X::ADS111X_GetRawConversion ( &myD->conversion ); |
mcm | 2:aecccd48773a | 972 | |
mcm | 2:aecccd48773a | 973 | /* Set up the gain accordingly */ |
mcm | 3:4a9619b441f0 | 974 | switch ( _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 | 3:4a9619b441f0 | 1018 | myD->conversion.conversion = (float)( -myFactor ); |
mcm | 2:aecccd48773a | 1019 | } |
mcm | 2:aecccd48773a | 1020 | else if ( myD->conversion.raw_conversion == 0x7FFF ) |
mcm | 2:aecccd48773a | 1021 | { |
mcm | 2:aecccd48773a | 1022 | myFactor = ( myGain * ( 32768.0 - 1.0 ) ) / 32768.0; |
mcm | 3:4a9619b441f0 | 1023 | myD->conversion.conversion = (float)( myFactor ); |
mcm | 2:aecccd48773a | 1024 | } |
mcm | 2:aecccd48773a | 1025 | else |
mcm | 2:aecccd48773a | 1026 | { |
mcm | 3:4a9619b441f0 | 1027 | myFactor = (float)( myGain / 32768.0 ); |
mcm | 3:4a9619b441f0 | 1028 | myD->conversion.conversion = (float)( myFactor * myD->conversion.raw_conversion ); |
mcm | 2:aecccd48773a | 1029 | } |
mcm | 2:aecccd48773a | 1030 | |
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 | } |