LM75B Digital temperature sensor and thermal watchdog
Dependents: testLM75B testSensor TCPSocket_Client
LM75B.cpp@2:f7dc7b327a4a, 2016-07-06 (annotated)
- Committer:
- Rhyme
- Date:
- Wed Jul 06 07:28:18 2016 +0000
- Revision:
- 2:f7dc7b327a4a
- Parent:
- 1:61987c319606
sample code in the header had errors and they have been fixed
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Rhyme | 0:1cf64e89f29d | 1 | #include "mbed.h" |
Rhyme | 0:1cf64e89f29d | 2 | #include "LM75B.h" |
Rhyme | 0:1cf64e89f29d | 3 | |
Rhyme | 0:1cf64e89f29d | 4 | /* Register list */ |
Rhyme | 0:1cf64e89f29d | 5 | #define PTR_CONF 0x01 |
Rhyme | 0:1cf64e89f29d | 6 | #define PTR_TEMP 0x00 |
Rhyme | 0:1cf64e89f29d | 7 | #define PTR_TOS 0x03 |
Rhyme | 0:1cf64e89f29d | 8 | #define PTR_THYST 0x02 |
Rhyme | 0:1cf64e89f29d | 9 | |
Rhyme | 0:1cf64e89f29d | 10 | /* Configuration register */ |
Rhyme | 0:1cf64e89f29d | 11 | /* B[7:5] : Reserved */ |
Rhyme | 0:1cf64e89f29d | 12 | /* B[4:3] : OS_F_QUE[1:0] OS fault queue value */ |
Rhyme | 0:1cf64e89f29d | 13 | #define CONFIG_QUE_1 0x00 |
Rhyme | 0:1cf64e89f29d | 14 | #define CONFIG_QUE_2 (0x01 << 3) |
Rhyme | 0:1cf64e89f29d | 15 | #define CONFIG_QUE_4 (0x10 << 3) |
Rhyme | 0:1cf64e89f29d | 16 | #define CONFIG_QUE_6 (0x11 << 3) |
Rhyme | 0:1cf64e89f29d | 17 | /* B[2] : OS_POL 0 = OS active LOW, 1 = OS active HIGH */ |
Rhyme | 0:1cf64e89f29d | 18 | #define CONFIG_OS_POL_L 0x00 |
Rhyme | 0:1cf64e89f29d | 19 | #define CONFIG_OS_POL_H (0x01 << 2) |
Rhyme | 0:1cf64e89f29d | 20 | /* B[1] : OS_COMP_INT 0 = OS comparator, 1 = OS interrupt */ |
Rhyme | 0:1cf64e89f29d | 21 | #define CONFIG_OS_COMP 0x00 |
Rhyme | 0:1cf64e89f29d | 22 | #define CONFIG_OS_INT (0x01 << 1) |
Rhyme | 0:1cf64e89f29d | 23 | /* B[0] : SHUTDOWN 0 = normal, 1 = shutdown */ |
Rhyme | 0:1cf64e89f29d | 24 | #define CONFIG_NORMARL 0x00 |
Rhyme | 0:1cf64e89f29d | 25 | #define CONFIG_SHUTDOWN 0x01 |
Rhyme | 0:1cf64e89f29d | 26 | |
Rhyme | 0:1cf64e89f29d | 27 | /* Temperature register */ |
Rhyme | 0:1cf64e89f29d | 28 | /* D[15:5] = 11 bit data 0.125 * temp data */ |
Rhyme | 0:1cf64e89f29d | 29 | /* D[4:0] : reserved */ |
Rhyme | 0:1cf64e89f29d | 30 | |
Rhyme | 1:61987c319606 | 31 | /* Tos register */ |
Rhyme | 1:61987c319606 | 32 | /* D[15:7] = 9 bit data */ |
Rhyme | 1:61987c319606 | 33 | /* D[6:0] : reserved */ |
Rhyme | 0:1cf64e89f29d | 34 | |
Rhyme | 1:61987c319606 | 35 | /* Thyst register */ |
Rhyme | 1:61987c319606 | 36 | /* D[15:7] = 9 ibt data */ |
Rhyme | 1:61987c319606 | 37 | /* D[6:0] : reserved */ |
Rhyme | 0:1cf64e89f29d | 38 | |
Rhyme | 0:1cf64e89f29d | 39 | LM75B::LM75B(PinName sda, PinName scl, int addr) : m_i2c(sda, scl), m_addr(addr<<1) { |
Rhyme | 0:1cf64e89f29d | 40 | // activate the peripheral |
Rhyme | 0:1cf64e89f29d | 41 | } |
Rhyme | 0:1cf64e89f29d | 42 | |
Rhyme | 0:1cf64e89f29d | 43 | LM75B::~LM75B() { } |
Rhyme | 0:1cf64e89f29d | 44 | |
Rhyme | 0:1cf64e89f29d | 45 | int8_t LM75B::temp(void) |
Rhyme | 0:1cf64e89f29d | 46 | { |
Rhyme | 0:1cf64e89f29d | 47 | char t[1] = { 0x00 } ; |
Rhyme | 0:1cf64e89f29d | 48 | int8_t temp ; |
Rhyme | 0:1cf64e89f29d | 49 | m_i2c.write(m_addr, t, 1, true) ; |
Rhyme | 0:1cf64e89f29d | 50 | m_i2c.read(m_addr, t, 1) ; |
Rhyme | 0:1cf64e89f29d | 51 | temp = (int8_t)t[0] ; |
Rhyme | 0:1cf64e89f29d | 52 | return( temp ) ; |
Rhyme | 0:1cf64e89f29d | 53 | } |
Rhyme | 0:1cf64e89f29d | 54 | |
Rhyme | 0:1cf64e89f29d | 55 | void LM75B::getTemp(float *temp) |
Rhyme | 0:1cf64e89f29d | 56 | { |
Rhyme | 0:1cf64e89f29d | 57 | char t[2] ; |
Rhyme | 0:1cf64e89f29d | 58 | int16_t iTemp = 0 ; |
Rhyme | 0:1cf64e89f29d | 59 | m_i2c.read(m_addr, t, 2) ; /* read MSB, LSB */ |
Rhyme | 0:1cf64e89f29d | 60 | iTemp = (t[0] << 8) | t[1] ; |
Rhyme | 0:1cf64e89f29d | 61 | iTemp >>= 5 ; |
Rhyme | 0:1cf64e89f29d | 62 | *temp = 0.125 * iTemp ; |
Rhyme | 0:1cf64e89f29d | 63 | } |
Rhyme | 0:1cf64e89f29d | 64 | |
Rhyme | 0:1cf64e89f29d | 65 | uint8_t LM75B::getConfig(uint8_t ptr_byte) |
Rhyme | 0:1cf64e89f29d | 66 | { |
Rhyme | 0:1cf64e89f29d | 67 | char config ; |
Rhyme | 0:1cf64e89f29d | 68 | m_i2c.write(m_addr, (char*)(&ptr_byte), 1, true) ; |
Rhyme | 0:1cf64e89f29d | 69 | m_i2c.read(m_addr, &config, 1) ; |
Rhyme | 0:1cf64e89f29d | 70 | return( config ) ; |
Rhyme | 0:1cf64e89f29d | 71 | } |
Rhyme | 0:1cf64e89f29d | 72 | |
Rhyme | 0:1cf64e89f29d | 73 | void LM75B::setConfig(uint8_t ptr_byte, uint8_t config_data) |
Rhyme | 0:1cf64e89f29d | 74 | { |
Rhyme | 0:1cf64e89f29d | 75 | char t[2] ; |
Rhyme | 0:1cf64e89f29d | 76 | t[0] = ptr_byte ; |
Rhyme | 0:1cf64e89f29d | 77 | t[1] = config_data ; |
Rhyme | 0:1cf64e89f29d | 78 | m_i2c.write(m_addr, t, 2, true) ; |
Rhyme | 0:1cf64e89f29d | 79 | } |
Rhyme | 0:1cf64e89f29d | 80 | |
Rhyme | 0:1cf64e89f29d | 81 | void LM75B::readRegs(int addr, uint8_t * data, int len) { |
Rhyme | 0:1cf64e89f29d | 82 | char t[1] = {addr}; |
Rhyme | 0:1cf64e89f29d | 83 | m_i2c.write(m_addr, t, 1, true); |
Rhyme | 0:1cf64e89f29d | 84 | m_i2c.read(m_addr, (char *)data, len); |
Rhyme | 0:1cf64e89f29d | 85 | } |
Rhyme | 0:1cf64e89f29d | 86 | |
Rhyme | 0:1cf64e89f29d | 87 | void LM75B::writeRegs(uint8_t * data, int len) { |
Rhyme | 0:1cf64e89f29d | 88 | m_i2c.write(m_addr, (char *)data, len); |
Rhyme | 0:1cf64e89f29d | 89 | } |