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.
Revision 1:446c1b5f69ce, committed 2018-07-02
- Comitter:
- mcm
- Date:
- Mon Jul 02 10:16:15 2018 +0000
- Parent:
- 0:2ff4b1a68ef0
- Child:
- 2:677d79e0be8c
- Commit message:
- Header file is ready to be tested.
Changed in this revision
| TMP102.h | Show annotated file Show diff for this revision Revisions of this file |
--- a/TMP102.h Mon Jul 02 10:09:35 2018 +0000
+++ b/TMP102.h Mon Jul 02 10:16:15 2018 +0000
@@ -0,0 +1,288 @@
+/**
+ * @brief TMP102.h
+ * @details Low-Power Digital Temperature Sensor With SMBus and Two-Wire Serial.
+ * Header file.
+ *
+ *
+ * @return N/A
+ *
+ * @author Manuel Caballero
+ * @date 2/July/2018
+ * @version 2/July/2018 The ORIGIN
+ * @pre N/A
+ * @warning N/A
+ * @pre This code belongs to AqueronteBlog ( http://unbarquero.blogspot.com ).
+ */
+#ifndef TMP102_H
+#define TMP102_H
+
+#include "mbed.h"
+
+
+/**
+ Example:
+@code
+[todo]
+@endcode
+*/
+
+
+/*!
+ Library for the TMP102 Low-Power Digital Temperature Sensor With SMBus and Two-Wire Serial.
+*/
+class TMP102
+{
+public:
+ /**
+ * @brief DEFAULT ADDRESSES
+ */
+ typedef enum {
+ TMP102_ADDRESS_A0_GROUND = ( 0b1001000 << 1 ), /*!< TMP102 I2C Address: A0 connected to Ground */
+ TMP102_ADDRESS_A0_VPOS = ( 0b1001001 << 1 ), /*!< TMP102 I2C Address: A0 connected to V+ */
+ TMP102_ADDRESS_A0_SDA = ( 0b1001010 << 1 ), /*!< TMP102 I2C Address: A0 connected to SDA */
+ TMP102_ADDRESS_A0_SCL = ( 0b1001011 << 1 ) /*!< TMP102 I2C Address: A0 connected to SCL */
+ } TMP102_addresses_t;
+
+
+// REGISTERS
+ /**
+ * @brief REGISTERS BYTE
+ */
+ typedef enum {
+ TMP102_TEMPERATURE_REGISTER = 0x00, /*!< Temperature Register ( Read Only ) */
+ TMP102_CONFIGURATION_REGISTER = 0x01, /*!< Configuration Register ( Read/Write ) */
+ TMP102_T_LOW_REGISTER = 0x02, /*!< T LOW Register ( Read/Write ) */
+ TMP102_T_HIGH_REGISTER = 0x03 /*!< T HIGH Register ( Read/Write ) */
+ } TMP102_registers_byte_t;
+
+
+
+// TEMPERATURE REGISTER
+ /**
+ * @brief TEMPERATURE REGISTER
+ */
+ typedef enum {
+ TMP102_RESOLUTION_12_BITS_MASK = 0xFFF0, /*!< TMP102 configured as a 12-bit */
+ TMP102_RESOLUTION_13_BITS_MASK = 0xFFF8 /*!< TMP102 configured as a 13-bit */
+ } TMP102_temperature_register_t;
+
+
+
+// CONFIGURATION REGISTER
+ /**
+ * @brief SHUTDOWN MODE
+ */
+ typedef enum {
+ TMP102_CONFIGURATION_SD_MASK = ( 1U << 8 ), /*!< Shutdown Mode Mask */
+ TMP102_CONFIGURATION_SD_ENABLED = ( 1U << 8 ), /*!< Shutdown Mode Enabled */
+ TMP102_CONFIGURATION_SD_DISABLED = ( 0U << 8 ) /*!< Shutdown Mode Disabled */
+ } TMP102_configuration_shutdown_mode_t;
+
+
+ /**
+ * @brief THERMOSTAT MODE
+ */
+ typedef enum {
+ TMP102_CONFIGURATION_TM_MASK = ( 1U << 9 ), /*!< Thermostat Mode Mask */
+ TMP102_CONFIGURATION_TM_COMPARATOR_MODE = ( 0U << 9 ), /*!< Thermostat Mode: Comparator mode */
+ TMP102_CONFIGURATION_TM_INTERRUPT_MODE = ( 1U << 9 ) /*!< Thermostat Mode: Interrupt mode */
+ } TMP102_configuration_thermostat_mode_t;
+
+
+ /**
+ * @brief POLARITY
+ */
+ typedef enum {
+ TMP102_CONFIGURATION_POL_MASK = ( 1U << 10 ), /*!< Polarity Mask */
+ TMP102_CONFIGURATION_POL_ALERT_PIN_ACTIVE_LOW = ( 0U << 10 ), /*!< Polarity: ALERT pin becomes active low ( default ) */
+ TMP102_CONFIGURATION_POL_ALERT_PIN_ACTIVE_HIGH = ( 1U << 10 ) /*!< Polarity: ALERT pin becomes active high and the state of the ALERT pin is inverted */
+ } TMP102_configuration_polarity_t;
+
+
+ /**
+ * @brief FAULT QUEUE
+ */
+ typedef enum {
+ TMP102_CONFIGURATION_F1F0_MASK = ( 0b11 << 11 ), /*!< Fault Queue Mask */
+ TMP102_CONFIGURATION_F1F0_CONSECUTIVE_FAULTS_1 = ( 0b00 << 11 ), /*!< Fault Queue: consecutive faults: 1 */
+ TMP102_CONFIGURATION_F1F0_CONSECUTIVE_FAULTS_2 = ( 0b01 << 11 ), /*!< Fault Queue: consecutive faults: 2 */
+ TMP102_CONFIGURATION_F1F0_CONSECUTIVE_FAULTS_4 = ( 0b10 << 11 ), /*!< Fault Queue: consecutive faults: 4 */
+ TMP102_CONFIGURATION_F1F0_CONSECUTIVE_FAULTS_6 = ( 0b11 << 11 ) /*!< Fault Queue: consecutive faults: 6 */
+ } TMP102_configuration_fault_queue_t;
+
+
+ /**
+ * @brief CONVERTER RESOLUTION
+ */
+ typedef enum {
+ TMP102_CONFIGURATION_R1R0_MASK = ( 0b11 << 13 ) /*!< Converter resolution bits Mask */
+ } TMP102_configuration_converter_resolution_t;
+
+
+ /**
+ * @brief ONE-SHOT
+ */
+ typedef enum {
+ TMP102_CONFIGURATION_OS_MASK = ( 1U << 15 ), /*!< One-Shot Mask */
+ TMP102_CONFIGURATION_OS_START_SINGLE_TEMPERATURE_CONVERSION = ( 1U << 15 ), /*!< One-Shot It starts a single temperature conversion */
+ TMP102_CONFIGURATION_OS_BUSY = ( 0U << 15 ) /*!< One-Shot During the conversion, the OS bit reads '0' */
+ } TMP102_configuration_one_shot_t;
+
+
+
+ /**
+ * @brief EXTENDED-MODE BIT
+ */
+ typedef enum {
+ TMP102_CONFIGURATION_EM_MASK = ( 1U << 4 ), /*!< Extended-Mode Mask */
+ TMP102_CONFIGURATION_EM_NORMAL_MODE_OPERATION = ( 0U << 4 ), /*!< Extended-Mode: Normal Mode operation */
+ TMP102_CONFIGURATION_EM_EXTENDED_MODE_OPERATION = ( 1U << 4 ) /*!< Extended-Mode: Extended Mode operation */
+ } TMP102_configuration_extended_mode_bit_t;
+
+
+ /**
+ * @brief ALERT BIT
+ */
+ typedef enum {
+ TMP102_CONFIGURATION_AL_MASK = ( 1U << 5 ) /*!< Alert Mask */
+ } TMP102_configuration_alert_bit_t;
+
+
+ /**
+ * @brief CONVERSION RATE
+ */
+ typedef enum {
+ TMP102_CONFIGURATION_CR_MASK = ( 0b11 << 6 ), /*!< Conversion Rate Mask */
+ TMP102_CONFIGURATION_CR_0_25_HZ = ( 0b00 << 6 ), /*!< Conversion Rate: 0.25Hz */
+ TMP102_CONFIGURATION_CR_1_HZ = ( 0b01 << 6 ), /*!< Conversion Rate: 1Hz */
+ TMP102_CONFIGURATION_CR_4_HZ = ( 0b10 << 6 ), /*!< Conversion Rate: 4Hz ( default ) */
+ TMP102_CONFIGURATION_CR_8_HZ = ( 0b11 << 6 ) /*!< Conversion Rate: 8Hz */
+ } TMP102_configuration_conversion_rate_t;
+
+
+
+// HIGH-TEMPERATURE REGISTER
+ /**
+ * @brief TEMPERATURE REGISTER
+ */
+ typedef enum {
+ TMP102_THIGH_RESOLUTION_12_BITS_MASK = 0xFFF0, /*!< THIGH configured as a 12-bit */
+ TMP102_THIGH_RESOLUTION_13_BITS_MASK = 0xFFF8 /*!< THIGH configured as a 13-bit */
+ } TMP102_high_temperature_register_t;
+
+
+
+// LOW-TEMPERATURE REGISTER
+ /**
+ * @brief TEMPERATURE REGISTER
+ */
+ typedef enum {
+ TMP102_TLOW_RESOLUTION_12_BITS_MASK = 0xFFF0, /*!< TLOW configured as a 12-bit */
+ TMP102_TLOW_RESOLUTION_13_BITS_MASK = 0xFFF8 /*!< TLOW configured as a 13-bit */
+ } TMP102_low_temperature_register_t;
+
+
+
+
+#ifndef TMP102_VECTOR_STRUCT_H
+#define TMP102_VECTOR_STRUCT_H
+ typedef struct {
+ float Temperature;
+
+ int16_t TemperatureRegister;
+ uint16_t ConfigurationRegister;
+ int16_t TLOW_Register;
+ int16_t THIGH_Register;
+ } TMP102_vector_data_t;
+#endif
+
+
+ /**
+ * @brief INTERNAL CONSTANTS
+ */
+ typedef enum {
+ TMP102_SUCCESS = 0,
+ TMP102_FAILURE = 1,
+ I2C_SUCCESS = 0 /*!< I2C communication was fine */
+ } TMP102_status_t;
+
+
+
+
+ /** Create an TMP102 object connected to the specified I2C pins.
+ *
+ * @param sda I2C data pin
+ * @param scl I2C clock pin
+ * @param addr I2C slave address
+ */
+ TMP102 ( PinName sda, PinName scl, uint32_t addr );
+
+ /** Delete TMP102 object.
+ */
+ ~TMP102();
+
+ /** It gets the temperature register value ( raw temperature ).
+ */
+ TMP102_status_t TMP102_ReadTemperatureRegister ( TMP102_vector_data_t* myTemperatureRegister );
+
+ /** It gets the temperature value.
+ */
+ TMP102_status_t TMP102_GetTemperature ( TMP102_vector_data_t* myTemperature );
+
+ /** It gets the low temperature register value.
+ */
+ TMP102_status_t TMP102_Read_T_LOW_Register ( TMP102_vector_data_t* myTLOW_Register );
+
+ /** It updates the low temperature register value.
+ */
+ TMP102_status_t TMP102_Write_T_LOW_Register ( TMP102_vector_data_t myTLOW_Register );
+
+ /** It gets the high temperature register value.
+ */
+ TMP102_status_t TMP102_Read_T_HIGH_Register ( TMP102_vector_data_t* myTHIGH_Register );
+
+ /** It updates the high temperature register value.
+ */
+ TMP102_status_t TMP102_Write_T_HIGH_Register ( TMP102_vector_data_t myTHIGH_Register );
+
+ /** It gets the configuration register value.
+ */
+ TMP102_status_t TMP102_ReadConfigurationRegister ( TMP102_vector_data_t* myConfigurationRegister );
+
+ /** It enables shutdown/continuous mode operation.
+ */
+ TMP102_status_t TMP102_SetShutdownMode ( TMP102_configuration_shutdown_mode_t mySDMode );
+
+ /** It enables comparator/interrupt mode operation.
+ */
+ TMP102_status_t TMP102_SetThermostatMode ( TMP102_configuration_thermostat_mode_t myTMMode );
+
+ /** The polarity bit allows the user to adjust the polarity of the ALERT pin output.
+ */
+ TMP102_status_t TMP102_SetPolarityAlertPinOutput ( TMP102_configuration_polarity_t myPOLMode );
+
+ /** The number of fault conditions required to generate an alert may be programmed using the fault queue.
+ */
+ TMP102_status_t TMP102_SetConsecutiveFaultsQueue ( TMP102_configuration_fault_queue_t myF1F0Mode );
+
+ /** When the device is in Shutdown Mode, writing a 1 to the OS bit starts a single temperature conversion.
+ */
+ TMP102_status_t TMP102_TriggerSingleTemperatureConversion ( void );
+
+ /** It sets the device into Normal/Extended mode operation.
+ */
+ TMP102_status_t TMP102_SetModeOperation ( TMP102_configuration_extended_mode_bit_t myEMMode );
+
+ /** It sets the conversion rate for the device.
+ */
+ TMP102_status_t TMP102_SetConversionRate ( I2C_parameters_t myI2Cparameters, TMP102_configuration_conversion_rate_t myCR );
+
+
+
+
+private:
+ I2C _i2c;
+ uint32_t _TMP102_Addr;
+};
+
+#endif