"LM75B" : I2C digital temperature sensor demo http://mbed.org/users/okano/notebook/nxp_lm75b-demo-code/

Dependencies:   mbed

Committer:
okano
Date:
Sat Jun 05 04:03:39 2010 +0000
Revision:
0:f3a57ebcadba

        

Who changed what in which revision?

UserRevisionLine numberNew 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