Lib to read the MCP9808 over Initialized I2C bus

Committer:
mederic
Date:
Tue Apr 12 09:02:48 2016 +0000
Revision:
0:46326feade89
1st realease

Who changed what in which revision?

UserRevisionLine numberNew 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, &reg, 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