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