NXP_LM75B demo code

このページは日本語でも記載されています.日本語版はこのページ後半をご覧ください. This page is written in Japanese as well. Please find it in 2nd half of this page.

What is this?

This is a sample/demo code for NXP LM75B digital temperature sensor.

The code is version 2, it has been made to reduce code redundancy of previous version and easy operation using normal TextLCD.

The connection of mbed and LM75B will be like this.

Code:

NXP_LM75B

The application code is just simple. Including a header file named "NXP_LM75B.h", make an instance and read it as float.

#include "mbed.h"
#include "TextLCD.h"
#include "NXP_LM75B.h"

NXP_LM75B  temp_sensor( p9, p10, 0x9E );           // sda, scl, I2C_address(0x9E)
TextLCD    lcd(p24, p25, p26, p27, p28, p29, p30); // rs, rw, e, d0, d1, d2, d3

int main() {

    lcd.locate( 0, 1 );
    lcd.printf( " NXP LM75B demo" );

    while ( 1 )
    {
        lcd.locate( 0, 0 );
        lcd.printf( "%4.1f (deg-C)", (float)temp_sensor );
        
        wait( 1 );
    }
}

Note:

If more than one LM75B are used, those device should have unique I2C addresses. The I2C address of each devices can be set by its pins A2, A1 and A0 (pins 5, 6 and 7).

For each devices accesses, the I2C address from software will be 0x90 + (pin_setting << 1).

NXP_LM75B  temp_sensor0( p9, p10 );        //  A2=Low  A1=Low  A0=Low
NXP_LM75B  temp_sensor1( p9, p10, 0x92 );  //  A2=Low  A1=Low  A0=High
NXP_LM75B  temp_sensor2( p9, p10, 0x94 );  //  A2=Low  A1=High A0=Low
NXP_LM75B  temp_sensor3( p9, p10, 0x96 );  //  A2=Low  A1=High A0=High
NXP_LM75B  temp_sensor3( p9, p10, 0x98 );  //  A2=High A1=Low  A0=Low
.....
...
NXP_LM75B  temp_sensor7( p9, p10, 0x9E );  //  A2=High A1=High A0=High

The I2C bus lines should be pulled-up properly since those signals are open-drain.

Reference:

LM75B datasheet: http://www.nxp.com/pip/LM75B_2.html/



これは?

NXPのデジタル温度センサ,LM75Bのサンプル/デモコードです.

このコードはバージョン2で,先に公開していたコードを簡略化し,TextLCDを通常用いられるものに置き換えて実験しやすくしたものです.

mbedとLM75Bの接続は下のようになります.

コード:

NXP_LM75B

アプリケーション・コードはシンプルです.「NXP_LM75B.h」をインクルード,インスタンスを作り,浮動小数点として値を読み取るだけです.

#include "mbed.h"
#include "TextLCD.h"
#include "NXP_LM75B.h"

NXP_LM75B  temp_sensor( p9, p10, 0x9E );           // sda, scl, I2C_address(0x9E)
TextLCD    lcd(p24, p25, p26, p27, p28, p29, p30); // rs, rw, e, d0, d1, d2, d3

int main() {

    lcd.locate( 0, 1 );
    lcd.printf( " NXP LM75B demo" );

    while ( 1 )
    {
        lcd.locate( 0, 0 );
        lcd.printf( "%4.1f (deg-C)", (float)temp_sensor );
        
        wait( 1 );
    }
}

注意:

複数のLM75Bを同じI2Cバスに接続する場合,各デバイスには個別のI2Cアドレスを割り振らなければなりません.このアドレスは各デバイスのA2,A1,A0ピン(ピン5, 6, 7)で設定することができます.

ソフトウェアから見て各デバイスのI2Cアドレスは"0x90 + (pin_setting << 1)"のようになります.

NXP_LM75B  temp_sensor0( p9, p10 );        //  A2=Low  A1=Low  A0=Low
NXP_LM75B  temp_sensor1( p9, p10, 0x92 );  //  A2=Low  A1=Low  A0=High
NXP_LM75B  temp_sensor2( p9, p10, 0x94 );  //  A2=Low  A1=High A0=Low
NXP_LM75B  temp_sensor3( p9, p10, 0x96 );  //  A2=Low  A1=High A0=High
NXP_LM75B  temp_sensor3( p9, p10, 0x98 );  //  A2=High A1=Low  A0=Low
.....
...
NXP_LM75B  temp_sensor7( p9, p10, 0x9E );  //  A2=High A1=High A0=High

I2Cバスの信号線はオープンドレインなので,プルアップ抵抗を忘れないようにしてください.

参考:

LM75Bデータシート: http://www.nxp.com/pip/LM75B_2.html/


0 comments

You need to log in to post a comment