Justin Howard / Mbed 2 deprecated AdaFruit_RGBLCD

Dependencies:   AdaFruit_RGBLCDShield MCP23017 mbed RTclock

Dependents:   SX1276_GPS

Fork of MCP_test by Wim Huiskamp

Committer:
vtraveller
Date:
Sat Aug 30 16:30:27 2014 +0000
Revision:
20:93c70a1869ee
Parent:
15:d1eaddb363be
Child:
21:c44cfd3259c0
Updated with temp sensor support.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vtraveller 10:3fcab08717fc 1 #include "mbed.h"
vtraveller 10:3fcab08717fc 2 #include "TempModule.h"
vtraveller 10:3fcab08717fc 3
vtraveller 10:3fcab08717fc 4 #include "extra_chars.h"
vtraveller 10:3fcab08717fc 5
vtraveller 20:93c70a1869ee 6 #define MCP9808_I2CADDR_DEFAULT 0x30
vtraveller 20:93c70a1869ee 7 #define MCP9808_REG_CONFIG 0x01
vtraveller 20:93c70a1869ee 8
vtraveller 20:93c70a1869ee 9 #define MCP9808_REG_CONFIG_SHUTDOWN 0x0100
vtraveller 20:93c70a1869ee 10 #define MCP9808_REG_CONFIG_CRITLOCKED 0x0080
vtraveller 20:93c70a1869ee 11 #define MCP9808_REG_CONFIG_WINLOCKED 0x0040
vtraveller 20:93c70a1869ee 12 #define MCP9808_REG_CONFIG_INTCLR 0x0020
vtraveller 20:93c70a1869ee 13 #define MCP9808_REG_CONFIG_ALERTSTAT 0x0010
vtraveller 20:93c70a1869ee 14 #define MCP9808_REG_CONFIG_ALERTCTRL 0x0008
vtraveller 20:93c70a1869ee 15 #define MCP9808_REG_CONFIG_ALERTSEL 0x0002
vtraveller 20:93c70a1869ee 16 #define MCP9808_REG_CONFIG_ALERTPOL 0x0002
vtraveller 20:93c70a1869ee 17 #define MCP9808_REG_CONFIG_ALERTMODE 0x0001
vtraveller 20:93c70a1869ee 18
vtraveller 20:93c70a1869ee 19 #define MCP9808_REG_UPPER_TEMP 0x02
vtraveller 20:93c70a1869ee 20 #define MCP9808_REG_LOWER_TEMP 0x03
vtraveller 20:93c70a1869ee 21 #define MCP9808_REG_CRIT_TEMP 0x04
vtraveller 20:93c70a1869ee 22 #define MCP9808_REG_AMBIENT_TEMP 0x05
vtraveller 20:93c70a1869ee 23 #define MCP9808_REG_MANUF_ID 0x06
vtraveller 20:93c70a1869ee 24 #define MCP9808_REG_DEVICE_ID 0x07
vtraveller 20:93c70a1869ee 25
vtraveller 13:9641bc42db92 26 TempModule::TempModule(Serial & in_cDisplay)
vtraveller 13:9641bc42db92 27 : Module(in_cDisplay)
vtraveller 20:93c70a1869ee 28 , m_cI2C(D3, D6) //I2C_SDA, I2C_SCL)
vtraveller 20:93c70a1869ee 29 , m_nAddress(MCP9808_I2CADDR_DEFAULT)
vtraveller 10:3fcab08717fc 30 {
vtraveller 20:93c70a1869ee 31 uint16_t nManufacturer = read16(MCP9808_REG_MANUF_ID);// != 0x0054) return false;
vtraveller 20:93c70a1869ee 32 uint16_t nDeviceId = read16(MCP9808_REG_DEVICE_ID);//
vtraveller 20:93c70a1869ee 33
vtraveller 20:93c70a1869ee 34 // Check to see if we need to autoscan for our device
vtraveller 20:93c70a1869ee 35 bool bAutoScan = (0x0054 != nManufacturer || 0x0400 != nDeviceId);
vtraveller 20:93c70a1869ee 36 if (bAutoScan) m_nAddress = 0;
vtraveller 20:93c70a1869ee 37
vtraveller 20:93c70a1869ee 38 while (bAutoScan && m_nAddress < 0x80)
vtraveller 20:93c70a1869ee 39 {
vtraveller 20:93c70a1869ee 40 nManufacturer = read16(MCP9808_REG_MANUF_ID);// != 0x0054) return false;
vtraveller 20:93c70a1869ee 41 nDeviceId = read16(MCP9808_REG_DEVICE_ID);//
vtraveller 20:93c70a1869ee 42
vtraveller 20:93c70a1869ee 43 bAutoScan = (0x0054 != nManufacturer || 0x0400 != nDeviceId);
vtraveller 20:93c70a1869ee 44 m_nAddress++;
vtraveller 20:93c70a1869ee 45 }
vtraveller 10:3fcab08717fc 46 }
vtraveller 10:3fcab08717fc 47
vtraveller 10:3fcab08717fc 48 TempModule::~TempModule()
vtraveller 10:3fcab08717fc 49 {
vtraveller 10:3fcab08717fc 50 }
vtraveller 11:96146db429de 51
vtraveller 20:93c70a1869ee 52 float TempModule::readTempC()
vtraveller 11:96146db429de 53 {
vtraveller 20:93c70a1869ee 54 uint16_t t = read16(MCP9808_REG_AMBIENT_TEMP);
vtraveller 20:93c70a1869ee 55
vtraveller 20:93c70a1869ee 56 float temp = t & 0x0FFF;
vtraveller 20:93c70a1869ee 57 temp /= 16.0f;
vtraveller 20:93c70a1869ee 58
vtraveller 20:93c70a1869ee 59 // check to see if signed bit set
vtraveller 20:93c70a1869ee 60 if (t & 0x1000) temp -= 0xff;
vtraveller 10:3fcab08717fc 61
vtraveller 20:93c70a1869ee 62 return temp;
vtraveller 20:93c70a1869ee 63 }
vtraveller 20:93c70a1869ee 64
vtraveller 20:93c70a1869ee 65 void TempModule::write16(uint8_t in_nRegister, uint16_t in_nValue)
vtraveller 20:93c70a1869ee 66 {
vtraveller 20:93c70a1869ee 67 char aBuffer[3] = { in_nRegister, in_nValue >> 8, in_nValue & 0xFF };
vtraveller 20:93c70a1869ee 68 m_cI2C.write(MCP9808_I2CADDR_DEFAULT, aBuffer, sizeof(aBuffer));
vtraveller 11:96146db429de 69 }
vtraveller 11:96146db429de 70
vtraveller 20:93c70a1869ee 71 uint16_t TempModule::read16(uint8_t in_nRegister)
vtraveller 10:3fcab08717fc 72 {
vtraveller 20:93c70a1869ee 73 m_cI2C.write(m_nAddress, (const char *)&in_nRegister, sizeof(in_nRegister));
vtraveller 10:3fcab08717fc 74
vtraveller 20:93c70a1869ee 75 char aReadBuffer[2];
vtraveller 20:93c70a1869ee 76 m_cI2C.read(m_nAddress, aReadBuffer, sizeof(aReadBuffer));
vtraveller 20:93c70a1869ee 77
vtraveller 20:93c70a1869ee 78 return (aReadBuffer[0] << 8) | aReadBuffer[1];
vtraveller 10:3fcab08717fc 79 }
vtraveller 10:3fcab08717fc 80
vtraveller 20:93c70a1869ee 81 void TempModule::show(bool in_bRefresh)
vtraveller 10:3fcab08717fc 82 {
vtraveller 20:93c70a1869ee 83 static time_t nTime = time(NULL) + 1;
vtraveller 20:93c70a1869ee 84 if (in_bRefresh || nTime < time(NULL))
vtraveller 20:93c70a1869ee 85 {
vtraveller 20:93c70a1869ee 86 m_cDisplay.printf("Room: %0.1f%cC ",readTempC(),eDegree);
vtraveller 20:93c70a1869ee 87
vtraveller 20:93c70a1869ee 88 // uint8_t nValue = read16(MCP9808_REG_MANUF_ID);
vtraveller 20:93c70a1869ee 89 // m_cDisplay.printf("%x - %x - %x ", m_nAddress, nValue,read16(MCP9808_REG_DEVICE_ID));
vtraveller 20:93c70a1869ee 90
vtraveller 20:93c70a1869ee 91 nTime = time(NULL) + 1;
vtraveller 20:93c70a1869ee 92 }
vtraveller 10:3fcab08717fc 93 }