Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
TMP006.cpp@1:e8e0ef45b115, 2018-12-10 (annotated)
- Committer:
- mcm
- Date:
- Mon Dec 10 14:49:48 2018 +0000
- Revision:
- 1:e8e0ef45b115
- Child:
- 2:97a7f871b612
The driver is ready to be tested, both function and header file were completed
Who changed what in which revision?
| User | Revision | Line number | New contents of line | 
|---|---|---|---|
| mcm | 1:e8e0ef45b115 | 1 | /** | 
| mcm | 1:e8e0ef45b115 | 2 | * @brief TMP006.c | 
| mcm | 1:e8e0ef45b115 | 3 | * @details Infrared Thermopile Sensor in Chip-Scale Package. | 
| mcm | 1:e8e0ef45b115 | 4 | * Functions file. | 
| mcm | 1:e8e0ef45b115 | 5 | * | 
| mcm | 1:e8e0ef45b115 | 6 | * | 
| mcm | 1:e8e0ef45b115 | 7 | * @return N/A | 
| mcm | 1:e8e0ef45b115 | 8 | * | 
| mcm | 1:e8e0ef45b115 | 9 | * @author Manuel Caballero | 
| mcm | 1:e8e0ef45b115 | 10 | * @date 10/December/2018 | 
| mcm | 1:e8e0ef45b115 | 11 | * @version 10/December/2018 The ORIGIN | 
| mcm | 1:e8e0ef45b115 | 12 | * @pre N/A | 
| mcm | 1:e8e0ef45b115 | 13 | * @warning N/A | 
| mcm | 1:e8e0ef45b115 | 14 | * @pre This code belongs to Nimbus Centre ( http://www.nimbus.cit.ie ). All rights reserved. | 
| mcm | 1:e8e0ef45b115 | 15 | */ | 
| mcm | 1:e8e0ef45b115 | 16 | |
| mcm | 1:e8e0ef45b115 | 17 | #include "TMP006.h" | 
| mcm | 1:e8e0ef45b115 | 18 | |
| mcm | 1:e8e0ef45b115 | 19 | |
| mcm | 1:e8e0ef45b115 | 20 | TMP006::TMP006 ( PinName sda, PinName scl, uint32_t addr, uint32_t freq ) | 
| mcm | 1:e8e0ef45b115 | 21 | : _i2c ( sda, scl ) | 
| mcm | 1:e8e0ef45b115 | 22 | , _TMP006_Addr ( addr ) | 
| mcm | 1:e8e0ef45b115 | 23 | { | 
| mcm | 1:e8e0ef45b115 | 24 | _i2c.frequency( freq ); | 
| mcm | 1:e8e0ef45b115 | 25 | } | 
| mcm | 1:e8e0ef45b115 | 26 | |
| mcm | 1:e8e0ef45b115 | 27 | |
| mcm | 1:e8e0ef45b115 | 28 | TMP006::~TMP006() | 
| mcm | 1:e8e0ef45b115 | 29 | { | 
| mcm | 1:e8e0ef45b115 | 30 | } | 
| mcm | 1:e8e0ef45b115 | 31 | |
| mcm | 1:e8e0ef45b115 | 32 | |
| mcm | 1:e8e0ef45b115 | 33 | /** | 
| mcm | 1:e8e0ef45b115 | 34 | * @brief TMP006_GetManufacturerID ( TMP006_data_t* ) | 
| mcm | 1:e8e0ef45b115 | 35 | * | 
| mcm | 1:e8e0ef45b115 | 36 | * @details It gets the manufacturer ID. | 
| mcm | 1:e8e0ef45b115 | 37 | * | 
| mcm | 1:e8e0ef45b115 | 38 | * @param[in] N/A | 
| mcm | 1:e8e0ef45b115 | 39 | * | 
| mcm | 1:e8e0ef45b115 | 40 | * @param[out] myManufacturerID: Manufacturer ID. | 
| mcm | 1:e8e0ef45b115 | 41 | * | 
| mcm | 1:e8e0ef45b115 | 42 | * | 
| mcm | 1:e8e0ef45b115 | 43 | * @return Status of TMP006_GetManufacturerID. | 
| mcm | 1:e8e0ef45b115 | 44 | * | 
| mcm | 1:e8e0ef45b115 | 45 | * | 
| mcm | 1:e8e0ef45b115 | 46 | * @author Manuel Caballero | 
| mcm | 1:e8e0ef45b115 | 47 | * @date 7/December/2018 | 
| mcm | 1:e8e0ef45b115 | 48 | * @version 7/December/2018 The ORIGIN | 
| mcm | 1:e8e0ef45b115 | 49 | * @pre N/A. | 
| mcm | 1:e8e0ef45b115 | 50 | * @warning N/A. | 
| mcm | 1:e8e0ef45b115 | 51 | */ | 
| mcm | 1:e8e0ef45b115 | 52 | TMP006::TMP006_status_t TMP006::TMP006_GetManufacturerID ( TMP006_data_t* myManufacturerID ) | 
| mcm | 1:e8e0ef45b115 | 53 | { | 
| mcm | 1:e8e0ef45b115 | 54 | char cmd[] = { 0U, 0U }; | 
| mcm | 1:e8e0ef45b115 | 55 | uint32_t aux; | 
| mcm | 1:e8e0ef45b115 | 56 | |
| mcm | 1:e8e0ef45b115 | 57 | |
| mcm | 1:e8e0ef45b115 | 58 | /* Read the register */ | 
| mcm | 1:e8e0ef45b115 | 59 | cmd[0] = TMP006_MANUFACTURER_ID; | 
| mcm | 1:e8e0ef45b115 | 60 | aux = _i2c.write ( _TMP006_Addr, &cmd[0], 1U, true ); | 
| mcm | 1:e8e0ef45b115 | 61 | aux = _i2c.read ( _TMP006_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ) ); | 
| mcm | 1:e8e0ef45b115 | 62 | |
| mcm | 1:e8e0ef45b115 | 63 | |
| mcm | 1:e8e0ef45b115 | 64 | /* Parse data */ | 
| mcm | 1:e8e0ef45b115 | 65 | myManufacturerID->ManufacturerID = ( cmd[0] << 8U ); | 
| mcm | 1:e8e0ef45b115 | 66 | myManufacturerID->ManufacturerID |= cmd[1]; | 
| mcm | 1:e8e0ef45b115 | 67 | |
| mcm | 1:e8e0ef45b115 | 68 | |
| mcm | 1:e8e0ef45b115 | 69 | |
| mcm | 1:e8e0ef45b115 | 70 | |
| mcm | 1:e8e0ef45b115 | 71 | if ( aux == I2C_SUCCESS ) | 
| mcm | 1:e8e0ef45b115 | 72 | { | 
| mcm | 1:e8e0ef45b115 | 73 | return TMP006_SUCCESS; | 
| mcm | 1:e8e0ef45b115 | 74 | } | 
| mcm | 1:e8e0ef45b115 | 75 | else | 
| mcm | 1:e8e0ef45b115 | 76 | { | 
| mcm | 1:e8e0ef45b115 | 77 | return TMP006_FAILURE; | 
| mcm | 1:e8e0ef45b115 | 78 | } | 
| mcm | 1:e8e0ef45b115 | 79 | } | 
| mcm | 1:e8e0ef45b115 | 80 | |
| mcm | 1:e8e0ef45b115 | 81 | |
| mcm | 1:e8e0ef45b115 | 82 | |
| mcm | 1:e8e0ef45b115 | 83 | /** | 
| mcm | 1:e8e0ef45b115 | 84 | * @brief TMP006_GetDeviceID ( TMP006_data_t* ) | 
| mcm | 1:e8e0ef45b115 | 85 | * | 
| mcm | 1:e8e0ef45b115 | 86 | * @details It gets the device ID. | 
| mcm | 1:e8e0ef45b115 | 87 | * | 
| mcm | 1:e8e0ef45b115 | 88 | * @param[in] N/A. | 
| mcm | 1:e8e0ef45b115 | 89 | * | 
| mcm | 1:e8e0ef45b115 | 90 | * @param[out] myDeviceID: Device ID. | 
| mcm | 1:e8e0ef45b115 | 91 | * | 
| mcm | 1:e8e0ef45b115 | 92 | * | 
| mcm | 1:e8e0ef45b115 | 93 | * @return Status of TMP006_GetDeviceID. | 
| mcm | 1:e8e0ef45b115 | 94 | * | 
| mcm | 1:e8e0ef45b115 | 95 | * | 
| mcm | 1:e8e0ef45b115 | 96 | * @author Manuel Caballero | 
| mcm | 1:e8e0ef45b115 | 97 | * @date 7/December/2018 | 
| mcm | 1:e8e0ef45b115 | 98 | * @version 7/December/2018 The ORIGIN | 
| mcm | 1:e8e0ef45b115 | 99 | * @pre N/A. | 
| mcm | 1:e8e0ef45b115 | 100 | * @warning N/A. | 
| mcm | 1:e8e0ef45b115 | 101 | */ | 
| mcm | 1:e8e0ef45b115 | 102 | TMP006::TMP006_status_t TMP006::TMP006_GetDeviceID ( TMP006_data_t* myDeviceID ) | 
| mcm | 1:e8e0ef45b115 | 103 | { | 
| mcm | 1:e8e0ef45b115 | 104 | char cmd[] = { 0U, 0U }; | 
| mcm | 1:e8e0ef45b115 | 105 | uint32_t aux; | 
| mcm | 1:e8e0ef45b115 | 106 | |
| mcm | 1:e8e0ef45b115 | 107 | |
| mcm | 1:e8e0ef45b115 | 108 | /* Read the register */ | 
| mcm | 1:e8e0ef45b115 | 109 | cmd[0] = TMP006_DEVICE_ID; | 
| mcm | 1:e8e0ef45b115 | 110 | aux = _i2c.write ( _TMP006_Addr, &cmd[0], 1U, true ); | 
| mcm | 1:e8e0ef45b115 | 111 | aux = _i2c.read ( _TMP006_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ) ); | 
| mcm | 1:e8e0ef45b115 | 112 | |
| mcm | 1:e8e0ef45b115 | 113 | |
| mcm | 1:e8e0ef45b115 | 114 | /* Parse data */ | 
| mcm | 1:e8e0ef45b115 | 115 | myDeviceID->DeviceID = ( cmd[0] << 8U ); | 
| mcm | 1:e8e0ef45b115 | 116 | myDeviceID->DeviceID |= cmd[1]; | 
| mcm | 1:e8e0ef45b115 | 117 | |
| mcm | 1:e8e0ef45b115 | 118 | |
| mcm | 1:e8e0ef45b115 | 119 | |
| mcm | 1:e8e0ef45b115 | 120 | |
| mcm | 1:e8e0ef45b115 | 121 | if ( aux == I2C_SUCCESS ) | 
| mcm | 1:e8e0ef45b115 | 122 | { | 
| mcm | 1:e8e0ef45b115 | 123 | return TMP006_SUCCESS; | 
| mcm | 1:e8e0ef45b115 | 124 | } | 
| mcm | 1:e8e0ef45b115 | 125 | else | 
| mcm | 1:e8e0ef45b115 | 126 | { | 
| mcm | 1:e8e0ef45b115 | 127 | return TMP006_FAILURE; | 
| mcm | 1:e8e0ef45b115 | 128 | } | 
| mcm | 1:e8e0ef45b115 | 129 | } | 
| mcm | 1:e8e0ef45b115 | 130 | |
| mcm | 1:e8e0ef45b115 | 131 | |
| mcm | 1:e8e0ef45b115 | 132 | |
| mcm | 1:e8e0ef45b115 | 133 | /** | 
| mcm | 1:e8e0ef45b115 | 134 | * @brief TMP006_ReadConfigurationRegister ( TMP006_data_t* ) | 
| mcm | 1:e8e0ef45b115 | 135 | * | 
| mcm | 1:e8e0ef45b115 | 136 | * @details It reads the configuration register. | 
| mcm | 1:e8e0ef45b115 | 137 | * | 
| mcm | 1:e8e0ef45b115 | 138 | * @param[in] N/A | 
| mcm | 1:e8e0ef45b115 | 139 | * | 
| mcm | 1:e8e0ef45b115 | 140 | * @param[out] myConfReg: Configuration register value. | 
| mcm | 1:e8e0ef45b115 | 141 | * | 
| mcm | 1:e8e0ef45b115 | 142 | * | 
| mcm | 1:e8e0ef45b115 | 143 | * @return Status of TMP006_ReadConfigurationRegister. | 
| mcm | 1:e8e0ef45b115 | 144 | * | 
| mcm | 1:e8e0ef45b115 | 145 | * | 
| mcm | 1:e8e0ef45b115 | 146 | * @author Manuel Caballero | 
| mcm | 1:e8e0ef45b115 | 147 | * @date 7/December/2018 | 
| mcm | 1:e8e0ef45b115 | 148 | * @version 7/December/2018 The ORIGIN | 
| mcm | 1:e8e0ef45b115 | 149 | * @pre N/A. | 
| mcm | 1:e8e0ef45b115 | 150 | * @warning N/A. | 
| mcm | 1:e8e0ef45b115 | 151 | */ | 
| mcm | 1:e8e0ef45b115 | 152 | TMP006::TMP006_status_t TMP006::TMP006_ReadConfigurationRegister ( TMP006_data_t* myConfReg ) | 
| mcm | 1:e8e0ef45b115 | 153 | { | 
| mcm | 1:e8e0ef45b115 | 154 | char cmd[] = { 0U, 0U }; | 
| mcm | 1:e8e0ef45b115 | 155 | uint32_t aux; | 
| mcm | 1:e8e0ef45b115 | 156 | |
| mcm | 1:e8e0ef45b115 | 157 | |
| mcm | 1:e8e0ef45b115 | 158 | /* Read the register */ | 
| mcm | 1:e8e0ef45b115 | 159 | cmd[0] = TMP006_CONFIGURATION; | 
| mcm | 1:e8e0ef45b115 | 160 | aux = _i2c.write ( _TMP006_Addr, &cmd[0], 1U, true ); | 
| mcm | 1:e8e0ef45b115 | 161 | aux = _i2c.read ( _TMP006_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ) ); | 
| mcm | 1:e8e0ef45b115 | 162 | |
| mcm | 1:e8e0ef45b115 | 163 | |
| mcm | 1:e8e0ef45b115 | 164 | /* Parse data */ | 
| mcm | 1:e8e0ef45b115 | 165 | myConfReg->ConfigurationRegister = ( cmd[0] << 8U ); | 
| mcm | 1:e8e0ef45b115 | 166 | myConfReg->ConfigurationRegister |= cmd[1]; | 
| mcm | 1:e8e0ef45b115 | 167 | |
| mcm | 1:e8e0ef45b115 | 168 | |
| mcm | 1:e8e0ef45b115 | 169 | |
| mcm | 1:e8e0ef45b115 | 170 | |
| mcm | 1:e8e0ef45b115 | 171 | if ( aux == I2C_SUCCESS ) | 
| mcm | 1:e8e0ef45b115 | 172 | { | 
| mcm | 1:e8e0ef45b115 | 173 | return TMP006_SUCCESS; | 
| mcm | 1:e8e0ef45b115 | 174 | } | 
| mcm | 1:e8e0ef45b115 | 175 | else | 
| mcm | 1:e8e0ef45b115 | 176 | { | 
| mcm | 1:e8e0ef45b115 | 177 | return TMP006_FAILURE; | 
| mcm | 1:e8e0ef45b115 | 178 | } | 
| mcm | 1:e8e0ef45b115 | 179 | } | 
| mcm | 1:e8e0ef45b115 | 180 | |
| mcm | 1:e8e0ef45b115 | 181 | |
| mcm | 1:e8e0ef45b115 | 182 | |
| mcm | 1:e8e0ef45b115 | 183 | /** | 
| mcm | 1:e8e0ef45b115 | 184 | * @brief TMP006_SoftwareReset ( void ) | 
| mcm | 1:e8e0ef45b115 | 185 | * | 
| mcm | 1:e8e0ef45b115 | 186 | * @details It performs a software reset. | 
| mcm | 1:e8e0ef45b115 | 187 | * | 
| mcm | 1:e8e0ef45b115 | 188 | * @param[in] N/A. | 
| mcm | 1:e8e0ef45b115 | 189 | * | 
| mcm | 1:e8e0ef45b115 | 190 | * @param[out] N/A. | 
| mcm | 1:e8e0ef45b115 | 191 | * | 
| mcm | 1:e8e0ef45b115 | 192 | * | 
| mcm | 1:e8e0ef45b115 | 193 | * @return Status of TMP006_SoftwareReset. | 
| mcm | 1:e8e0ef45b115 | 194 | * | 
| mcm | 1:e8e0ef45b115 | 195 | * | 
| mcm | 1:e8e0ef45b115 | 196 | * @author Manuel Caballero | 
| mcm | 1:e8e0ef45b115 | 197 | * @date 7/December/2018 | 
| mcm | 1:e8e0ef45b115 | 198 | * @version 7/December/2018 The ORIGIN | 
| mcm | 1:e8e0ef45b115 | 199 | * @pre N/A. | 
| mcm | 1:e8e0ef45b115 | 200 | * @warning N/A. | 
| mcm | 1:e8e0ef45b115 | 201 | */ | 
| mcm | 1:e8e0ef45b115 | 202 | TMP006::TMP006_status_t TMP006::TMP006_SoftwareReset ( void ) | 
| mcm | 1:e8e0ef45b115 | 203 | { | 
| mcm | 1:e8e0ef45b115 | 204 | char cmd[] = { 0U, 0U, 0U }; | 
| mcm | 1:e8e0ef45b115 | 205 | uint32_t aux; | 
| mcm | 1:e8e0ef45b115 | 206 | |
| mcm | 1:e8e0ef45b115 | 207 | |
| mcm | 1:e8e0ef45b115 | 208 | /* Read the register */ | 
| mcm | 1:e8e0ef45b115 | 209 | cmd[0] = TMP006_CONFIGURATION; | 
| mcm | 1:e8e0ef45b115 | 210 | aux = _i2c.write ( _TMP006_Addr, &cmd[0], 1U, true ); | 
| mcm | 1:e8e0ef45b115 | 211 | aux = _i2c.read ( _TMP006_Addr, &cmd[0], 2U ); | 
| mcm | 1:e8e0ef45b115 | 212 | |
| mcm | 1:e8e0ef45b115 | 213 | /* Mask the option and update the register */ | 
| mcm | 1:e8e0ef45b115 | 214 | cmd[2] = cmd[1]; | 
| mcm | 1:e8e0ef45b115 | 215 | cmd[1] = ( ( cmd[0] & ~RST_BIT_MASK ) | RST_SOFTWARE_RESET ); | 
| mcm | 1:e8e0ef45b115 | 216 | cmd[0] = TMP006_CONFIGURATION; | 
| mcm | 1:e8e0ef45b115 | 217 | aux = _i2c.write ( _TMP006_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false ); | 
| mcm | 1:e8e0ef45b115 | 218 | |
| mcm | 1:e8e0ef45b115 | 219 | |
| mcm | 1:e8e0ef45b115 | 220 | |
| mcm | 1:e8e0ef45b115 | 221 | |
| mcm | 1:e8e0ef45b115 | 222 | if ( aux == I2C_SUCCESS ) | 
| mcm | 1:e8e0ef45b115 | 223 | { | 
| mcm | 1:e8e0ef45b115 | 224 | return TMP006_SUCCESS; | 
| mcm | 1:e8e0ef45b115 | 225 | } | 
| mcm | 1:e8e0ef45b115 | 226 | else | 
| mcm | 1:e8e0ef45b115 | 227 | { | 
| mcm | 1:e8e0ef45b115 | 228 | return TMP006_FAILURE; | 
| mcm | 1:e8e0ef45b115 | 229 | } | 
| mcm | 1:e8e0ef45b115 | 230 | } | 
| mcm | 1:e8e0ef45b115 | 231 | |
| mcm | 1:e8e0ef45b115 | 232 | |
| mcm | 1:e8e0ef45b115 | 233 | |
| mcm | 1:e8e0ef45b115 | 234 | /** | 
| mcm | 1:e8e0ef45b115 | 235 | * @brief TMP006_SetModeOperation ( TMP006_mod_t ) | 
| mcm | 1:e8e0ef45b115 | 236 | * | 
| mcm | 1:e8e0ef45b115 | 237 | * @details It sets mode of operation. | 
| mcm | 1:e8e0ef45b115 | 238 | * | 
| mcm | 1:e8e0ef45b115 | 239 | * @param[in] myModeOpreation: Mode of operation ( low power mode ). | 
| mcm | 1:e8e0ef45b115 | 240 | * | 
| mcm | 1:e8e0ef45b115 | 241 | * @param[out] N/A. | 
| mcm | 1:e8e0ef45b115 | 242 | * | 
| mcm | 1:e8e0ef45b115 | 243 | * | 
| mcm | 1:e8e0ef45b115 | 244 | * @return Status of TMP006_SetModeOperation. | 
| mcm | 1:e8e0ef45b115 | 245 | * | 
| mcm | 1:e8e0ef45b115 | 246 | * | 
| mcm | 1:e8e0ef45b115 | 247 | * @author Manuel Caballero | 
| mcm | 1:e8e0ef45b115 | 248 | * @date 7/December/2018 | 
| mcm | 1:e8e0ef45b115 | 249 | * @version 7/December/2018 The ORIGIN | 
| mcm | 1:e8e0ef45b115 | 250 | * @pre N/A. | 
| mcm | 1:e8e0ef45b115 | 251 | * @warning N/A. | 
| mcm | 1:e8e0ef45b115 | 252 | */ | 
| mcm | 1:e8e0ef45b115 | 253 | TMP006::TMP006_status_t TMP006::TMP006_SetModeOperation ( TMP006_mod_t myModeOpreation ) | 
| mcm | 1:e8e0ef45b115 | 254 | { | 
| mcm | 1:e8e0ef45b115 | 255 | char cmd[] = { 0U, 0U, 0U }; | 
| mcm | 1:e8e0ef45b115 | 256 | uint32_t aux; | 
| mcm | 1:e8e0ef45b115 | 257 | |
| mcm | 1:e8e0ef45b115 | 258 | |
| mcm | 1:e8e0ef45b115 | 259 | /* Read the register */ | 
| mcm | 1:e8e0ef45b115 | 260 | cmd[0] = TMP006_CONFIGURATION; | 
| mcm | 1:e8e0ef45b115 | 261 | aux = _i2c.write ( _TMP006_Addr, &cmd[0], 1U, true ); | 
| mcm | 1:e8e0ef45b115 | 262 | aux = _i2c.read ( _TMP006_Addr, &cmd[0], 2U ); | 
| mcm | 1:e8e0ef45b115 | 263 | |
| mcm | 1:e8e0ef45b115 | 264 | /* Mask the option and update the register */ | 
| mcm | 1:e8e0ef45b115 | 265 | cmd[2] = cmd[1]; | 
| mcm | 1:e8e0ef45b115 | 266 | cmd[1] = ( ( cmd[0] & ~MOD_MASK ) | myModeOpreation ); | 
| mcm | 1:e8e0ef45b115 | 267 | cmd[0] = TMP006_CONFIGURATION; | 
| mcm | 1:e8e0ef45b115 | 268 | aux = _i2c.write ( _TMP006_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false ); | 
| mcm | 1:e8e0ef45b115 | 269 | |
| mcm | 1:e8e0ef45b115 | 270 | |
| mcm | 1:e8e0ef45b115 | 271 | |
| mcm | 1:e8e0ef45b115 | 272 | |
| mcm | 1:e8e0ef45b115 | 273 | if ( aux == I2C_SUCCESS ) | 
| mcm | 1:e8e0ef45b115 | 274 | { | 
| mcm | 1:e8e0ef45b115 | 275 | return TMP006_SUCCESS; | 
| mcm | 1:e8e0ef45b115 | 276 | } | 
| mcm | 1:e8e0ef45b115 | 277 | else | 
| mcm | 1:e8e0ef45b115 | 278 | { | 
| mcm | 1:e8e0ef45b115 | 279 | return TMP006_FAILURE; | 
| mcm | 1:e8e0ef45b115 | 280 | } | 
| mcm | 1:e8e0ef45b115 | 281 | } | 
| mcm | 1:e8e0ef45b115 | 282 | |
| mcm | 1:e8e0ef45b115 | 283 | |
| mcm | 1:e8e0ef45b115 | 284 | |
| mcm | 1:e8e0ef45b115 | 285 | /** | 
| mcm | 1:e8e0ef45b115 | 286 | * @brief TMP006_SetConversionRate ( TMP006_cr_t ) | 
| mcm | 1:e8e0ef45b115 | 287 | * | 
| mcm | 1:e8e0ef45b115 | 288 | * @details It sets conversion rate. | 
| mcm | 1:e8e0ef45b115 | 289 | * | 
| mcm | 1:e8e0ef45b115 | 290 | * @param[in] myConversionRate: Conversion rate. | 
| mcm | 1:e8e0ef45b115 | 291 | * | 
| mcm | 1:e8e0ef45b115 | 292 | * @param[out] N/A. | 
| mcm | 1:e8e0ef45b115 | 293 | * | 
| mcm | 1:e8e0ef45b115 | 294 | * | 
| mcm | 1:e8e0ef45b115 | 295 | * @return Status of TMP006_SetConversionRate. | 
| mcm | 1:e8e0ef45b115 | 296 | * | 
| mcm | 1:e8e0ef45b115 | 297 | * | 
| mcm | 1:e8e0ef45b115 | 298 | * @author Manuel Caballero | 
| mcm | 1:e8e0ef45b115 | 299 | * @date 7/December/2018 | 
| mcm | 1:e8e0ef45b115 | 300 | * @version 7/December/2018 The ORIGIN | 
| mcm | 1:e8e0ef45b115 | 301 | * @pre N/A. | 
| mcm | 1:e8e0ef45b115 | 302 | * @warning N/A. | 
| mcm | 1:e8e0ef45b115 | 303 | */ | 
| mcm | 1:e8e0ef45b115 | 304 | TMP006::TMP006_status_t TMP006::TMP006_SetConversionRate ( TMP006_cr_t myConversionRate ) | 
| mcm | 1:e8e0ef45b115 | 305 | { | 
| mcm | 1:e8e0ef45b115 | 306 | char cmd[] = { 0U, 0U, 0U }; | 
| mcm | 1:e8e0ef45b115 | 307 | uint32_t aux; | 
| mcm | 1:e8e0ef45b115 | 308 | |
| mcm | 1:e8e0ef45b115 | 309 | |
| mcm | 1:e8e0ef45b115 | 310 | /* Read the register */ | 
| mcm | 1:e8e0ef45b115 | 311 | cmd[0] = TMP006_CONFIGURATION; | 
| mcm | 1:e8e0ef45b115 | 312 | aux = _i2c.write ( _TMP006_Addr, &cmd[0], 1U, true ); | 
| mcm | 1:e8e0ef45b115 | 313 | aux = _i2c.read ( _TMP006_Addr, &cmd[0], 2U ); | 
| mcm | 1:e8e0ef45b115 | 314 | |
| mcm | 1:e8e0ef45b115 | 315 | /* Mask the option and update the register */ | 
| mcm | 1:e8e0ef45b115 | 316 | cmd[2] = cmd[1]; | 
| mcm | 1:e8e0ef45b115 | 317 | cmd[1] = ( ( cmd[0] & ~CR_MASK ) | myConversionRate ); | 
| mcm | 1:e8e0ef45b115 | 318 | cmd[0] = TMP006_CONFIGURATION; | 
| mcm | 1:e8e0ef45b115 | 319 | aux = _i2c.write ( _TMP006_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false ); | 
| mcm | 1:e8e0ef45b115 | 320 | |
| mcm | 1:e8e0ef45b115 | 321 | |
| mcm | 1:e8e0ef45b115 | 322 | |
| mcm | 1:e8e0ef45b115 | 323 | |
| mcm | 1:e8e0ef45b115 | 324 | if ( aux == I2C_SUCCESS ) | 
| mcm | 1:e8e0ef45b115 | 325 | { | 
| mcm | 1:e8e0ef45b115 | 326 | return TMP006_SUCCESS; | 
| mcm | 1:e8e0ef45b115 | 327 | } | 
| mcm | 1:e8e0ef45b115 | 328 | else | 
| mcm | 1:e8e0ef45b115 | 329 | { | 
| mcm | 1:e8e0ef45b115 | 330 | return TMP006_FAILURE; | 
| mcm | 1:e8e0ef45b115 | 331 | } | 
| mcm | 1:e8e0ef45b115 | 332 | } | 
| mcm | 1:e8e0ef45b115 | 333 | |
| mcm | 1:e8e0ef45b115 | 334 | |
| mcm | 1:e8e0ef45b115 | 335 | |
| mcm | 1:e8e0ef45b115 | 336 | /** | 
| mcm | 1:e8e0ef45b115 | 337 | * @brief TMP006_SetnDRDY_EnableBit ( TMP006_en_t ) | 
| mcm | 1:e8e0ef45b115 | 338 | * | 
| mcm | 1:e8e0ef45b115 | 339 | * @details It sets conversion rate. | 
| mcm | 1:e8e0ef45b115 | 340 | * | 
| mcm | 1:e8e0ef45b115 | 341 | * @param[in] myEnableBit: Enable bit pin behaviour. | 
| mcm | 1:e8e0ef45b115 | 342 | * | 
| mcm | 1:e8e0ef45b115 | 343 | * @param[out] N/A. | 
| mcm | 1:e8e0ef45b115 | 344 | * | 
| mcm | 1:e8e0ef45b115 | 345 | * | 
| mcm | 1:e8e0ef45b115 | 346 | * @return Status of TMP006_SetnDRDY_EnableBit. | 
| mcm | 1:e8e0ef45b115 | 347 | * | 
| mcm | 1:e8e0ef45b115 | 348 | * | 
| mcm | 1:e8e0ef45b115 | 349 | * @author Manuel Caballero | 
| mcm | 1:e8e0ef45b115 | 350 | * @date 7/December/2018 | 
| mcm | 1:e8e0ef45b115 | 351 | * @version 7/December/2018 The ORIGIN | 
| mcm | 1:e8e0ef45b115 | 352 | * @pre N/A. | 
| mcm | 1:e8e0ef45b115 | 353 | * @warning N/A. | 
| mcm | 1:e8e0ef45b115 | 354 | */ | 
| mcm | 1:e8e0ef45b115 | 355 | TMP006::TMP006_status_t TMP006::TMP006_SetnDRDY_EnableBit ( TMP006_en_t myEnableBit ) | 
| mcm | 1:e8e0ef45b115 | 356 | { | 
| mcm | 1:e8e0ef45b115 | 357 | char cmd[] = { 0U, 0U, 0U }; | 
| mcm | 1:e8e0ef45b115 | 358 | uint32_t aux; | 
| mcm | 1:e8e0ef45b115 | 359 | |
| mcm | 1:e8e0ef45b115 | 360 | |
| mcm | 1:e8e0ef45b115 | 361 | /* Read the register */ | 
| mcm | 1:e8e0ef45b115 | 362 | cmd[0] = TMP006_CONFIGURATION; | 
| mcm | 1:e8e0ef45b115 | 363 | aux = _i2c.write ( _TMP006_Addr, &cmd[0], 1U, true ); | 
| mcm | 1:e8e0ef45b115 | 364 | aux = _i2c.read ( _TMP006_Addr, &cmd[0], 2U ); | 
| mcm | 1:e8e0ef45b115 | 365 | |
| mcm | 1:e8e0ef45b115 | 366 | /* Mask the option and update the register */ | 
| mcm | 1:e8e0ef45b115 | 367 | cmd[2] = cmd[1]; | 
| mcm | 1:e8e0ef45b115 | 368 | cmd[1] = ( ( cmd[0] & ~EN_MASK ) | myEnableBit ); | 
| mcm | 1:e8e0ef45b115 | 369 | cmd[0] = TMP006_CONFIGURATION; | 
| mcm | 1:e8e0ef45b115 | 370 | aux = _i2c.write ( _TMP006_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false ); | 
| mcm | 1:e8e0ef45b115 | 371 | |
| mcm | 1:e8e0ef45b115 | 372 | |
| mcm | 1:e8e0ef45b115 | 373 | |
| mcm | 1:e8e0ef45b115 | 374 | |
| mcm | 1:e8e0ef45b115 | 375 | if ( aux == I2C_SUCCESS ) | 
| mcm | 1:e8e0ef45b115 | 376 | { | 
| mcm | 1:e8e0ef45b115 | 377 | return TMP006_SUCCESS; | 
| mcm | 1:e8e0ef45b115 | 378 | } | 
| mcm | 1:e8e0ef45b115 | 379 | else | 
| mcm | 1:e8e0ef45b115 | 380 | { | 
| mcm | 1:e8e0ef45b115 | 381 | return TMP006_FAILURE; | 
| mcm | 1:e8e0ef45b115 | 382 | } | 
| mcm | 1:e8e0ef45b115 | 383 | } | 
| mcm | 1:e8e0ef45b115 | 384 | |
| mcm | 1:e8e0ef45b115 | 385 | |
| mcm | 1:e8e0ef45b115 | 386 | |
| mcm | 1:e8e0ef45b115 | 387 | /** | 
| mcm | 1:e8e0ef45b115 | 388 | * @brief TMP006_GetRawTemperature ( TMP006_data_t* ) | 
| mcm | 1:e8e0ef45b115 | 389 | * | 
| mcm | 1:e8e0ef45b115 | 390 | * @details It reads raw temperature ( T_DIE ) value. | 
| mcm | 1:e8e0ef45b115 | 391 | * | 
| mcm | 1:e8e0ef45b115 | 392 | * @param[in] N/A | 
| mcm | 1:e8e0ef45b115 | 393 | * | 
| mcm | 1:e8e0ef45b115 | 394 | * @param[out] myRawTemperature: Raw temperature value. | 
| mcm | 1:e8e0ef45b115 | 395 | * | 
| mcm | 1:e8e0ef45b115 | 396 | * | 
| mcm | 1:e8e0ef45b115 | 397 | * @return Status of TMP006_GetRawTemperature. | 
| mcm | 1:e8e0ef45b115 | 398 | * | 
| mcm | 1:e8e0ef45b115 | 399 | * | 
| mcm | 1:e8e0ef45b115 | 400 | * @author Manuel Caballero | 
| mcm | 1:e8e0ef45b115 | 401 | * @date 10/December/2018 | 
| mcm | 1:e8e0ef45b115 | 402 | * @version 10/December/2018 The ORIGIN | 
| mcm | 1:e8e0ef45b115 | 403 | * @pre N/A. | 
| mcm | 1:e8e0ef45b115 | 404 | * @warning N/A. | 
| mcm | 1:e8e0ef45b115 | 405 | */ | 
| mcm | 1:e8e0ef45b115 | 406 | TMP006::TMP006_status_t TMP006::TMP006_GetRawTemperature ( TMP006_data_t* myRawTemperature ) | 
| mcm | 1:e8e0ef45b115 | 407 | { | 
| mcm | 1:e8e0ef45b115 | 408 | char cmd[] = { 0U, 0U }; | 
| mcm | 1:e8e0ef45b115 | 409 | uint32_t aux; | 
| mcm | 1:e8e0ef45b115 | 410 | |
| mcm | 1:e8e0ef45b115 | 411 | |
| mcm | 1:e8e0ef45b115 | 412 | /* Read the register */ | 
| mcm | 1:e8e0ef45b115 | 413 | cmd[0] = TMP006_LOCAL_TEMPERATURE; | 
| mcm | 1:e8e0ef45b115 | 414 | aux = _i2c.write ( _TMP006_Addr, &cmd[0], 1U, true ); | 
| mcm | 1:e8e0ef45b115 | 415 | aux = _i2c.read ( _TMP006_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ) ); | 
| mcm | 1:e8e0ef45b115 | 416 | |
| mcm | 1:e8e0ef45b115 | 417 | /* Parse the data */ | 
| mcm | 1:e8e0ef45b115 | 418 | myRawTemperature->TemperatureRegister = cmd[0]; | 
| mcm | 1:e8e0ef45b115 | 419 | myRawTemperature->TemperatureRegister <<= 8U; | 
| mcm | 1:e8e0ef45b115 | 420 | myRawTemperature->TemperatureRegister |= cmd[1]; | 
| mcm | 1:e8e0ef45b115 | 421 | |
| mcm | 1:e8e0ef45b115 | 422 | /* Temperature register is configured as a 14-bit value */ | 
| mcm | 1:e8e0ef45b115 | 423 | myRawTemperature->TemperatureRegister >>= 2U; | 
| mcm | 1:e8e0ef45b115 | 424 | |
| mcm | 1:e8e0ef45b115 | 425 | |
| mcm | 1:e8e0ef45b115 | 426 | |
| mcm | 1:e8e0ef45b115 | 427 | |
| mcm | 1:e8e0ef45b115 | 428 | if ( aux == I2C_SUCCESS ) | 
| mcm | 1:e8e0ef45b115 | 429 | { | 
| mcm | 1:e8e0ef45b115 | 430 | return TMP006_SUCCESS; | 
| mcm | 1:e8e0ef45b115 | 431 | } | 
| mcm | 1:e8e0ef45b115 | 432 | else | 
| mcm | 1:e8e0ef45b115 | 433 | { | 
| mcm | 1:e8e0ef45b115 | 434 | return TMP006_FAILURE; | 
| mcm | 1:e8e0ef45b115 | 435 | } | 
| mcm | 1:e8e0ef45b115 | 436 | } | 
| mcm | 1:e8e0ef45b115 | 437 | |
| mcm | 1:e8e0ef45b115 | 438 | |
| mcm | 1:e8e0ef45b115 | 439 | |
| mcm | 1:e8e0ef45b115 | 440 | /** | 
| mcm | 1:e8e0ef45b115 | 441 | * @brief TMP006_GetRawSensorVoltage ( TMP006_data_t* ) | 
| mcm | 1:e8e0ef45b115 | 442 | * | 
| mcm | 1:e8e0ef45b115 | 443 | * @details It reads raw sensor voltage result ( V_SENSOR ) register. | 
| mcm | 1:e8e0ef45b115 | 444 | * | 
| mcm | 1:e8e0ef45b115 | 445 | * @param[in] N/A. | 
| mcm | 1:e8e0ef45b115 | 446 | * | 
| mcm | 1:e8e0ef45b115 | 447 | * @param[out] myRawVoltage: Raw sensor voltage value. | 
| mcm | 1:e8e0ef45b115 | 448 | * | 
| mcm | 1:e8e0ef45b115 | 449 | * | 
| mcm | 1:e8e0ef45b115 | 450 | * @return Status of TMP006_GetRawSensorVoltage. | 
| mcm | 1:e8e0ef45b115 | 451 | * | 
| mcm | 1:e8e0ef45b115 | 452 | * | 
| mcm | 1:e8e0ef45b115 | 453 | * @author Manuel Caballero | 
| mcm | 1:e8e0ef45b115 | 454 | * @date 10/December/2018 | 
| mcm | 1:e8e0ef45b115 | 455 | * @version 10/December/2018 The ORIGIN | 
| mcm | 1:e8e0ef45b115 | 456 | * @pre N/A. | 
| mcm | 1:e8e0ef45b115 | 457 | * @warning N/A. | 
| mcm | 1:e8e0ef45b115 | 458 | */ | 
| mcm | 1:e8e0ef45b115 | 459 | TMP006::TMP006_status_t TMP006::TMP006_GetRawSensorVoltage ( TMP006_data_t* myRawVoltage ) | 
| mcm | 1:e8e0ef45b115 | 460 | { | 
| mcm | 1:e8e0ef45b115 | 461 | char cmd[] = { 0U, 0U }; | 
| mcm | 1:e8e0ef45b115 | 462 | uint32_t aux; | 
| mcm | 1:e8e0ef45b115 | 463 | |
| mcm | 1:e8e0ef45b115 | 464 | |
| mcm | 1:e8e0ef45b115 | 465 | /* Read the register */ | 
| mcm | 1:e8e0ef45b115 | 466 | cmd[0] = TMP006_SENSOR_VOLTAGE; | 
| mcm | 1:e8e0ef45b115 | 467 | aux = _i2c.write ( _TMP006_Addr, &cmd[0], 1U, true ); | 
| mcm | 1:e8e0ef45b115 | 468 | aux = _i2c.read ( _TMP006_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ) ); | 
| mcm | 1:e8e0ef45b115 | 469 | |
| mcm | 1:e8e0ef45b115 | 470 | /* Parse the data */ | 
| mcm | 1:e8e0ef45b115 | 471 | myRawVoltage->SensorVoltageResultRegister = cmd[0]; | 
| mcm | 1:e8e0ef45b115 | 472 | myRawVoltage->SensorVoltageResultRegister <<= 8U; | 
| mcm | 1:e8e0ef45b115 | 473 | myRawVoltage->SensorVoltageResultRegister |= cmd[1]; | 
| mcm | 1:e8e0ef45b115 | 474 | |
| mcm | 1:e8e0ef45b115 | 475 | |
| mcm | 1:e8e0ef45b115 | 476 | |
| mcm | 1:e8e0ef45b115 | 477 | |
| mcm | 1:e8e0ef45b115 | 478 | if ( aux == I2C_SUCCESS ) | 
| mcm | 1:e8e0ef45b115 | 479 | { | 
| mcm | 1:e8e0ef45b115 | 480 | return TMP006_SUCCESS; | 
| mcm | 1:e8e0ef45b115 | 481 | } | 
| mcm | 1:e8e0ef45b115 | 482 | else | 
| mcm | 1:e8e0ef45b115 | 483 | { | 
| mcm | 1:e8e0ef45b115 | 484 | return TMP006_FAILURE; | 
| mcm | 1:e8e0ef45b115 | 485 | } | 
| mcm | 1:e8e0ef45b115 | 486 | } | 
| mcm | 1:e8e0ef45b115 | 487 | |
| mcm | 1:e8e0ef45b115 | 488 | |
| mcm | 1:e8e0ef45b115 | 489 | |
| mcm | 1:e8e0ef45b115 | 490 | /** | 
| mcm | 1:e8e0ef45b115 | 491 | * @brief TMP006_CalculateTemperature ( TMP006_data_t* ) | 
| mcm | 1:e8e0ef45b115 | 492 | * | 
| mcm | 1:e8e0ef45b115 | 493 | * @details It calculates the real temperature ( T_DIE ) value. | 
| mcm | 1:e8e0ef45b115 | 494 | * | 
| mcm | 1:e8e0ef45b115 | 495 | * @param[in] myRawTemperature: Raw temperature value. | 
| mcm | 1:e8e0ef45b115 | 496 | * | 
| mcm | 1:e8e0ef45b115 | 497 | * @param[out] myTemperature: Real Temperature value. | 
| mcm | 1:e8e0ef45b115 | 498 | * | 
| mcm | 1:e8e0ef45b115 | 499 | * | 
| mcm | 1:e8e0ef45b115 | 500 | * @return Status of TMP006_CalculateTemperature. | 
| mcm | 1:e8e0ef45b115 | 501 | * | 
| mcm | 1:e8e0ef45b115 | 502 | * | 
| mcm | 1:e8e0ef45b115 | 503 | * @author Manuel Caballero | 
| mcm | 1:e8e0ef45b115 | 504 | * @date 10/December/2018 | 
| mcm | 1:e8e0ef45b115 | 505 | * @version 10/December/2018 The ORIGIN | 
| mcm | 1:e8e0ef45b115 | 506 | * @pre N/A. | 
| mcm | 1:e8e0ef45b115 | 507 | * @warning TMP006_GetRawTemperature function must be called first. | 
| mcm | 1:e8e0ef45b115 | 508 | */ | 
| mcm | 1:e8e0ef45b115 | 509 | TMP006::TMP006_status_t TMP006::TMP006_CalculateTemperature ( TMP006_data_t* myTemperature ) | 
| mcm | 1:e8e0ef45b115 | 510 | { | 
| mcm | 1:e8e0ef45b115 | 511 | uint16_t aux = 0U; | 
| mcm | 1:e8e0ef45b115 | 512 | |
| mcm | 1:e8e0ef45b115 | 513 | aux = myTemperature->TemperatureRegister; | 
| mcm | 1:e8e0ef45b115 | 514 | |
| mcm | 1:e8e0ef45b115 | 515 | /* Check if the temperature value is negative, MSB = 1 */ | 
| mcm | 1:e8e0ef45b115 | 516 | if ( ( aux & 0x2000 ) == 0x2000 ) | 
| mcm | 1:e8e0ef45b115 | 517 | { | 
| mcm | 1:e8e0ef45b115 | 518 | aux = ~aux; | 
| mcm | 1:e8e0ef45b115 | 519 | aux += 1U; | 
| mcm | 1:e8e0ef45b115 | 520 | } | 
| mcm | 1:e8e0ef45b115 | 521 | |
| mcm | 1:e8e0ef45b115 | 522 | |
| mcm | 1:e8e0ef45b115 | 523 | /* Parse the data */ | 
| mcm | 1:e8e0ef45b115 | 524 | myTemperature->TemperatureC = (float)( aux * TEMP_1LSB ); // Celsius degrees | 
| mcm | 1:e8e0ef45b115 | 525 | myTemperature->TemperatureK = (float)( myTemperature->TemperatureC + 273.15 ); // Kelvins degrees | 
| mcm | 1:e8e0ef45b115 | 526 | |
| mcm | 1:e8e0ef45b115 | 527 | |
| mcm | 1:e8e0ef45b115 | 528 | |
| mcm | 1:e8e0ef45b115 | 529 | return TMP006_SUCCESS; | 
| mcm | 1:e8e0ef45b115 | 530 | } | 
| mcm | 1:e8e0ef45b115 | 531 | |
| mcm | 1:e8e0ef45b115 | 532 | |
| mcm | 1:e8e0ef45b115 | 533 | |
| mcm | 1:e8e0ef45b115 | 534 | /** | 
| mcm | 1:e8e0ef45b115 | 535 | * @brief TMP006_CalculateObjectTemperature ( TMP006_data_t* ) | 
| mcm | 1:e8e0ef45b115 | 536 | * | 
| mcm | 1:e8e0ef45b115 | 537 | * @details It calculates the real temperature ( T_DIE ) value. | 
| mcm | 1:e8e0ef45b115 | 538 | * | 
| mcm | 1:e8e0ef45b115 | 539 | * @param[in] myRawTemperature: Raw temperature value. | 
| mcm | 1:e8e0ef45b115 | 540 | * | 
| mcm | 1:e8e0ef45b115 | 541 | * @param[out] myObjTemperature: Real Object Temperature value. | 
| mcm | 1:e8e0ef45b115 | 542 | * | 
| mcm | 1:e8e0ef45b115 | 543 | * | 
| mcm | 1:e8e0ef45b115 | 544 | * @return Status of TMP006_CalculateObjectTemperature. | 
| mcm | 1:e8e0ef45b115 | 545 | * | 
| mcm | 1:e8e0ef45b115 | 546 | * | 
| mcm | 1:e8e0ef45b115 | 547 | * @author Manuel Caballero | 
| mcm | 1:e8e0ef45b115 | 548 | * @date 10/December/2018 | 
| mcm | 1:e8e0ef45b115 | 549 | * @version 10/December/2018 The ORIGIN | 
| mcm | 1:e8e0ef45b115 | 550 | * @pre N/A. | 
| mcm | 1:e8e0ef45b115 | 551 | * @warning TMP006_CalculateTemperature and TMP006_GetRawSensorVoltage functions must be called first. | 
| mcm | 1:e8e0ef45b115 | 552 | */ | 
| mcm | 1:e8e0ef45b115 | 553 | TMP006::TMP006_status_t TMP006::TMP006_CalculateObjectTemperature ( TMP006_data_t* myObjTemperature ) | 
| mcm | 1:e8e0ef45b115 | 554 | { | 
| mcm | 1:e8e0ef45b115 | 555 | float s = 0.0; | 
| mcm | 1:e8e0ef45b115 | 556 | float v_os = 0.0; | 
| mcm | 1:e8e0ef45b115 | 557 | float f_v_obj = 0.0; | 
| mcm | 1:e8e0ef45b115 | 558 | |
| mcm | 1:e8e0ef45b115 | 559 | /* Claculate the sensitivity of the thermopile sensor */ | 
| mcm | 1:e8e0ef45b115 | 560 | s = myObjTemperature->s0 * ( 1 + A1 * ( myObjTemperature->TemperatureK - T_REF ) + A2 * pow( (double)( myObjTemperature->TemperatureK - T_REF ), (double)2U ) ); | 
| mcm | 1:e8e0ef45b115 | 561 | |
| mcm | 1:e8e0ef45b115 | 562 | /* Calculate the offset voltage */ | 
| mcm | 1:e8e0ef45b115 | 563 | v_os = B0 + B1 * ( myObjTemperature->TemperatureK - T_REF ) + B2 * pow( (double)( myObjTemperature->TemperatureK - T_REF ), (double)2U ); | 
| mcm | 1:e8e0ef45b115 | 564 | |
| mcm | 1:e8e0ef45b115 | 565 | /* Model the Seebeck coefficients of the thermopile */ | 
| mcm | 1:e8e0ef45b115 | 566 | f_v_obj = ( myObjTemperature->SensorVoltageResultRegister - v_os ) + C2 * pow( (double)( myObjTemperature->SensorVoltageResultRegister - v_os ), (double)2U ); | 
| mcm | 1:e8e0ef45b115 | 567 | |
| mcm | 1:e8e0ef45b115 | 568 | /* Relates the radiant transfer of IR energy between the target object and the TMP006 and the conducted heat in the thermopile in the TMP006 */ | 
| mcm | 1:e8e0ef45b115 | 569 | myObjTemperature->ObjectTemperatureK = sqrt( sqrt( pow( (double)myObjTemperature->TemperatureK, (double)4U ) + ( f_v_obj / s ) ) ); | 
| mcm | 1:e8e0ef45b115 | 570 | myObjTemperature->ObjectTemperatureC = ( myObjTemperature->ObjectTemperatureK - 273.15 ); | 
| mcm | 1:e8e0ef45b115 | 571 | |
| mcm | 1:e8e0ef45b115 | 572 | |
| mcm | 1:e8e0ef45b115 | 573 | |
| mcm | 1:e8e0ef45b115 | 574 | return TMP006_SUCCESS; | 
| mcm | 1:e8e0ef45b115 | 575 | } |