Dependencies:   mbed

Committer:
okano
Date:
Sat Jan 23 13:45:32 2010 +0000
Revision:
0:188e389bc1b7

        

Who changed what in which revision?

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