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