Infrared Thermopile Sensor in Chip-Scale Package

Committer:
mcm
Date:
Tue Jan 22 11:40:31 2019 +0000
Revision:
4:d3c9c6df14a8
Parent:
2:4c2811c6faa1
The driver was completed and tested ( NUCLEO-L152RE ), it works as expected

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mcm 2:4c2811c6faa1 1 /**
mcm 2:4c2811c6faa1 2 * @brief AMG8833.c
mcm 2:4c2811c6faa1 3 * @details Infrared Thermopile Sensor in Chip-Scale Package.
mcm 2:4c2811c6faa1 4 * Functions file.
mcm 2:4c2811c6faa1 5 *
mcm 2:4c2811c6faa1 6 *
mcm 2:4c2811c6faa1 7 * @return N/A
mcm 2:4c2811c6faa1 8 *
mcm 2:4c2811c6faa1 9 * @author Manuel Caballero
mcm 2:4c2811c6faa1 10 * @date 11/January/2019
mcm 2:4c2811c6faa1 11 * @version 11/January/2019 The ORIGIN
mcm 2:4c2811c6faa1 12 * @pre N/A.
mcm 2:4c2811c6faa1 13 * @warning N/A
mcm 2:4c2811c6faa1 14 * @pre This code belongs to Nimbus Centre ( http://www.nimbus.cit.ie ). All rights reserved.
mcm 2:4c2811c6faa1 15 */
mcm 2:4c2811c6faa1 16
mcm 2:4c2811c6faa1 17 #include "AMG8833.h"
mcm 2:4c2811c6faa1 18
mcm 2:4c2811c6faa1 19
mcm 2:4c2811c6faa1 20 AMG8833::AMG8833 ( PinName sda, PinName scl, uint32_t addr, uint32_t freq )
mcm 2:4c2811c6faa1 21 : _i2c ( sda, scl )
mcm 2:4c2811c6faa1 22 , _AMG8833_Addr ( addr )
mcm 2:4c2811c6faa1 23 {
mcm 2:4c2811c6faa1 24 _i2c.frequency( freq );
mcm 2:4c2811c6faa1 25 }
mcm 2:4c2811c6faa1 26
mcm 2:4c2811c6faa1 27
mcm 2:4c2811c6faa1 28 AMG8833::~AMG8833()
mcm 2:4c2811c6faa1 29 {
mcm 2:4c2811c6faa1 30 }
mcm 2:4c2811c6faa1 31
mcm 2:4c2811c6faa1 32
mcm 2:4c2811c6faa1 33
mcm 2:4c2811c6faa1 34 /**
mcm 2:4c2811c6faa1 35 * @brief AMG8833_GetOperationMode ( AMG8833_data_t* )
mcm 2:4c2811c6faa1 36 *
mcm 2:4c2811c6faa1 37 * @details It reads the operation mode ( power control register ).
mcm 2:4c2811c6faa1 38 *
mcm 2:4c2811c6faa1 39 * @param[in] N/A.
mcm 2:4c2811c6faa1 40 *
mcm 2:4c2811c6faa1 41 * @param[out] myOperationMode: Current operation mode.
mcm 2:4c2811c6faa1 42 *
mcm 2:4c2811c6faa1 43 *
mcm 2:4c2811c6faa1 44 * @return Status of AMG8833_GetOperationMode.
mcm 2:4c2811c6faa1 45 *
mcm 2:4c2811c6faa1 46 *
mcm 2:4c2811c6faa1 47 * @author Manuel Caballero
mcm 2:4c2811c6faa1 48 * @date 11/January/2019
mcm 2:4c2811c6faa1 49 * @version 11/January/2019 The ORIGIN
mcm 2:4c2811c6faa1 50 * @pre N/A.
mcm 2:4c2811c6faa1 51 * @warning N/A.
mcm 2:4c2811c6faa1 52 */
mcm 2:4c2811c6faa1 53 AMG8833::AMG8833_status_t AMG8833::AMG8833_GetOperationMode ( AMG8833_data_t* myOperationMode )
mcm 2:4c2811c6faa1 54 {
mcm 2:4c2811c6faa1 55 char cmd = 0U;
mcm 2:4c2811c6faa1 56 uint32_t aux;
mcm 2:4c2811c6faa1 57
mcm 2:4c2811c6faa1 58
mcm 2:4c2811c6faa1 59 /* Read the register */
mcm 2:4c2811c6faa1 60 cmd = AMG8833_PCTL;
mcm 2:4c2811c6faa1 61 aux = _i2c.write ( _AMG8833_Addr, &cmd, 1U, true );
mcm 2:4c2811c6faa1 62 aux = _i2c.read ( _AMG8833_Addr, &cmd, 1U );
mcm 2:4c2811c6faa1 63
mcm 2:4c2811c6faa1 64
mcm 2:4c2811c6faa1 65 /* Parse data */
mcm 2:4c2811c6faa1 66 myOperationMode->operationMode = (AMG8833_pctl_t)cmd;
mcm 2:4c2811c6faa1 67
mcm 2:4c2811c6faa1 68
mcm 2:4c2811c6faa1 69
mcm 2:4c2811c6faa1 70 if ( aux == I2C_SUCCESS )
mcm 2:4c2811c6faa1 71 {
mcm 2:4c2811c6faa1 72 return AMG8833_SUCCESS;
mcm 2:4c2811c6faa1 73 }
mcm 2:4c2811c6faa1 74 else
mcm 2:4c2811c6faa1 75 {
mcm 2:4c2811c6faa1 76 return AMG8833_FAILURE;
mcm 2:4c2811c6faa1 77 }
mcm 2:4c2811c6faa1 78 }
mcm 2:4c2811c6faa1 79
mcm 2:4c2811c6faa1 80
mcm 2:4c2811c6faa1 81
mcm 2:4c2811c6faa1 82 /**
mcm 2:4c2811c6faa1 83 * @brief AMG8833_SetOperationMode ( AMG8833_data_t* )
mcm 2:4c2811c6faa1 84 *
mcm 2:4c2811c6faa1 85 * @details It sets the operation mode ( power control register ).
mcm 2:4c2811c6faa1 86 *
mcm 2:4c2811c6faa1 87 * @param[in] myOperationMode: Operation mode.
mcm 2:4c2811c6faa1 88 *
mcm 2:4c2811c6faa1 89 * @param[out] N/A.
mcm 2:4c2811c6faa1 90 *
mcm 2:4c2811c6faa1 91 *
mcm 2:4c2811c6faa1 92 * @return Status of AMG8833_SetOperationMode.
mcm 2:4c2811c6faa1 93 *
mcm 2:4c2811c6faa1 94 *
mcm 2:4c2811c6faa1 95 * @author Manuel Caballero
mcm 2:4c2811c6faa1 96 * @date 11/January/2019
mcm 2:4c2811c6faa1 97 * @version 11/January/2019 The ORIGIN
mcm 2:4c2811c6faa1 98 * @pre N/A.
mcm 2:4c2811c6faa1 99 * @warning N/A.
mcm 2:4c2811c6faa1 100 */
mcm 2:4c2811c6faa1 101 AMG8833::AMG8833_status_t AMG8833::AMG8833_SetOperationMode ( AMG8833_data_t myOperationMode )
mcm 2:4c2811c6faa1 102 {
mcm 2:4c2811c6faa1 103 char cmd[] = { 0U, 0U };
mcm 2:4c2811c6faa1 104 uint32_t aux;
mcm 2:4c2811c6faa1 105
mcm 2:4c2811c6faa1 106
mcm 2:4c2811c6faa1 107 /* Update the register */
mcm 2:4c2811c6faa1 108 cmd[0] = AMG8833_PCTL;
mcm 2:4c2811c6faa1 109 cmd[1] = myOperationMode.operationMode;
mcm 2:4c2811c6faa1 110 aux = _i2c.write ( _AMG8833_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:4c2811c6faa1 111
mcm 2:4c2811c6faa1 112
mcm 2:4c2811c6faa1 113
mcm 2:4c2811c6faa1 114 if ( aux == I2C_SUCCESS )
mcm 2:4c2811c6faa1 115 {
mcm 2:4c2811c6faa1 116 return AMG8833_SUCCESS;
mcm 2:4c2811c6faa1 117 }
mcm 2:4c2811c6faa1 118 else
mcm 2:4c2811c6faa1 119 {
mcm 2:4c2811c6faa1 120 return AMG8833_FAILURE;
mcm 2:4c2811c6faa1 121 }
mcm 2:4c2811c6faa1 122 }
mcm 2:4c2811c6faa1 123
mcm 2:4c2811c6faa1 124
mcm 2:4c2811c6faa1 125
mcm 2:4c2811c6faa1 126 /**
mcm 2:4c2811c6faa1 127 * @brief AMG8833_SoftwareReset ( AMG8833_rst_t )
mcm 2:4c2811c6faa1 128 *
mcm 2:4c2811c6faa1 129 * @details It sets the reset mode.
mcm 2:4c2811c6faa1 130 *
mcm 2:4c2811c6faa1 131 * @param[in] mySoftwareReset: Reset mode.
mcm 2:4c2811c6faa1 132 *
mcm 2:4c2811c6faa1 133 * @param[out] N/A.
mcm 2:4c2811c6faa1 134 *
mcm 2:4c2811c6faa1 135 *
mcm 2:4c2811c6faa1 136 * @return Status of AMG8833_SoftwareReset.
mcm 2:4c2811c6faa1 137 *
mcm 2:4c2811c6faa1 138 *
mcm 2:4c2811c6faa1 139 * @author Manuel Caballero
mcm 2:4c2811c6faa1 140 * @date 11/January/2019
mcm 2:4c2811c6faa1 141 * @version 11/January/2019 The ORIGIN
mcm 2:4c2811c6faa1 142 * @pre N/A.
mcm 2:4c2811c6faa1 143 * @warning N/A.
mcm 2:4c2811c6faa1 144 */
mcm 2:4c2811c6faa1 145 AMG8833::AMG8833_status_t AMG8833::AMG8833_SoftwareReset ( AMG8833_rst_t mySoftwareReset )
mcm 2:4c2811c6faa1 146 {
mcm 2:4c2811c6faa1 147 char cmd[] = { 0U, 0U };
mcm 2:4c2811c6faa1 148 uint32_t aux;
mcm 2:4c2811c6faa1 149
mcm 2:4c2811c6faa1 150
mcm 2:4c2811c6faa1 151 /* Update the register */
mcm 2:4c2811c6faa1 152 cmd[0] = AMG8833_RST;
mcm 2:4c2811c6faa1 153 cmd[1] = mySoftwareReset;
mcm 2:4c2811c6faa1 154 aux = _i2c.write ( _AMG8833_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:4c2811c6faa1 155
mcm 2:4c2811c6faa1 156
mcm 2:4c2811c6faa1 157
mcm 2:4c2811c6faa1 158 if ( aux == I2C_SUCCESS )
mcm 2:4c2811c6faa1 159 {
mcm 2:4c2811c6faa1 160 return AMG8833_SUCCESS;
mcm 2:4c2811c6faa1 161 }
mcm 2:4c2811c6faa1 162 else
mcm 2:4c2811c6faa1 163 {
mcm 2:4c2811c6faa1 164 return AMG8833_FAILURE;
mcm 2:4c2811c6faa1 165 }
mcm 2:4c2811c6faa1 166 }
mcm 2:4c2811c6faa1 167
mcm 2:4c2811c6faa1 168
mcm 2:4c2811c6faa1 169
mcm 2:4c2811c6faa1 170 /**
mcm 2:4c2811c6faa1 171 * @brief AMG8833_SetFrameMode ( AMG8833_fpsc_t )
mcm 2:4c2811c6faa1 172 *
mcm 2:4c2811c6faa1 173 * @details It sets frame mode.
mcm 2:4c2811c6faa1 174 *
mcm 2:4c2811c6faa1 175 * @param[in] myFrameMode: Frame mode.
mcm 2:4c2811c6faa1 176 *
mcm 2:4c2811c6faa1 177 * @param[out] N/A.
mcm 2:4c2811c6faa1 178 *
mcm 2:4c2811c6faa1 179 *
mcm 2:4c2811c6faa1 180 * @return Status of AMG8833_SetFrameMode.
mcm 2:4c2811c6faa1 181 *
mcm 2:4c2811c6faa1 182 *
mcm 2:4c2811c6faa1 183 * @author Manuel Caballero
mcm 2:4c2811c6faa1 184 * @date 11/January/2019
mcm 2:4c2811c6faa1 185 * @version 11/January/2019 The ORIGIN
mcm 2:4c2811c6faa1 186 * @pre N/A.
mcm 2:4c2811c6faa1 187 * @warning N/A.
mcm 2:4c2811c6faa1 188 */
mcm 2:4c2811c6faa1 189 AMG8833::AMG8833_status_t AMG8833::AMG8833_SetFrameMode ( AMG8833_fpsc_t myFrameMode )
mcm 2:4c2811c6faa1 190 {
mcm 2:4c2811c6faa1 191 char cmd[] = { 0U, 0U };
mcm 2:4c2811c6faa1 192 uint32_t aux;
mcm 2:4c2811c6faa1 193
mcm 2:4c2811c6faa1 194
mcm 2:4c2811c6faa1 195 /* Update the register */
mcm 2:4c2811c6faa1 196 cmd[0] = AMG8833_FPSC;
mcm 2:4c2811c6faa1 197 cmd[1] = myFrameMode;
mcm 2:4c2811c6faa1 198 aux = _i2c.write ( _AMG8833_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:4c2811c6faa1 199
mcm 2:4c2811c6faa1 200
mcm 2:4c2811c6faa1 201
mcm 2:4c2811c6faa1 202 if ( aux == I2C_SUCCESS )
mcm 2:4c2811c6faa1 203 {
mcm 2:4c2811c6faa1 204 return AMG8833_SUCCESS;
mcm 2:4c2811c6faa1 205 }
mcm 2:4c2811c6faa1 206 else
mcm 2:4c2811c6faa1 207 {
mcm 2:4c2811c6faa1 208 return AMG8833_FAILURE;
mcm 2:4c2811c6faa1 209 }
mcm 2:4c2811c6faa1 210 }
mcm 2:4c2811c6faa1 211
mcm 2:4c2811c6faa1 212
mcm 2:4c2811c6faa1 213
mcm 2:4c2811c6faa1 214 /**
mcm 2:4c2811c6faa1 215 * @brief AMG8833_SetInterruptFunctionMode ( AMG8833_intmod_t , AMG8833_inten_t )
mcm 2:4c2811c6faa1 216 *
mcm 2:4c2811c6faa1 217 * @details It sets interrupt function mode.
mcm 2:4c2811c6faa1 218 *
mcm 2:4c2811c6faa1 219 * @param[in] myInterruptMode: Interrupt mode.
mcm 2:4c2811c6faa1 220 * @param[in] myInterruptOutput: Interrupt output mode.
mcm 2:4c2811c6faa1 221 *
mcm 2:4c2811c6faa1 222 * @param[out] N/A.
mcm 2:4c2811c6faa1 223 *
mcm 2:4c2811c6faa1 224 *
mcm 2:4c2811c6faa1 225 * @return Status of AMG8833_SetInterruptFunctionMode.
mcm 2:4c2811c6faa1 226 *
mcm 2:4c2811c6faa1 227 *
mcm 2:4c2811c6faa1 228 * @author Manuel Caballero
mcm 2:4c2811c6faa1 229 * @date 11/January/2019
mcm 2:4c2811c6faa1 230 * @version 11/January/2019 The ORIGIN
mcm 2:4c2811c6faa1 231 * @pre N/A.
mcm 2:4c2811c6faa1 232 * @warning N/A.
mcm 2:4c2811c6faa1 233 */
mcm 2:4c2811c6faa1 234 AMG8833::AMG8833_status_t AMG8833::AMG8833_SetInterruptFunctionMode ( AMG8833_intmod_t myInterruptMode, AMG8833_inten_t myInterruptOutput )
mcm 2:4c2811c6faa1 235 {
mcm 2:4c2811c6faa1 236 char cmd[] = { 0U, 0U };
mcm 2:4c2811c6faa1 237 uint32_t aux;
mcm 2:4c2811c6faa1 238
mcm 2:4c2811c6faa1 239
mcm 2:4c2811c6faa1 240 /* Update the register */
mcm 2:4c2811c6faa1 241 cmd[0] = AMG8833_INTC;
mcm 2:4c2811c6faa1 242 cmd[1] = ( myInterruptMode | myInterruptOutput );
mcm 2:4c2811c6faa1 243 aux = _i2c.write ( _AMG8833_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:4c2811c6faa1 244
mcm 2:4c2811c6faa1 245
mcm 2:4c2811c6faa1 246
mcm 2:4c2811c6faa1 247 if ( aux == I2C_SUCCESS )
mcm 2:4c2811c6faa1 248 {
mcm 2:4c2811c6faa1 249 return AMG8833_SUCCESS;
mcm 2:4c2811c6faa1 250 }
mcm 2:4c2811c6faa1 251 else
mcm 2:4c2811c6faa1 252 {
mcm 2:4c2811c6faa1 253 return AMG8833_FAILURE;
mcm 2:4c2811c6faa1 254 }
mcm 2:4c2811c6faa1 255 }
mcm 2:4c2811c6faa1 256
mcm 2:4c2811c6faa1 257
mcm 2:4c2811c6faa1 258
mcm 2:4c2811c6faa1 259 /**
mcm 2:4c2811c6faa1 260 * @brief AMG8833_GetStatusRegisterValue ( uint8_t* )
mcm 2:4c2811c6faa1 261 *
mcm 2:4c2811c6faa1 262 * @details It gets the status register value.
mcm 2:4c2811c6faa1 263 *
mcm 2:4c2811c6faa1 264 * @param[in] N/A.
mcm 2:4c2811c6faa1 265 *
mcm 2:4c2811c6faa1 266 * @param[out] myStatusRegisterValue: Current status register value.
mcm 2:4c2811c6faa1 267 *
mcm 2:4c2811c6faa1 268 *
mcm 2:4c2811c6faa1 269 * @return Status of AMG8833_GetStatusRegisterValue.
mcm 2:4c2811c6faa1 270 *
mcm 2:4c2811c6faa1 271 *
mcm 2:4c2811c6faa1 272 * @author Manuel Caballero
mcm 2:4c2811c6faa1 273 * @date 11/January/2019
mcm 2:4c2811c6faa1 274 * @version 11/January/2019 The ORIGIN
mcm 2:4c2811c6faa1 275 * @pre N/A.
mcm 2:4c2811c6faa1 276 * @warning N/A.
mcm 2:4c2811c6faa1 277 */
mcm 2:4c2811c6faa1 278 AMG8833::AMG8833_status_t AMG8833::AMG8833_GetStatusRegisterValue ( uint8_t* myStatusRegisterValue )
mcm 2:4c2811c6faa1 279 {
mcm 2:4c2811c6faa1 280 char cmd = 0U;
mcm 2:4c2811c6faa1 281 uint32_t aux;
mcm 2:4c2811c6faa1 282
mcm 2:4c2811c6faa1 283
mcm 2:4c2811c6faa1 284 /* Update the register */
mcm 2:4c2811c6faa1 285 cmd = AMG8833_STAT;
mcm 2:4c2811c6faa1 286 aux = _i2c.write ( _AMG8833_Addr, &cmd, 1U, true );
mcm 2:4c2811c6faa1 287 aux = _i2c.read ( _AMG8833_Addr, &cmd, 1U );
mcm 2:4c2811c6faa1 288
mcm 2:4c2811c6faa1 289
mcm 2:4c2811c6faa1 290 /* Parse data */
mcm 2:4c2811c6faa1 291 *myStatusRegisterValue = cmd;
mcm 2:4c2811c6faa1 292
mcm 2:4c2811c6faa1 293
mcm 2:4c2811c6faa1 294
mcm 2:4c2811c6faa1 295 if ( aux == I2C_SUCCESS )
mcm 2:4c2811c6faa1 296 {
mcm 2:4c2811c6faa1 297 return AMG8833_SUCCESS;
mcm 2:4c2811c6faa1 298 }
mcm 2:4c2811c6faa1 299 else
mcm 2:4c2811c6faa1 300 {
mcm 2:4c2811c6faa1 301 return AMG8833_FAILURE;
mcm 2:4c2811c6faa1 302 }
mcm 2:4c2811c6faa1 303 }
mcm 2:4c2811c6faa1 304
mcm 2:4c2811c6faa1 305
mcm 2:4c2811c6faa1 306
mcm 2:4c2811c6faa1 307 /**
mcm 2:4c2811c6faa1 308 * @brief AMG8833_ClearFlags ( uint8_t )
mcm 2:4c2811c6faa1 309 *
mcm 2:4c2811c6faa1 310 * @details It clears overflow and/or interrupt flags.
mcm 2:4c2811c6faa1 311 *
mcm 2:4c2811c6faa1 312 * @param[in] myFlagsToBeCleared: OVT_CLR_THERMISTOR_TEMPERATURE_OVERFLOW_CLEAR_FLAG and/or
mcm 2:4c2811c6faa1 313 * OVS_CLR_TEMPERATURE_OVERFLOW_CLEAR_FLAG and/or
mcm 2:4c2811c6faa1 314 * INTCLR_INTERRUPT_OUTBREAK_CLEAR_FLAG.
mcm 2:4c2811c6faa1 315 *
mcm 2:4c2811c6faa1 316 * @param[out] N/A.
mcm 2:4c2811c6faa1 317 *
mcm 2:4c2811c6faa1 318 *
mcm 2:4c2811c6faa1 319 * @return Status of AMG8833_ClearFlags.
mcm 2:4c2811c6faa1 320 *
mcm 2:4c2811c6faa1 321 *
mcm 2:4c2811c6faa1 322 * @author Manuel Caballero
mcm 2:4c2811c6faa1 323 * @date 11/January/2019
mcm 2:4c2811c6faa1 324 * @version 11/January/2019 The ORIGIN
mcm 2:4c2811c6faa1 325 * @pre N/A.
mcm 2:4c2811c6faa1 326 * @warning N/A.
mcm 2:4c2811c6faa1 327 */
mcm 2:4c2811c6faa1 328 AMG8833::AMG8833_status_t AMG8833::AMG8833_ClearFlags ( uint8_t myFlagsToBeCleared )
mcm 2:4c2811c6faa1 329 {
mcm 2:4c2811c6faa1 330 char cmd[] = { 0U, 0U };
mcm 2:4c2811c6faa1 331 uint32_t aux;
mcm 2:4c2811c6faa1 332
mcm 2:4c2811c6faa1 333
mcm 2:4c2811c6faa1 334 /* Update the register */
mcm 2:4c2811c6faa1 335 cmd[0] = AMG8833_SCLR;
mcm 2:4c2811c6faa1 336 cmd[1] = myFlagsToBeCleared;
mcm 2:4c2811c6faa1 337 aux = _i2c.write ( _AMG8833_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:4c2811c6faa1 338
mcm 2:4c2811c6faa1 339
mcm 2:4c2811c6faa1 340
mcm 2:4c2811c6faa1 341 if ( aux == I2C_SUCCESS )
mcm 2:4c2811c6faa1 342 {
mcm 2:4c2811c6faa1 343 return AMG8833_SUCCESS;
mcm 2:4c2811c6faa1 344 }
mcm 2:4c2811c6faa1 345 else
mcm 2:4c2811c6faa1 346 {
mcm 2:4c2811c6faa1 347 return AMG8833_FAILURE;
mcm 2:4c2811c6faa1 348 }
mcm 2:4c2811c6faa1 349 }
mcm 2:4c2811c6faa1 350
mcm 2:4c2811c6faa1 351
mcm 2:4c2811c6faa1 352
mcm 2:4c2811c6faa1 353 /**
mcm 2:4c2811c6faa1 354 * @brief AMG8833_SetAverageOutputMode ( AMG8833_mamod_t )
mcm 2:4c2811c6faa1 355 *
mcm 2:4c2811c6faa1 356 * @details It sets twice moving average output mode.
mcm 2:4c2811c6faa1 357 *
mcm 2:4c2811c6faa1 358 * @param[in] myAverageOutputMode: Average output mode.
mcm 2:4c2811c6faa1 359 *
mcm 2:4c2811c6faa1 360 * @param[out] N/A.
mcm 2:4c2811c6faa1 361 *
mcm 2:4c2811c6faa1 362 *
mcm 2:4c2811c6faa1 363 * @return Status of AMG8833_SetAverageOutputMode.
mcm 2:4c2811c6faa1 364 *
mcm 2:4c2811c6faa1 365 *
mcm 2:4c2811c6faa1 366 * @author Manuel Caballero
mcm 2:4c2811c6faa1 367 * @date 11/January/2019
mcm 2:4c2811c6faa1 368 * @version 11/January/2019 The ORIGIN
mcm 2:4c2811c6faa1 369 * @pre N/A.
mcm 2:4c2811c6faa1 370 * @warning N/A.
mcm 2:4c2811c6faa1 371 */
mcm 2:4c2811c6faa1 372 AMG8833::AMG8833_status_t AMG8833::AMG8833_SetAverageOutputMode ( AMG8833_mamod_t myAverageOutputMode )
mcm 2:4c2811c6faa1 373 {
mcm 2:4c2811c6faa1 374 char cmd[] = { 0U, 0U };
mcm 2:4c2811c6faa1 375 uint32_t aux;
mcm 2:4c2811c6faa1 376
mcm 2:4c2811c6faa1 377
mcm 2:4c2811c6faa1 378 /* Update the register */
mcm 2:4c2811c6faa1 379 cmd[0] = AMG8833_AVE;
mcm 2:4c2811c6faa1 380 cmd[1] = myAverageOutputMode;
mcm 2:4c2811c6faa1 381 aux = _i2c.write ( _AMG8833_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:4c2811c6faa1 382
mcm 2:4c2811c6faa1 383
mcm 2:4c2811c6faa1 384
mcm 2:4c2811c6faa1 385 if ( aux == I2C_SUCCESS )
mcm 2:4c2811c6faa1 386 {
mcm 2:4c2811c6faa1 387 return AMG8833_SUCCESS;
mcm 2:4c2811c6faa1 388 }
mcm 2:4c2811c6faa1 389 else
mcm 2:4c2811c6faa1 390 {
mcm 2:4c2811c6faa1 391 return AMG8833_FAILURE;
mcm 2:4c2811c6faa1 392 }
mcm 2:4c2811c6faa1 393 }
mcm 2:4c2811c6faa1 394
mcm 2:4c2811c6faa1 395
mcm 2:4c2811c6faa1 396
mcm 2:4c2811c6faa1 397 /**
mcm 2:4c2811c6faa1 398 * @brief AMG8833_SetInterruptLevel ( int16_t , int16_t )
mcm 2:4c2811c6faa1 399 *
mcm 2:4c2811c6faa1 400 * @details It sets interrupt level upper/lower limit.
mcm 2:4c2811c6faa1 401 *
mcm 2:4c2811c6faa1 402 * @param[in] myUpperLimit: Interrupt Level upper limit.
mcm 2:4c2811c6faa1 403 * @param[in] myLowerLimit: Interrupt Level loweer limit.
mcm 2:4c2811c6faa1 404 *
mcm 2:4c2811c6faa1 405 * @param[out] N/A.
mcm 2:4c2811c6faa1 406 *
mcm 2:4c2811c6faa1 407 *
mcm 2:4c2811c6faa1 408 * @return Status of AMG8833_SetInterruptLevel.
mcm 2:4c2811c6faa1 409 *
mcm 2:4c2811c6faa1 410 *
mcm 2:4c2811c6faa1 411 * @author Manuel Caballero
mcm 2:4c2811c6faa1 412 * @date 11/January/2019
mcm 2:4c2811c6faa1 413 * @version 11/January/2019 The ORIGIN
mcm 2:4c2811c6faa1 414 * @pre N/A.
mcm 2:4c2811c6faa1 415 * @warning N/A.
mcm 2:4c2811c6faa1 416 */
mcm 2:4c2811c6faa1 417 AMG8833::AMG8833_status_t AMG8833::AMG8833_SetInterruptLevel ( int16_t myUpperLimit, int16_t myLowerLimit )
mcm 2:4c2811c6faa1 418 {
mcm 2:4c2811c6faa1 419 char cmd[] = { 0U, 0U };
mcm 2:4c2811c6faa1 420 uint32_t aux;
mcm 2:4c2811c6faa1 421
mcm 2:4c2811c6faa1 422 /* 12 bit resolution ( 11 bit + sign ) only */
mcm 2:4c2811c6faa1 423 if ( ( ( myUpperLimit < -4095 ) || ( myUpperLimit > 4095 ) ) || ( ( myLowerLimit < -4095 ) || ( myLowerLimit > 4095 ) ) )
mcm 2:4c2811c6faa1 424 {
mcm 2:4c2811c6faa1 425 return AMG8833_FAILURE;
mcm 2:4c2811c6faa1 426 }
mcm 2:4c2811c6faa1 427 else
mcm 2:4c2811c6faa1 428 {
mcm 2:4c2811c6faa1 429 /* Update upper limit */
mcm 2:4c2811c6faa1 430 /* Update the register: INTHL */
mcm 2:4c2811c6faa1 431 cmd[0] = AMG8833_INTHL;
mcm 2:4c2811c6faa1 432 cmd[1] = (uint8_t)( myUpperLimit & 0x00FF );
mcm 2:4c2811c6faa1 433 aux = _i2c.write ( _AMG8833_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:4c2811c6faa1 434
mcm 2:4c2811c6faa1 435 /* Update the register: INTHH */
mcm 2:4c2811c6faa1 436 cmd[0] = AMG8833_INTHH;
mcm 2:4c2811c6faa1 437 cmd[1] = (uint8_t)( ( myUpperLimit >> 8U ) & LIMIT_HYSTERESIS_INTHH_MASK );
mcm 2:4c2811c6faa1 438 aux = _i2c.write ( _AMG8833_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:4c2811c6faa1 439
mcm 2:4c2811c6faa1 440 /* Update lower limit */
mcm 2:4c2811c6faa1 441 /* Update the register: INTLL */
mcm 2:4c2811c6faa1 442 cmd[0] = AMG8833_INTLL;
mcm 2:4c2811c6faa1 443 cmd[1] = (uint8_t)( myLowerLimit & 0x00FF );
mcm 2:4c2811c6faa1 444 aux = _i2c.write ( _AMG8833_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:4c2811c6faa1 445
mcm 2:4c2811c6faa1 446 /* Update the register: INTLL */
mcm 2:4c2811c6faa1 447 cmd[0] = AMG8833_INTLH;
mcm 2:4c2811c6faa1 448 cmd[1] = (uint8_t)( ( myLowerLimit >> 8U ) & LIMIT_HYSTERESIS_INTLH_MASK );
mcm 2:4c2811c6faa1 449 aux = _i2c.write ( _AMG8833_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:4c2811c6faa1 450 }
mcm 2:4c2811c6faa1 451
mcm 2:4c2811c6faa1 452
mcm 2:4c2811c6faa1 453
mcm 2:4c2811c6faa1 454
mcm 2:4c2811c6faa1 455 if ( aux == I2C_SUCCESS )
mcm 2:4c2811c6faa1 456 {
mcm 2:4c2811c6faa1 457 return AMG8833_SUCCESS;
mcm 2:4c2811c6faa1 458 }
mcm 2:4c2811c6faa1 459 else
mcm 2:4c2811c6faa1 460 {
mcm 2:4c2811c6faa1 461 return AMG8833_FAILURE;
mcm 2:4c2811c6faa1 462 }
mcm 2:4c2811c6faa1 463 }
mcm 2:4c2811c6faa1 464
mcm 2:4c2811c6faa1 465
mcm 2:4c2811c6faa1 466
mcm 2:4c2811c6faa1 467 /**
mcm 2:4c2811c6faa1 468 * @brief AMG8833_SetHysteresisLevel ( int16_t )
mcm 2:4c2811c6faa1 469 *
mcm 2:4c2811c6faa1 470 * @details It sets interrupt hysteresis level when interrupt is generated.
mcm 2:4c2811c6faa1 471 *
mcm 2:4c2811c6faa1 472 * @param[in] myHysteresisLimit: Interrupt Hysteresis Level when Interrupt is generated.
mcm 2:4c2811c6faa1 473 *
mcm 2:4c2811c6faa1 474 * @param[out] N/A.
mcm 2:4c2811c6faa1 475 *
mcm 2:4c2811c6faa1 476 *
mcm 2:4c2811c6faa1 477 * @return Status of AMG8833_SetHysteresisLevel.
mcm 2:4c2811c6faa1 478 *
mcm 2:4c2811c6faa1 479 *
mcm 2:4c2811c6faa1 480 * @author Manuel Caballero
mcm 2:4c2811c6faa1 481 * @date 11/January/2019
mcm 2:4c2811c6faa1 482 * @version 11/January/2019 The ORIGIN
mcm 2:4c2811c6faa1 483 * @pre N/A.
mcm 2:4c2811c6faa1 484 * @warning N/A.
mcm 2:4c2811c6faa1 485 */
mcm 2:4c2811c6faa1 486 AMG8833::AMG8833_status_t AMG8833::AMG8833_SetHysteresisLevel ( int16_t myHysteresisLimit )
mcm 2:4c2811c6faa1 487 {
mcm 2:4c2811c6faa1 488 char cmd[] = { 0U, 0U };
mcm 2:4c2811c6faa1 489 uint32_t aux;
mcm 2:4c2811c6faa1 490
mcm 2:4c2811c6faa1 491 /* 12 bit resolution ( 11 bit + sign ) only */
mcm 2:4c2811c6faa1 492 if ( ( myHysteresisLimit < -4095 ) || ( myHysteresisLimit > 4095) )
mcm 2:4c2811c6faa1 493 {
mcm 2:4c2811c6faa1 494 return AMG8833_FAILURE;
mcm 2:4c2811c6faa1 495 }
mcm 2:4c2811c6faa1 496 else
mcm 2:4c2811c6faa1 497 {
mcm 2:4c2811c6faa1 498 /* Hysteresis: Update the register: IHYSL */
mcm 2:4c2811c6faa1 499 cmd[0] = AMG8833_IHYSL;
mcm 2:4c2811c6faa1 500 cmd[1] = (uint8_t)( myHysteresisLimit & 0x00FF );
mcm 2:4c2811c6faa1 501 aux = _i2c.write ( _AMG8833_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:4c2811c6faa1 502
mcm 2:4c2811c6faa1 503 /* Hysteresis: Update the register: IHYSH */
mcm 2:4c2811c6faa1 504 cmd[0] = AMG8833_IHYSH;
mcm 2:4c2811c6faa1 505 cmd[1] = (uint8_t)( ( myHysteresisLimit >> 8U ) & LIMIT_HYSTERESIS_IHYSH_MASK );
mcm 2:4c2811c6faa1 506 aux = _i2c.write ( _AMG8833_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:4c2811c6faa1 507 }
mcm 2:4c2811c6faa1 508
mcm 2:4c2811c6faa1 509
mcm 2:4c2811c6faa1 510
mcm 2:4c2811c6faa1 511
mcm 2:4c2811c6faa1 512 if ( aux == I2C_SUCCESS )
mcm 2:4c2811c6faa1 513 {
mcm 2:4c2811c6faa1 514 return AMG8833_SUCCESS;
mcm 2:4c2811c6faa1 515 }
mcm 2:4c2811c6faa1 516 else
mcm 2:4c2811c6faa1 517 {
mcm 2:4c2811c6faa1 518 return AMG8833_FAILURE;
mcm 2:4c2811c6faa1 519 }
mcm 2:4c2811c6faa1 520 }
mcm 2:4c2811c6faa1 521
mcm 2:4c2811c6faa1 522
mcm 2:4c2811c6faa1 523
mcm 2:4c2811c6faa1 524 /**
mcm 2:4c2811c6faa1 525 * @brief AMG8833_GetThermistorRawData ( AMG8833_data_t* )
mcm 2:4c2811c6faa1 526 *
mcm 2:4c2811c6faa1 527 * @details It gets thermistor raw temperature data.
mcm 2:4c2811c6faa1 528 *
mcm 2:4c2811c6faa1 529 * @param[in] N/A.
mcm 2:4c2811c6faa1 530 *
mcm 2:4c2811c6faa1 531 * @param[out] myThermistorRawData: Thermistor raw temperature data.
mcm 2:4c2811c6faa1 532 *
mcm 2:4c2811c6faa1 533 *
mcm 2:4c2811c6faa1 534 * @return Status of AMG8833_GetThermistorRawData.
mcm 2:4c2811c6faa1 535 *
mcm 2:4c2811c6faa1 536 *
mcm 2:4c2811c6faa1 537 * @author Manuel Caballero
mcm 2:4c2811c6faa1 538 * @date 11/January/2019
mcm 2:4c2811c6faa1 539 * @version 11/January/2019 The ORIGIN
mcm 2:4c2811c6faa1 540 * @pre N/A.
mcm 2:4c2811c6faa1 541 * @warning N/A.
mcm 2:4c2811c6faa1 542 */
mcm 2:4c2811c6faa1 543 AMG8833::AMG8833_status_t AMG8833::AMG8833_GetThermistorRawData ( AMG8833_data_t* myThermistorRawData )
mcm 2:4c2811c6faa1 544 {
mcm 2:4c2811c6faa1 545 char cmd[2] = { 0U };
mcm 2:4c2811c6faa1 546 uint32_t aux;
mcm 2:4c2811c6faa1 547
mcm 2:4c2811c6faa1 548 /* Read the register */
mcm 2:4c2811c6faa1 549 cmd[0] = AMG8833_TTHL;
mcm 2:4c2811c6faa1 550 aux = _i2c.write ( _AMG8833_Addr, &cmd[0], 1U, true );
mcm 2:4c2811c6faa1 551 aux = _i2c.read ( _AMG8833_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ) );
mcm 2:4c2811c6faa1 552
mcm 2:4c2811c6faa1 553 /* Parse the data */
mcm 2:4c2811c6faa1 554 myThermistorRawData->termistorOutputRawValue = cmd[1];
mcm 2:4c2811c6faa1 555 myThermistorRawData->termistorOutputRawValue <<= 8U;
mcm 2:4c2811c6faa1 556 myThermistorRawData->termistorOutputRawValue |= cmd[0];
mcm 2:4c2811c6faa1 557
mcm 2:4c2811c6faa1 558
mcm 2:4c2811c6faa1 559
mcm 2:4c2811c6faa1 560
mcm 2:4c2811c6faa1 561 if ( aux == I2C_SUCCESS )
mcm 2:4c2811c6faa1 562 {
mcm 2:4c2811c6faa1 563 return AMG8833_SUCCESS;
mcm 2:4c2811c6faa1 564 }
mcm 2:4c2811c6faa1 565 else
mcm 2:4c2811c6faa1 566 {
mcm 2:4c2811c6faa1 567 return AMG8833_FAILURE;
mcm 2:4c2811c6faa1 568 }
mcm 2:4c2811c6faa1 569 }
mcm 2:4c2811c6faa1 570
mcm 2:4c2811c6faa1 571
mcm 2:4c2811c6faa1 572
mcm 2:4c2811c6faa1 573 /**
mcm 2:4c2811c6faa1 574 * @brief AMG8833_GetThermistorValue ( AMG8833_data_t* )
mcm 2:4c2811c6faa1 575 *
mcm 2:4c2811c6faa1 576 * @details It gets thermistor temperature data.
mcm 2:4c2811c6faa1 577 *
mcm 2:4c2811c6faa1 578 * @param[in] N/A.
mcm 2:4c2811c6faa1 579 *
mcm 2:4c2811c6faa1 580 * @param[out] myThermistorValue: Thermistor temperature data.
mcm 2:4c2811c6faa1 581 *
mcm 2:4c2811c6faa1 582 *
mcm 2:4c2811c6faa1 583 * @return Status of AMG8833_GetThermistorValue.
mcm 2:4c2811c6faa1 584 *
mcm 2:4c2811c6faa1 585 *
mcm 2:4c2811c6faa1 586 * @author Manuel Caballero
mcm 2:4c2811c6faa1 587 * @date 11/January/2019
mcm 2:4c2811c6faa1 588 * @version 11/January/2019 The ORIGIN
mcm 2:4c2811c6faa1 589 * @pre N/A.
mcm 2:4c2811c6faa1 590 * @warning N/A.
mcm 2:4c2811c6faa1 591 */
mcm 2:4c2811c6faa1 592 AMG8833::AMG8833_status_t AMG8833::AMG8833_GetThermistorValue ( AMG8833_data_t* myThermistorValue )
mcm 2:4c2811c6faa1 593 {
mcm 2:4c2811c6faa1 594 float mySign = 0.0;
mcm 2:4c2811c6faa1 595 AMG8833::AMG8833_status_t aux;
mcm 2:4c2811c6faa1 596
mcm 2:4c2811c6faa1 597 /* Get thermistor raw temperature data */
mcm 4:d3c9c6df14a8 598 aux = AMG8833::AMG8833_GetThermistorRawData ( myThermistorValue );
mcm 2:4c2811c6faa1 599
mcm 2:4c2811c6faa1 600 /* Check if the temperature is negative */
mcm 2:4c2811c6faa1 601 if ( ( myThermistorValue->termistorOutputRawValue & 0x800 ) == 0x800 )
mcm 2:4c2811c6faa1 602 {
mcm 2:4c2811c6faa1 603 myThermistorValue->termistorOutputRawValue &= 0x800;
mcm 2:4c2811c6faa1 604 mySign = -1.0;
mcm 2:4c2811c6faa1 605 }
mcm 2:4c2811c6faa1 606 else
mcm 2:4c2811c6faa1 607 {
mcm 2:4c2811c6faa1 608 mySign = 1.0;
mcm 2:4c2811c6faa1 609 }
mcm 2:4c2811c6faa1 610
mcm 2:4c2811c6faa1 611
mcm 2:4c2811c6faa1 612 /* Parse the data */
mcm 2:4c2811c6faa1 613 myThermistorValue->termistorOutputValue = ( mySign ) * ( (float)( myThermistorValue->termistorOutputRawValue * THERMISTOR_RESOLUTION ) );
mcm 2:4c2811c6faa1 614
mcm 2:4c2811c6faa1 615
mcm 2:4c2811c6faa1 616
mcm 2:4c2811c6faa1 617
mcm 2:4c2811c6faa1 618 if ( aux == AMG8833_SUCCESS )
mcm 2:4c2811c6faa1 619 {
mcm 2:4c2811c6faa1 620 return AMG8833_SUCCESS;
mcm 2:4c2811c6faa1 621 }
mcm 2:4c2811c6faa1 622 else
mcm 2:4c2811c6faa1 623 {
mcm 2:4c2811c6faa1 624 return AMG8833_FAILURE;
mcm 2:4c2811c6faa1 625 }
mcm 2:4c2811c6faa1 626 }
mcm 2:4c2811c6faa1 627
mcm 2:4c2811c6faa1 628
mcm 2:4c2811c6faa1 629
mcm 2:4c2811c6faa1 630 /**
mcm 2:4c2811c6faa1 631 * @brief AMG8833_GetPixelInterruptTable ( AMG8833_data_t* )
mcm 2:4c2811c6faa1 632 *
mcm 2:4c2811c6faa1 633 * @details It gets pixel interrupt table.
mcm 2:4c2811c6faa1 634 *
mcm 2:4c2811c6faa1 635 * @param[in] N/A.
mcm 2:4c2811c6faa1 636 *
mcm 2:4c2811c6faa1 637 * @param[out] myPixelInterruptTable: Pixel interrupt table.
mcm 2:4c2811c6faa1 638 *
mcm 2:4c2811c6faa1 639 *
mcm 2:4c2811c6faa1 640 * @return Status of AMG8833_GetPixelInterruptTable.
mcm 2:4c2811c6faa1 641 *
mcm 2:4c2811c6faa1 642 *
mcm 2:4c2811c6faa1 643 * @author Manuel Caballero
mcm 2:4c2811c6faa1 644 * @date 11/January/2019
mcm 2:4c2811c6faa1 645 * @version 11/January/2019 The ORIGIN
mcm 2:4c2811c6faa1 646 * @pre N/A.
mcm 2:4c2811c6faa1 647 * @warning N/A.
mcm 2:4c2811c6faa1 648 */
mcm 2:4c2811c6faa1 649 AMG8833::AMG8833_status_t AMG8833::AMG8833_GetPixelInterruptTable ( AMG8833_data_t* myPixelInterruptTable )
mcm 2:4c2811c6faa1 650 {
mcm 2:4c2811c6faa1 651 char cmd = 0U;
mcm 2:4c2811c6faa1 652 uint32_t aux;
mcm 2:4c2811c6faa1 653
mcm 2:4c2811c6faa1 654 /* Get pixel interrupt table */
mcm 2:4c2811c6faa1 655 cmd = AMG8833_INT0;
mcm 2:4c2811c6faa1 656 aux = _i2c.write ( _AMG8833_Addr, &cmd, 1U, true );
mcm 2:4c2811c6faa1 657 aux = _i2c.read ( _AMG8833_Addr, (char*)&myPixelInterruptTable->pixelInterruptTable[0], 64U );
mcm 2:4c2811c6faa1 658
mcm 2:4c2811c6faa1 659
mcm 2:4c2811c6faa1 660
mcm 2:4c2811c6faa1 661
mcm 2:4c2811c6faa1 662 if ( aux == I2C_SUCCESS )
mcm 2:4c2811c6faa1 663 {
mcm 2:4c2811c6faa1 664 return AMG8833_SUCCESS;
mcm 2:4c2811c6faa1 665 }
mcm 2:4c2811c6faa1 666 else
mcm 2:4c2811c6faa1 667 {
mcm 2:4c2811c6faa1 668 return AMG8833_FAILURE;
mcm 2:4c2811c6faa1 669 }
mcm 2:4c2811c6faa1 670 }
mcm 2:4c2811c6faa1 671
mcm 2:4c2811c6faa1 672
mcm 2:4c2811c6faa1 673
mcm 2:4c2811c6faa1 674 /**
mcm 2:4c2811c6faa1 675 * @brief AMG8833_GetPixelRawTemperatures ( AMG8833_data_t* )
mcm 2:4c2811c6faa1 676 *
mcm 2:4c2811c6faa1 677 * @details It gets pixel raw temperature data.
mcm 2:4c2811c6faa1 678 *
mcm 2:4c2811c6faa1 679 * @param[in] N/A.
mcm 2:4c2811c6faa1 680 *
mcm 2:4c2811c6faa1 681 * @param[out] myPixelRawTemperatureData: Pixel raw temperature data.
mcm 2:4c2811c6faa1 682 *
mcm 2:4c2811c6faa1 683 *
mcm 2:4c2811c6faa1 684 * @return Status of AMG8833_GetPixelRawTemperatures.
mcm 2:4c2811c6faa1 685 *
mcm 2:4c2811c6faa1 686 *
mcm 2:4c2811c6faa1 687 * @author Manuel Caballero
mcm 2:4c2811c6faa1 688 * @date 11/January/2019
mcm 2:4c2811c6faa1 689 * @version 11/January/2019 The ORIGIN
mcm 2:4c2811c6faa1 690 * @pre N/A.
mcm 2:4c2811c6faa1 691 * @warning N/A.
mcm 2:4c2811c6faa1 692 */
mcm 2:4c2811c6faa1 693 AMG8833::AMG8833_status_t AMG8833::AMG8833_GetPixelRawTemperatures ( AMG8833_data_t* myPixelRawTemperatureData )
mcm 2:4c2811c6faa1 694 {
mcm 2:4c2811c6faa1 695 char cmd[128] = { 0U };
mcm 2:4c2811c6faa1 696 uint8_t i = 0U;
mcm 2:4c2811c6faa1 697 uint32_t aux;
mcm 2:4c2811c6faa1 698
mcm 2:4c2811c6faa1 699 /* Get pixel raw temperature value */
mcm 2:4c2811c6faa1 700 cmd[0] = AMG8833_T01L;
mcm 2:4c2811c6faa1 701 aux = _i2c.write ( _AMG8833_Addr, &cmd[0], 1U, true );
mcm 2:4c2811c6faa1 702 aux = _i2c.read ( _AMG8833_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ) );
mcm 2:4c2811c6faa1 703
mcm 2:4c2811c6faa1 704
mcm 2:4c2811c6faa1 705
mcm 2:4c2811c6faa1 706 for ( i = 0U; i < ( 64U ); i++ )
mcm 2:4c2811c6faa1 707 {
mcm 2:4c2811c6faa1 708 myPixelRawTemperatureData->pixelOutputRawValues[i] = cmd[( i << 1U ) + 1U];
mcm 2:4c2811c6faa1 709 myPixelRawTemperatureData->pixelOutputRawValues[i] <<= 8U;
mcm 2:4c2811c6faa1 710 myPixelRawTemperatureData->pixelOutputRawValues[i] |= cmd[( i << 1U )];
mcm 2:4c2811c6faa1 711 }
mcm 2:4c2811c6faa1 712
mcm 2:4c2811c6faa1 713
mcm 2:4c2811c6faa1 714
mcm 2:4c2811c6faa1 715
mcm 2:4c2811c6faa1 716 if ( aux == I2C_SUCCESS )
mcm 2:4c2811c6faa1 717 {
mcm 2:4c2811c6faa1 718 return AMG8833_SUCCESS;
mcm 2:4c2811c6faa1 719 }
mcm 2:4c2811c6faa1 720 else
mcm 2:4c2811c6faa1 721 {
mcm 2:4c2811c6faa1 722 return AMG8833_FAILURE;
mcm 2:4c2811c6faa1 723 }
mcm 2:4c2811c6faa1 724 }
mcm 2:4c2811c6faa1 725
mcm 2:4c2811c6faa1 726
mcm 2:4c2811c6faa1 727
mcm 2:4c2811c6faa1 728 /**
mcm 2:4c2811c6faa1 729 * @brief AMG8833_GetPixelTemperatures ( AMG8833_data_t* )
mcm 2:4c2811c6faa1 730 *
mcm 2:4c2811c6faa1 731 * @details It gets pixel temperature value in Celsius degrees.
mcm 2:4c2811c6faa1 732 *
mcm 2:4c2811c6faa1 733 * @param[in] N/A.
mcm 2:4c2811c6faa1 734 *
mcm 2:4c2811c6faa1 735 * @param[out] myPixelTemperatureData: Pixel temperature data.
mcm 2:4c2811c6faa1 736 *
mcm 2:4c2811c6faa1 737 *
mcm 2:4c2811c6faa1 738 * @return Status of AMG8833_GetPixelTemperatures.
mcm 2:4c2811c6faa1 739 *
mcm 2:4c2811c6faa1 740 *
mcm 2:4c2811c6faa1 741 * @author Manuel Caballero
mcm 2:4c2811c6faa1 742 * @date 11/January/2019
mcm 2:4c2811c6faa1 743 * @version 11/January/2019 The ORIGIN
mcm 2:4c2811c6faa1 744 * @pre N/A.
mcm 2:4c2811c6faa1 745 * @warning N/A.
mcm 2:4c2811c6faa1 746 */
mcm 2:4c2811c6faa1 747 AMG8833::AMG8833_status_t AMG8833::AMG8833_GetPixelTemperatures ( AMG8833_data_t* myPixelTemperatureData )
mcm 2:4c2811c6faa1 748 {
mcm 4:d3c9c6df14a8 749 uint8_t i = 0U;
mcm 2:4c2811c6faa1 750 float mySign = 0.0;
mcm 2:4c2811c6faa1 751 AMG8833::AMG8833_status_t aux;
mcm 2:4c2811c6faa1 752
mcm 2:4c2811c6faa1 753 /* Get pixel raw temperature data */
mcm 4:d3c9c6df14a8 754 aux = AMG8833::AMG8833_GetPixelRawTemperatures ( myPixelTemperatureData );
mcm 2:4c2811c6faa1 755
mcm 2:4c2811c6faa1 756
mcm 2:4c2811c6faa1 757 /* Parse the data */
mcm 2:4c2811c6faa1 758 for ( i = 0U; i < 64U; i++ )
mcm 2:4c2811c6faa1 759 {
mcm 2:4c2811c6faa1 760 /* Check if the temperature is negative */
mcm 2:4c2811c6faa1 761 if ( ( myPixelTemperatureData->pixelOutputRawValues[i] & 0x800 ) == 0x800 )
mcm 2:4c2811c6faa1 762 {
mcm 2:4c2811c6faa1 763 myPixelTemperatureData->pixelOutputRawValues[i] = ~myPixelTemperatureData->pixelOutputRawValues[i];
mcm 2:4c2811c6faa1 764 myPixelTemperatureData->pixelOutputRawValues[i] += 1U;
mcm 2:4c2811c6faa1 765 mySign = -1.0;
mcm 2:4c2811c6faa1 766 }
mcm 2:4c2811c6faa1 767 else
mcm 2:4c2811c6faa1 768 {
mcm 2:4c2811c6faa1 769 mySign = 1.0;
mcm 2:4c2811c6faa1 770 }
mcm 2:4c2811c6faa1 771
mcm 2:4c2811c6faa1 772
mcm 2:4c2811c6faa1 773 /* Parse the data */
mcm 2:4c2811c6faa1 774 myPixelTemperatureData->pixelOutputValues[i] = ( mySign ) * ( (float)( myPixelTemperatureData->pixelOutputRawValues[i] * TEMPERATURE_RESOLUTION ) );
mcm 2:4c2811c6faa1 775
mcm 2:4c2811c6faa1 776 }
mcm 2:4c2811c6faa1 777
mcm 2:4c2811c6faa1 778
mcm 2:4c2811c6faa1 779
mcm 2:4c2811c6faa1 780 if ( aux == AMG8833_SUCCESS )
mcm 2:4c2811c6faa1 781 {
mcm 2:4c2811c6faa1 782 return AMG8833_SUCCESS;
mcm 2:4c2811c6faa1 783 }
mcm 2:4c2811c6faa1 784 else
mcm 2:4c2811c6faa1 785 {
mcm 2:4c2811c6faa1 786 return AMG8833_FAILURE;
mcm 2:4c2811c6faa1 787 }
mcm 2:4c2811c6faa1 788 }