Interface with TMP112 and TMP102 temperature sensor

Dependents:   tmp112HelloWorld

Committer:
CamiloRuiz
Date:
Thu May 12 21:49:05 2016 +0000
Revision:
0:2fbb524f0609
First working version.; ; extended mode, negative values and oneshot mode are not supported yet.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
CamiloRuiz 0:2fbb524f0609 1 /*
CamiloRuiz 0:2fbb524f0609 2 Copyright (c) 2016 Camilo Ruiz
CamiloRuiz 0:2fbb524f0609 3
CamiloRuiz 0:2fbb524f0609 4 Permission is hereby granted, free of charge, to any person obtaining a copy
CamiloRuiz 0:2fbb524f0609 5 of this software and associated documentation files (the "Software"), to deal
CamiloRuiz 0:2fbb524f0609 6 in the Software without restriction, including without limitation the rights
CamiloRuiz 0:2fbb524f0609 7 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
CamiloRuiz 0:2fbb524f0609 8 copies of the Software, and to permit persons to whom the Software is
CamiloRuiz 0:2fbb524f0609 9 furnished to do so, subject to the following conditions:
CamiloRuiz 0:2fbb524f0609 10
CamiloRuiz 0:2fbb524f0609 11 The above copyright notice and this permission notice shall be included in
CamiloRuiz 0:2fbb524f0609 12 all copies or substantial portions of the Software.
CamiloRuiz 0:2fbb524f0609 13
CamiloRuiz 0:2fbb524f0609 14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
CamiloRuiz 0:2fbb524f0609 15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
CamiloRuiz 0:2fbb524f0609 16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
CamiloRuiz 0:2fbb524f0609 17 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
CamiloRuiz 0:2fbb524f0609 18 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
CamiloRuiz 0:2fbb524f0609 19 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
CamiloRuiz 0:2fbb524f0609 20 THE SOFTWARE.
CamiloRuiz 0:2fbb524f0609 21 */
CamiloRuiz 0:2fbb524f0609 22
CamiloRuiz 0:2fbb524f0609 23 //this should work with tmp102 too
CamiloRuiz 0:2fbb524f0609 24 //I do not use negative values on my application, this code has to be tweaked to support it
CamiloRuiz 0:2fbb524f0609 25 //I do not use extended mode, this code has to be tweaked to support it
CamiloRuiz 0:2fbb524f0609 26
CamiloRuiz 0:2fbb524f0609 27 //greetings from Colombia :)
CamiloRuiz 0:2fbb524f0609 28
CamiloRuiz 0:2fbb524f0609 29 #ifndef TMP112_H
CamiloRuiz 0:2fbb524f0609 30 #define TMP112_H
CamiloRuiz 0:2fbb524f0609 31
CamiloRuiz 0:2fbb524f0609 32 #include "mbed.h"
CamiloRuiz 0:2fbb524f0609 33
CamiloRuiz 0:2fbb524f0609 34
CamiloRuiz 0:2fbb524f0609 35 // Configuration Settings
CamiloRuiz 0:2fbb524f0609 36 #define TMP112_CFG_ONESHOT 0x8000
CamiloRuiz 0:2fbb524f0609 37 //resolution read only
CamiloRuiz 0:2fbb524f0609 38 #define TMP112_12BITS 0x6000 /*default*/
CamiloRuiz 0:2fbb524f0609 39 //Fault Queue
CamiloRuiz 0:2fbb524f0609 40 #define TMP112_CFG_1FAULT 0x0000 /*default*/
CamiloRuiz 0:2fbb524f0609 41 #define TMP112_CFG_2FAULT 0x0800
CamiloRuiz 0:2fbb524f0609 42 #define TMP112_CFG_4FAULT 0x1000
CamiloRuiz 0:2fbb524f0609 43 #define TMP112_CFG_6FAULT 0x1800
CamiloRuiz 0:2fbb524f0609 44 //alert Polarity
CamiloRuiz 0:2fbb524f0609 45 #define TMP112_CFG_ALERT_LOW 0x0000 /*default*/
CamiloRuiz 0:2fbb524f0609 46 #define TMP112_CFG_ALERT_HIGH 0x0400
CamiloRuiz 0:2fbb524f0609 47 //Thermostat mode
CamiloRuiz 0:2fbb524f0609 48 #define TMP112_CFG_TM_COMP_MODE 0x0000 /*default*/
CamiloRuiz 0:2fbb524f0609 49 #define TMP112_CFG_TM_INT_MODE 0x0200
CamiloRuiz 0:2fbb524f0609 50 //Shutdown mode
CamiloRuiz 0:2fbb524f0609 51 #define TMP112_CFG_ON 0x0000 /*default*/
CamiloRuiz 0:2fbb524f0609 52 #define TMP112_CFG_OFF 0x0100
CamiloRuiz 0:2fbb524f0609 53 //Convertion rate
CamiloRuiz 0:2fbb524f0609 54 #define TMP112_CFG_CR_0_25Hz 0x0000
CamiloRuiz 0:2fbb524f0609 55 #define TMP112_CFG_CR_1Hz 0x0040
CamiloRuiz 0:2fbb524f0609 56 #define TMP112_CFG_CR_4Hz 0x0080 /*default*/
CamiloRuiz 0:2fbb524f0609 57 #define TMP112_CFG_CR_8Hz 0x00C0
CamiloRuiz 0:2fbb524f0609 58 //alert- Read Only
CamiloRuiz 0:2fbb524f0609 59 #define TMP112_CFG_ALERT 0x0020
CamiloRuiz 0:2fbb524f0609 60 //Extended mode
CamiloRuiz 0:2fbb524f0609 61 #define TMP112_CFG_EM_ON 0x0010
CamiloRuiz 0:2fbb524f0609 62 #define TMP112_CFG_EM_OFF 0x0000 /*default*/
CamiloRuiz 0:2fbb524f0609 63 //default mode
CamiloRuiz 0:2fbb524f0609 64 #define TMP112_CFG_DEF_MODE 0x60A0
CamiloRuiz 0:2fbb524f0609 65
CamiloRuiz 0:2fbb524f0609 66
CamiloRuiz 0:2fbb524f0609 67
CamiloRuiz 0:2fbb524f0609 68 // Registers to read thermopile voltage and sensor temperature
CamiloRuiz 0:2fbb524f0609 69
CamiloRuiz 0:2fbb524f0609 70 class TMP112
CamiloRuiz 0:2fbb524f0609 71 {
CamiloRuiz 0:2fbb524f0609 72 public:
CamiloRuiz 0:2fbb524f0609 73
CamiloRuiz 0:2fbb524f0609 74 // Constructor
CamiloRuiz 0:2fbb524f0609 75 TMP112(PinName sda, PinName scl, int addr);
CamiloRuiz 0:2fbb524f0609 76
CamiloRuiz 0:2fbb524f0609 77 /** Read temperature register*/
CamiloRuiz 0:2fbb524f0609 78
CamiloRuiz 0:2fbb524f0609 79 float readTemperature();
CamiloRuiz 0:2fbb524f0609 80 float readTM_Htemp();
CamiloRuiz 0:2fbb524f0609 81 float readTM_Ltemp();
CamiloRuiz 0:2fbb524f0609 82
CamiloRuiz 0:2fbb524f0609 83 /** Read Conf registers */
CamiloRuiz 0:2fbb524f0609 84
CamiloRuiz 0:2fbb524f0609 85 uint16_t readCFG();
CamiloRuiz 0:2fbb524f0609 86
CamiloRuiz 0:2fbb524f0609 87 /** Set Conf options */
CamiloRuiz 0:2fbb524f0609 88
CamiloRuiz 0:2fbb524f0609 89 void writeCFG(uint16_t cfg); //give the sensor some time to power up before issuing this
CamiloRuiz 0:2fbb524f0609 90 //write thermostat temperatures
CamiloRuiz 0:2fbb524f0609 91 void write_TM_Htemp(float temp);
CamiloRuiz 0:2fbb524f0609 92 void write_TM_Ltemp(float temp);
CamiloRuiz 0:2fbb524f0609 93
CamiloRuiz 0:2fbb524f0609 94
CamiloRuiz 0:2fbb524f0609 95 /*!
CamiloRuiz 0:2fbb524f0609 96 Destroys instance.
CamiloRuiz 0:2fbb524f0609 97 */
CamiloRuiz 0:2fbb524f0609 98 ~TMP112();
CamiloRuiz 0:2fbb524f0609 99
CamiloRuiz 0:2fbb524f0609 100
CamiloRuiz 0:2fbb524f0609 101
CamiloRuiz 0:2fbb524f0609 102 private:
CamiloRuiz 0:2fbb524f0609 103 I2C m_i2c;
CamiloRuiz 0:2fbb524f0609 104 int m_addr;
CamiloRuiz 0:2fbb524f0609 105 char extended_mode;
CamiloRuiz 0:2fbb524f0609 106 float readTmpReg(char reg);
CamiloRuiz 0:2fbb524f0609 107 void writeTmpReg(char reg,float temp);
CamiloRuiz 0:2fbb524f0609 108 };
CamiloRuiz 0:2fbb524f0609 109
CamiloRuiz 0:2fbb524f0609 110 #endif