Tedd OKANO
/
TempSensor_LM75B
TempSensor_LM75B.h@0:b1a5601983d4, 2010-01-23 (annotated)
- Committer:
- okano
- Date:
- Sat Jan 23 13:45:00 2010 +0000
- Revision:
- 0:b1a5601983d4
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
okano | 0:b1a5601983d4 | 1 | /* |
okano | 0:b1a5601983d4 | 2 | * I2C digital temperature sensor "LM75B" library |
okano | 0:b1a5601983d4 | 3 | * |
okano | 0:b1a5601983d4 | 4 | * LM75B is an I2C based digital temperature sensor |
okano | 0:b1a5601983d4 | 5 | * http://www.nxp.com/pip/LM75B_2.html |
okano | 0:b1a5601983d4 | 6 | * |
okano | 0:b1a5601983d4 | 7 | * This is a library to operate this chip easy. |
okano | 0:b1a5601983d4 | 8 | * |
okano | 0:b1a5601983d4 | 9 | * Copyright (c) 2010 Tedd OKANO |
okano | 0:b1a5601983d4 | 10 | * Released under the MIT License: http://mbed.org/license/mit |
okano | 0:b1a5601983d4 | 11 | * |
okano | 0:b1a5601983d4 | 12 | * revision 1.0 16-Jan-2010 a. 1st release |
okano | 0:b1a5601983d4 | 13 | * revision 1.1 23-Jan-2010 a. class name has been changed from LM75B to TempSensor_LM75B |
okano | 0:b1a5601983d4 | 14 | * b. copyright notice added |
okano | 0:b1a5601983d4 | 15 | */ |
okano | 0:b1a5601983d4 | 16 | |
okano | 0:b1a5601983d4 | 17 | #ifndef MBED_TempSensor_LM75B |
okano | 0:b1a5601983d4 | 18 | #define MBED_TempSensor_LM75B |
okano | 0:b1a5601983d4 | 19 | |
okano | 0:b1a5601983d4 | 20 | |
okano | 0:b1a5601983d4 | 21 | #include "mbed.h" |
okano | 0:b1a5601983d4 | 22 | #include "I2cBusDevice.h" |
okano | 0:b1a5601983d4 | 23 | |
okano | 0:b1a5601983d4 | 24 | |
okano | 0:b1a5601983d4 | 25 | // LM75B IIC address |
okano | 0:b1a5601983d4 | 26 | const char LM75B_base_addr = 0x90; |
okano | 0:b1a5601983d4 | 27 | |
okano | 0:b1a5601983d4 | 28 | // LM75B registers |
okano | 0:b1a5601983d4 | 29 | const char Conf = 0x01; |
okano | 0:b1a5601983d4 | 30 | const char Temp = 0x00; |
okano | 0:b1a5601983d4 | 31 | const char Tos = 0x03; |
okano | 0:b1a5601983d4 | 32 | const char Thyst = 0x02; |
okano | 0:b1a5601983d4 | 33 | |
okano | 0:b1a5601983d4 | 34 | |
okano | 0:b1a5601983d4 | 35 | class TempSensor_LM75B : I2cBusDevice { |
okano | 0:b1a5601983d4 | 36 | public: |
okano | 0:b1a5601983d4 | 37 | |
okano | 0:b1a5601983d4 | 38 | TempSensor_LM75B( I2C *i2c, char dev_address = LM75B_base_addr, char vConf = 0x00, short vTos = 0x5000, short vThyst = 0x4B00 ) : I2cBusDevice( i2c, dev_address ) { |
okano | 0:b1a5601983d4 | 39 | char data[ 3 ]; |
okano | 0:b1a5601983d4 | 40 | |
okano | 0:b1a5601983d4 | 41 | data[ 0 ] = Conf; |
okano | 0:b1a5601983d4 | 42 | data[ 1 ] = vConf; |
okano | 0:b1a5601983d4 | 43 | |
okano | 0:b1a5601983d4 | 44 | if ( write( data, 2 ) ) |
okano | 0:b1a5601983d4 | 45 | ; |
okano | 0:b1a5601983d4 | 46 | |
okano | 0:b1a5601983d4 | 47 | data[ 0 ] = Tos; |
okano | 0:b1a5601983d4 | 48 | data[ 1 ] = (char)(vTos >> 8); |
okano | 0:b1a5601983d4 | 49 | data[ 2 ] = (char)vTos; |
okano | 0:b1a5601983d4 | 50 | |
okano | 0:b1a5601983d4 | 51 | if ( write( data, 3 ) ) |
okano | 0:b1a5601983d4 | 52 | ; |
okano | 0:b1a5601983d4 | 53 | |
okano | 0:b1a5601983d4 | 54 | data[ 0 ] = Thyst; |
okano | 0:b1a5601983d4 | 55 | data[ 1 ] = (char)(vThyst >> 8); |
okano | 0:b1a5601983d4 | 56 | data[ 2 ] = (char)vThyst; |
okano | 0:b1a5601983d4 | 57 | |
okano | 0:b1a5601983d4 | 58 | if ( write( data, 3 ) ) |
okano | 0:b1a5601983d4 | 59 | ; |
okano | 0:b1a5601983d4 | 60 | } |
okano | 0:b1a5601983d4 | 61 | |
okano | 0:b1a5601983d4 | 62 | ~TempSensor_LM75B() { |
okano | 0:b1a5601983d4 | 63 | } |
okano | 0:b1a5601983d4 | 64 | |
okano | 0:b1a5601983d4 | 65 | int temp_short( void ) { |
okano | 0:b1a5601983d4 | 66 | char data[ 2 ]; |
okano | 0:b1a5601983d4 | 67 | |
okano | 0:b1a5601983d4 | 68 | if ( read( Temp, data, 2 ) ) |
okano | 0:b1a5601983d4 | 69 | return ( 1e6 ); |
okano | 0:b1a5601983d4 | 70 | |
okano | 0:b1a5601983d4 | 71 | return ( (((short)data[ 0 ]) << 8 | data[ 1 ]) >> 5 ); |
okano | 0:b1a5601983d4 | 72 | } |
okano | 0:b1a5601983d4 | 73 | |
okano | 0:b1a5601983d4 | 74 | float temp( void ) { |
okano | 0:b1a5601983d4 | 75 | return ( (float)(temp_short()) / 8.0 ); |
okano | 0:b1a5601983d4 | 76 | } |
okano | 0:b1a5601983d4 | 77 | |
okano | 0:b1a5601983d4 | 78 | operator float( void ) { |
okano | 0:b1a5601983d4 | 79 | return( temp() ); |
okano | 0:b1a5601983d4 | 80 | } |
okano | 0:b1a5601983d4 | 81 | |
okano | 0:b1a5601983d4 | 82 | #if 0 |
okano | 0:b1a5601983d4 | 83 | operator short( void ) { |
okano | 0:b1a5601983d4 | 84 | return( temp_short() ); |
okano | 0:b1a5601983d4 | 85 | } |
okano | 0:b1a5601983d4 | 86 | #endif |
okano | 0:b1a5601983d4 | 87 | |
okano | 0:b1a5601983d4 | 88 | |
okano | 0:b1a5601983d4 | 89 | |
okano | 0:b1a5601983d4 | 90 | private: |
okano | 0:b1a5601983d4 | 91 | } |
okano | 0:b1a5601983d4 | 92 | ; |
okano | 0:b1a5601983d4 | 93 | |
okano | 0:b1a5601983d4 | 94 | #endif |