Component class library for PCT2075 and LM75B. The PCT2075 is a temperature-to-digital converter featuring +/-1 degree-C accuracy over -25 degree-C to +100 degree-C range. It uses an on-chip band gap temperature sensor and Sigma-Delta A-to-D conversion technique with an overtemperature detection output that is a drop-in replacement for other LM75 series thermal sensors.

Dependents:   PCT2075_Hello Brushless_STM3_ESC_2019_10 Alternator2020_06

Files at this revision

API Documentation at this revision

Comitter:
okano
Date:
Thu Mar 05 06:11:06 2015 +0000
Child:
1:0cdfb3ea5969
Commit message:
Initial version

Changed in this revision

LM75B.h Show annotated file Show diff for this revision Revisions of this file
PCT2075.cpp Show annotated file Show diff for this revision Revisions of this file
PCT2075.h Show annotated file Show diff for this revision Revisions of this file
base_class/I2CTempSensor.cpp Show annotated file Show diff for this revision Revisions of this file
base_class/I2CTempSensor.h Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LM75B.h	Thu Mar 05 06:11:06 2015 +0000
@@ -0,0 +1,8 @@
+#ifndef MBED_LM75B_H
+#define MBED_LM75B_H
+
+#include    "PCT2075.h"
+
+typedef PCT2075 LM75B;
+
+#endif  //  MBED_LM75B_H
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PCT2075.cpp	Thu Mar 05 06:11:06 2015 +0000
@@ -0,0 +1,30 @@
+#include    "I2CTempSensor.h"
+#include    "PCT2075.h"
+
+PCT2075::PCT2075( PinName i2c_sda, PinName i2c_scl, char i2c_address ) 
+    : I2CTempSensor( i2c_sda, i2c_scl, i2c_address )
+{
+    init();
+}
+
+PCT2075::PCT2075( I2C &i2c_obj, char i2c_address )
+    : I2CTempSensor( i2c_obj, i2c_address )
+{
+    init();
+}
+
+PCT2075::~PCT2075()
+{
+}
+
+float PCT2075::read( void )
+{
+    typedef I2CTempSensor base;
+
+    return( base::read16() / 256.0 );
+}
+
+PCT2075::operator float( void )
+{
+    return( read() );
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PCT2075.h	Thu Mar 05 06:11:06 2015 +0000
@@ -0,0 +1,88 @@
+/** PCT2075 and LM75B component class library
+ *  PCT2075 と LM75B 用のコンポーネント・クラス・ライブラリです
+ *
+ *  This is new NXP PCT2075 and classic LM75B component class library
+ *  This works for both PCT2075 and LM75B
+ *
+ *  @author  Tedd OKANO
+ *  @version 1.0
+ *  @date    05-Mar-2015
+ *
+ *  For the details of PCT2075 and LM75B..
+ *  PCT2075 and LM75Bの詳細は..
+ *      http://i2c_sda.nxp.com/documents/data_sheet/PCT2075.pdf
+ *      http://i2c_sda.nxp.com/documents/data_sheet/LM75B.pdf
+ */
+
+#ifndef MBED_PCT2075_H
+#define MBED_PCT2075_H
+
+#include    "mbed.h"
+#include    "I2CTempSensor.h"
+
+/** PCT2075 & LM75B class library / PCT2075 & LM75B クラスライブラリ
+ *
+ *  Class library provides very simple interface to read sensor value
+ *  クラスライブラリはセンサの値を読む非常にシンプルなインターフェースを提供します
+ *
+ *  Example / コード例:
+ *  @code
+ *  #include "mbed.h"
+ *  #include "PCT2075.h"                //  or #include "LM75B.h"
+ *  
+ *  PCT2075 temp_sensor( p28, p27 );    //  or LM75B temp_sensor( p28, p27 );
+ *  
+ *  int main()
+ *  {
+ *      while(1) {
+ *          printf( "temp = %7.3f\r\n", (float)temp_sensor );
+ *          wait( 1 );
+ *      }
+ *  }
+ *  @endcode
+ */
+class PCT2075 : I2CTempSensor
+{
+public:
+    /** Create a PCT2075 instance connected to specified I2C pins with specified address
+     *  I2Cピンとスレーブアドレスを指定し,インスタンスを作成します
+     *
+     * @param i2c_sda       I2C-bus SDA pin
+     * @param i2c_scl       I2C-bus SCL pin
+     * @param i2c_address   (option) I2C-bus slave address (default: 0x90)
+     */
+    PCT2075( PinName i2c_sda, PinName i2c_scl, char i2c_address = DEFAULT_I2C_SLAVE_ADDRESS );
+
+    /** Create a PCT2075 instance with I2C instance and specified address
+     *  I2Cオブジェクトとスレーブアドレスを指定し,インスタンスを作成します
+     *
+     * @param i2c_obj       I2C object (instance)
+     * @param i2c_address   (option) I2C-bus slave address (default: 0x90)
+     */
+    PCT2075( I2C &i2c_obj, char i2c_address = DEFAULT_I2C_SLAVE_ADDRESS );
+
+    /** デストラクタ
+     */
+    virtual ~PCT2075();
+
+    /** Read temperature / 温度の読み出し
+     *
+     *  @return Returns temperature in Celsius (float) / 摂氏温度を返します(float型)
+     */
+    virtual float   read( void );
+
+    /**  Read temperature / 温度の読み出し
+     *
+     *  @return To make the object returns the value / オブジェクトが読みだした値を返すようにしています
+     */
+    virtual operator float( void );
+
+private:
+    /** デフォルト・スレーブアドレス */
+    enum {
+        DEFAULT_I2C_SLAVE_ADDRESS   = 0x90
+    };
+};
+
+#endif  //  MBED_PCT2075_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/base_class/I2CTempSensor.cpp	Thu Mar 05 06:11:06 2015 +0000
@@ -0,0 +1,41 @@
+#include "I2CTempSensor.h"
+
+I2CTempSensor::I2CTempSensor( PinName i2c_sda, PinName i2c_scl, char address ) 
+    : i2c_p( new I2C( i2c_sda, i2c_scl ) ), i2c( *i2c_p ), adr( address )
+{
+    init();
+}
+
+I2CTempSensor::I2CTempSensor( I2C &i2c_obj, char address )
+    : i2c_p( NULL ), i2c( i2c_obj ), adr( address )
+{
+    init();
+}
+
+I2CTempSensor::~I2CTempSensor()
+{
+    if ( NULL != i2c_p )
+        delete  i2c_p;
+}
+
+void I2CTempSensor::init( void )
+{
+    char    command[ 2 ];
+
+    command[ 0 ]    = LM75B_Conf;
+    command[ 1 ]    = 0x00;
+
+    i2c.write( adr, command, 2 );
+}
+
+short I2CTempSensor::read16( void )
+{
+    char    command[ 2 ];
+
+    command[ 0 ]    = LM75B_Temp;
+
+    i2c.write( adr, command, 1 );  // Send command string
+    i2c.read(  adr, command, 2 );  // read two bytes data
+
+    return ( (command[ 0 ] << 8)| command[1] );
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/base_class/I2CTempSensor.h	Thu Mar 05 06:11:06 2015 +0000
@@ -0,0 +1,81 @@
+/** PCT2075 and LM75B component class library
+ *  PCT2075 と LM75B 用のコンポーネント・クラス・ライブラリです
+ *
+ *  This is new NXP PCT2075 and classic LM75B component class library
+ *  This works for both PCT2075 and LM75B
+ *
+ *  @author  Tedd OKANO
+ *  @version 1.0
+ *  @date    05-Mar-2015
+ *
+ *  For the details of PCT2075 and LM75B..
+ *  PCT2075 and LM75Bの詳細は..
+ *      http://www.nxp.com/documents/data_sheet/PCT2075.pdf
+ *      http://www.nxp.com/documents/data_sheet/LM75B.pdf
+ */
+
+#ifndef MBED_I2CTempSensor_H
+#define MBED_I2CTempSensor_H
+
+#include "mbed.h"
+
+/** I2CTempSensor class library クラスライブラリ
+ *
+ *  This class is an abstract class. So no instance can be made.
+ *  このクラスは抽象クラスなのでインスタンスを作成することはできません
+ *  クラスライブラリは非常にシンプルなインターフェースを提供します
+ */
+
+class I2CTempSensor
+{
+public:
+    virtual float   read( void )    = 0;
+    virtual operator float( void )  = 0;
+
+protected:
+
+    /** LM75Bのレジスタ名とアドレス */
+    enum command_reg    {
+        LM75B_Temp  = 0x00,
+        LM75B_Conf,
+        LM75B_Thyst,
+        LM75B_Tos
+    };
+
+    /** I2Cピンとスレーブアドレスを指定し,インスタンスを作成します
+     *
+     * @param i2c_sda I2C-bus i2c_sdaピン
+     * @param i2c_scl I2C-bus i2c_sclピン
+     * @param address (オプション) I2C-bus スレーブアドレス (デフォルト: 0x90)
+     */
+    I2CTempSensor( PinName i2c_sda, PinName i2c_scl, char address );
+
+    /** I2Cオブジェクトとスレーブアドレスを指定し,インスタンスを作成します
+     *
+     * @param i2c_obj I2C オブジェクト (インスタンス)
+     * @param address (オプション) I2C-bus スレーブアドレス (デフォルト: 0x90)
+     */
+    I2CTempSensor( I2C &i2c_obj, char address );
+
+    /** デストラクタ
+     */
+    ~I2CTempSensor();
+
+    /** 初期化
+     */
+    void    init( void );
+
+    /** 温度の読み出し
+     *
+     *  @return 摂氏温度を返します(float型)
+     */
+    short   read16( void );
+
+private:
+    I2C     *i2c_p;
+    I2C     &i2c;
+    char    adr;
+};
+
+#endif  //  MBED_I2CTempSensor_H
+