Interface with TMP112 and TMP102 temperature sensor
TMP112.h@0:2fbb524f0609, 2016-05-12 (annotated)
- 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?
User | Revision | Line number | New 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 |