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.h
- Committer:
- mcm
- Date:
- 2018-12-10
- Revision:
- 3:f632c66b30df
- Parent:
- 1:e8e0ef45b115
- Child:
- 4:56398c14bf1f
File content as of revision 3:f632c66b30df:
/** * @brief TMP006.h * @details Infrared Thermopile Sensor in Chip-Scale Package. * Header file. * * * @return N/A * * @author Manuel Caballero * @date 10/December/2018 * @version 10/December/2018 The ORIGIN * @pre N/A * @warning N/A * @pre This code belongs to Nimbus Centre ( http://www.nimbus.cit.ie ). All rights reserved. */ #ifndef TMP006_H #define TMP006_H #include "mbed.h" #include <math.h> /** Example: @code @endcode */ /*! Library for the TMP006 Infrared Thermopile Sensor in Chip-Scale Package. */ class TMP006 { public: /** * @brief DEFAULT ADDRESSES */ typedef enum { TMP006_ADDRESS_ADR1_0_ADR0_0 = ( 0b1000000 << 1U ), /*!< TMP006 I2C Address: ADR1 = 0 | ADR0 = 0 */ TMP006_ADDRESS_ADR1_0_ADR0_1 = ( 0b1000001 << 1U ), /*!< TMP006 I2C Address: ADR1 = 0 | ADR0 = 1 */ TMP006_ADDRESS_ADR1_0_ADR0_SDA = ( 0b1000010 << 1U ), /*!< TMP006 I2C Address: ADR1 = 0 | ADR0 = SDA */ TMP006_ADDRESS_ADR1_0_ADR0_SCL = ( 0b1000011 << 1U ), /*!< TMP006 I2C Address: ADR1 = 0 | ADR0 = SCL */ TMP006_ADDRESS_ADR1_1_ADR0_0 = ( 0b1000100 << 1U ), /*!< TMP006 I2C Address: ADR1 = 1 | ADR0 = 0 */ TMP006_ADDRESS_ADR1_1_ADR0_1 = ( 0b1000101 << 1U ), /*!< TMP006 I2C Address: ADR1 = 1 | ADR0 = 1 */ TMP006_ADDRESS_ADR1_1_ADR0_SDA = ( 0b1000110 << 1U ), /*!< TMP006 I2C Address: ADR1 = 1 | ADR0 = SDA */ TMP006_ADDRESS_ADR1_1_ADR0_SCL = ( 0b1000111 << 1U ) /*!< TMP006 I2C Address: ADR1 = 1 | ADR0 = SCL */ } TMP006_addresses_t; /** * @brief REGISTER MAP */ typedef enum { TMP006_SENSOR_VOLTAGE = 0x00, /*!< Sensor voltage ( Read Only ) */ TMP006_LOCAL_TEMPERATURE = 0x01, /*!< Local temperature ( Read Only ) */ TMP006_CONFIGURATION = 0x02, /*!< Configuration ( Read/Write ) */ TMP006_MANUFACTURER_ID = 0xFE, /*!< Manufacturer ID ( Read Only ) */ TMP006_DEVICE_ID = 0xFF /*!< Device ID ( Read Only ) */ } TMP006_register_map_t; /** * @brief CONFIGURATION REGISTER */ /* SOFTWARE RESET BIT <15> */ typedef enum { RST_BIT_MASK = ( 1U << 15U ), /*!< Software reset bit mask */ RST_NORMAL_OPERATION = ( 0U << 15U ), /*!< Software reset bit: Normal operation ( RESET ) */ RST_SOFTWARE_RESET = ( 1U << 15U ) /*!< Software reset bit: Software reset */ } TMP006_rst_t; /* MODE OF OPERATION <14:12> */ typedef enum { MOD_MASK = ( 0b111 << 12U ), /*!< Mode of operation mask */ MOD_POWER_DOWN = ( 0b000 << 12U ), /*!< Mode of operation: Power-down */ MOD_SENSOR_AND_DIE_CONT_CONVERSION = ( 0b111 << 12U ) /*!< Mode of operation: Sensor and die continuous conversion (MOD) ( RESET ) */ } TMP006_mod_t; /* ADC CONVERSION RATE <11:9> */ typedef enum { CR_MASK = ( 0b111 << 9U ), /*!< ADC Conversion rate mask */ CR_1_AVERAGED_SAMPLES = ( 0b000 << 9U ), /*!< ADC Conversion rate: 1 number of averaged sample */ CR_2_AVERAGED_SAMPLES = ( 0b001 << 9U ), /*!< ADC Conversion rate: 2 number of averaged sample */ CR_4_AVERAGED_SAMPLES = ( 0b010 << 9U ), /*!< ADC Conversion rate: 4 number of averaged sample ( RESET ) */ CR_8_AVERAGED_SAMPLES = ( 0b011 << 9U ), /*!< ADC Conversion rate: 8 number of averaged sample */ CR_16_AVERAGED_SAMPLES = ( 0b100 << 9U ) /*!< ADC Conversion rate: 16 number of averaged sample */ } TMP006_cr_t; /* #DRDY ENABLE BIT <8> */ typedef enum { EN_MASK = ( 1U << 8U ), /*!< #DRDY enable bit mask */ EN_nDRDY_PIN_DISABLED = ( 0U << 8U ), /*!< #DRDY enable bit: Pin disabled ( RESET ) */ EN_nDRDY_PIN_ENABLED = ( 1U << 8U ) /*!< #DRDY enable bit: Pin enabled */ } TMP006_en_t; /* DATA READY BIT <7> */ typedef enum { nDRDY_MASK = ( 1U << 7U ), /*!< Data ready bit mask */ nDRDY_CONVERSION_IN_PROGRESS = ( 0U << 7U ), /*!< Data ready bit: Conversion in progress ( RESET ) */ nDRDY_CONVERSION_COMPLETED = ( 1U << 7U ) /*!< Data ready bit: Conversion completed */ } TMP006_ndrdy_t; /** * @brief MANUFACTURER ID REGISTER */ typedef enum { MANUFACTURER_ID_MASK = 0xFFFF, /*!< Manufacturer ID mask */ MANUFACTURER_ID_VALUE = 0x5449 /*!< Manufacturer ID value ( RESET ) */ } TMP006_manufacturer_id_register_t; /** * @brief DEVICE ID REGISTER */ typedef enum { DEVICE_ID_MASK = 0xFFFF, /*!< Device ID mask */ DEVICE_ID_VALUE = 0x0067 /*!< Device ID value ( RESET ) */ } TMP006_device_id_register_t; /** * @brief CONSTANS TO BE USED IN THE FORMULAS * NOTE: User Guide ( sbou107.pdf ) 5.1 Equations for Calculating Target Object Temperatures, p10. */ #define A1 0.00175 /*!< A1 */ #define A2 -0.00001678 /*!< A2 */ #define T_REF 298.15 /*!< T_REF, Kelvin */ #define B0 -0.0000294 /*!< B0 */ #define B1 -0.00000057 /*!< B1 */ #define B2 -0.00000000463 /*!< B2 */ #define C2 13.4 /*!< C2 */ #define S0 ( ( 0.00000000000005 + 0.00000000000007 ) / 2.0 ) /*!< Primary calibration sensitivity factor ( mean of typical values ) */ #define TEMP_1LSB 0.03125 /*!< Temperature: 1 LSB = 1 / 32°C = 0.03125 */ #define SVOL_1LSB 156.25 /*!< Sensor voltage: 1 LSB = 156.25 nV */ #ifndef TMP006_VECTOR_STRUCT_H #define TMP006_VECTOR_STRUCT_H typedef struct { float ObjectTemperatureC; /*!< Temperature of the target object in Celsius degrees */ float ObjectTemperatureK; /*!< Temperature of the target object in Kelvins degrees */ float TemperatureK; /*!< T_DIE in Kelvins degrees */ float TemperatureC; /*!< T_DIE in Celsius degrees */ float V_Sensor; /*!< Sensor voltage result */ float s0; /*!< Primary calibration sensitivity factor ( typical values: 5×10^–14 and 7×10^–14 ) */ uint16_t SensorVoltageResultRegister; /*!< V_sensor */ uint16_t TemperatureRegister; /*!< T_DIE */ uint16_t ConfigurationRegister; /*!< Configuration register */ uint16_t ManufacturerID; /*!< Manufacturer ID */ uint16_t DeviceID; /*!< Device ID */ } TMP006_data_t; #endif /** * @brief INTERNAL CONSTANTS */ typedef enum { TMP006_SUCCESS = 0U, TMP006_FAILURE = 1U, I2C_SUCCESS = 0U /*!< I2C communication was fine */ } TMP006_status_t; /** Create an TMP006 object connected to the specified I2C pins. * * @param sda I2C data pin * @param scl I2C clock pin * @param addr I2C slave address * @param freq I2C frequency */ TMP006 ( PinName sda, PinName scl, uint32_t addr, uint32_t freq ); /** Delete TMP006 object. */ ~TMP006(); /** It gets the manufacturer ID. */ TMP006_status_t TMP006_GetManufacturerID ( TMP006_data_t* myManufacturerID ); /** It gets the device ID. */ TMP006_status_t TMP006_GetDeviceID ( TMP006_data_t* myDeviceID ); /** It reads the configuration register. */ TMP006_status_t TMP006_ReadConfigurationRegister ( TMP006_data_t* myConfReg ); /** It performs a software reset. */ TMP006_status_t TMP006_SoftwareReset ( void ); /** It sets mode of operation. */ TMP006_status_t TMP006_SetModeOperation ( TMP006_mod_t myModeOpreation ); /** It sets conversion rate. */ TMP006_status_t TMP006_SetConversionRate ( TMP006_cr_t myConversionRate ); /** It sets #DRDY control. */ TMP006_status_t TMP006_SetnDRDY_EnableBit ( TMP006_en_t myEnableBit ); /** It reads raw temperature ( T_DIE ) register. */ TMP006_status_t TMP006_GetRawTemperature ( TMP006_data_t* myRawTemperature ); /** It reads raw sensor voltage result ( V_SENSOR ) register. */ TMP006_status_t TMP006_GetRawSensorVoltage ( TMP006_data_t* myRawVoltage ); /** It calculates the real temperature ( T_DIE ) value. */ TMP006_status_t TMP006_CalculateTemperature ( TMP006_data_t* myTemperature ); /** It calculates the real sensor voltage ( V_SENSOR ) value. */ TMP006_status_t TMP006_CalculateSensorVoltage ( TMP006_data_t* myV_sensor ); /** It calculates the object temperature ( T_OBJ ) value. */ TMP006_status_t TMP006_CalculateObjectTemperature( TMP006_data_t* myObjTemperature ); private: I2C _i2c; uint32_t _TMP006_Addr; }; #endif