Lib to read the MCP9808 over Initialized I2C bus
MCP9808.cpp@0:46326feade89, 2016-04-12 (annotated)
- Committer:
- mederic
- Date:
- Tue Apr 12 09:02:48 2016 +0000
- Revision:
- 0:46326feade89
1st realease
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mederic | 0:46326feade89 | 1 | #include "MCP9808.h" |
mederic | 0:46326feade89 | 2 | |
mederic | 0:46326feade89 | 3 | //***********************************/************************************ |
mederic | 0:46326feade89 | 4 | // Constant // |
mederic | 0:46326feade89 | 5 | //***********************************/************************************ |
mederic | 0:46326feade89 | 6 | #define MCP9808_I2C_ADDR 0x30 //( 18<<1) |
mederic | 0:46326feade89 | 7 | |
mederic | 0:46326feade89 | 8 | #define MCP9808_REG_CONFIG 0x01 |
mederic | 0:46326feade89 | 9 | #define MCP9808_REG_TUPPER 0x02 |
mederic | 0:46326feade89 | 10 | #define MCP9808_REG_TLOWER 0x03 |
mederic | 0:46326feade89 | 11 | #define MCP9808_REG_TCRIT 0x04 |
mederic | 0:46326feade89 | 12 | #define MCP9808_REG_TAMB 0x05 |
mederic | 0:46326feade89 | 13 | #define MCP9808_REG_MANID 0x06 |
mederic | 0:46326feade89 | 14 | #define MCP9808_REG_DEVID 0x07 |
mederic | 0:46326feade89 | 15 | #define MCP9808_REG_RESOL 0x08 |
mederic | 0:46326feade89 | 16 | |
mederic | 0:46326feade89 | 17 | #define MCP9808_TAMB_MASK 0x0F |
mederic | 0:46326feade89 | 18 | #define MCP9808_SIGN_POS 0x03 |
mederic | 0:46326feade89 | 19 | |
mederic | 0:46326feade89 | 20 | //***********************************/************************************ |
mederic | 0:46326feade89 | 21 | // Constructors // |
mederic | 0:46326feade89 | 22 | //***********************************/************************************ |
mederic | 0:46326feade89 | 23 | MCP9808::MCP9808(I2C *i2c, bool a0, bool a1, bool a2):_i2c(i2c) |
mederic | 0:46326feade89 | 24 | { |
mederic | 0:46326feade89 | 25 | _addr = (MCP9808_I2C_ADDR | (a2<<3) | (a1<<2) | (a0<<1)); |
mederic | 0:46326feade89 | 26 | } |
mederic | 0:46326feade89 | 27 | |
mederic | 0:46326feade89 | 28 | float MCP9808::getTemp(void) |
mederic | 0:46326feade89 | 29 | { |
mederic | 0:46326feade89 | 30 | char reg = MCP9808_REG_TAMB; |
mederic | 0:46326feade89 | 31 | float ta; |
mederic | 0:46326feade89 | 32 | char buf[2]; |
mederic | 0:46326feade89 | 33 | |
mederic | 0:46326feade89 | 34 | _i2c->write(_addr, ®, 1); |
mederic | 0:46326feade89 | 35 | _i2c->read(_addr, buf, 2); |
mederic | 0:46326feade89 | 36 | |
mederic | 0:46326feade89 | 37 | /* |
mederic | 0:46326feade89 | 38 | if(buf[0] & (1<<MCP9808_SIGN_POS)) |
mederic | 0:46326feade89 | 39 | { |
mederic | 0:46326feade89 | 40 | buf[0] &= MCP9808_TAMB_MASK; |
mederic | 0:46326feade89 | 41 | |
mederic | 0:46326feade89 | 42 | ta = 256 - (buf[0]*16 + buf[1]*0.0625); |
mederic | 0:46326feade89 | 43 | } |
mederic | 0:46326feade89 | 44 | else |
mederic | 0:46326feade89 | 45 | { |
mederic | 0:46326feade89 | 46 | buf[0] &= MCP9808_TAMB_MASK; |
mederic | 0:46326feade89 | 47 | ta = (buf[0]*16 + buf[1]*0.0625); |
mederic | 0:46326feade89 | 48 | }*/ |
mederic | 0:46326feade89 | 49 | |
mederic | 0:46326feade89 | 50 | ta = ((buf[0]&MCP9808_TAMB_MASK) << 8) | buf[1]; |
mederic | 0:46326feade89 | 51 | ta /= 16.0; |
mederic | 0:46326feade89 | 52 | |
mederic | 0:46326feade89 | 53 | if(buf[0] & (1<<MCP9808_SIGN_POS)) |
mederic | 0:46326feade89 | 54 | { |
mederic | 0:46326feade89 | 55 | ta -= 256; |
mederic | 0:46326feade89 | 56 | } |
mederic | 0:46326feade89 | 57 | |
mederic | 0:46326feade89 | 58 | return ta; |
mederic | 0:46326feade89 | 59 | } |
mederic | 0:46326feade89 | 60 |