カテゴリ
リンク

当サイトは、玄箱PRO (KURO-BOX/Pro)を中心とした組み込み、Linuxと電子工作を扱っています。
会社案内

情報セキュリティおよび個人情報の取り扱いについて


コメントとトラックバックは、spamを予防するために、編集担当が公開の作業をするまで非公開になっています。コメントはそれぞれ投稿した人のものです。

 玄箱 PRO のフロントパネルの内側のサブボードに、 I2C バスの端子が出ています。I2C バスは inter IC bus という名前のとおり、基板上の IC 間の接続を想定したシリアル・バスです。クロックとデータの2本のみで複数の IC 間で通信ができます。
 玄箱 PRO では、リアルタイム・クロック(RTC, 電源オフのときなどの時計として働く)用に使われていますが、ほかのデバイスを追加することも可能です。今回は、I2C バスにエレキジャック no.8 の付録の温度センサ LM73 (ナショナルセミコンダクタ製) をつけてみます。

■i2c-tools をインストールする
 I2C バスと通信するユーティリティとして i2c-tools (i2c-tools-3.0.2.tar.bz2) をダウンロードしてコンパイルします:

tar xjvf i2c-tools-3.0.2.tar.bz2
cd i2-tools-3.0.2
make

 今回はインストールはしていません。必要に応じてインストールしてください。

■RTC と通信してみる
 まず玄箱PRO内蔵の RTC と通信してみることにしました。i2c-tools-3.0.2 のディレクトリ内の tools ディレクトリで i2cget コマンドを使います。実行には root 権限が必要です。

cd tools
su
./i2cget 0 0x32

 最初の0は、I2Cバスの番号(玄箱PRO内蔵は0)、0x32はRTCのアドレスです。実行すると、

kurobox:/home/kurobox/work/i2c-tools-3.0.2/tools# ./i2cget 0 0x32
Error: Could not set address to 0x32: Device or resource busy

となりました。残念ながらほかに使われているため、使えないようです。

■温度センサ LM73 をつけてみる
 次に玄箱PROの電源を切り、エレキジャック no.8 付録の温度センサ LM73 をつけてみます。フロントパネルを外し、サブボードにコネクタをはんだ付けして配線します(図1)。ここではブレッドボードとジャンプ・ワイヤ(メス→オス)を使って仮につなぎました。

I2C01.jpg
図1 サブボードの I2C バスのスルーホールにコネクタをつける。はんだ付けすると保証がなくなることに注意。

I2C02.jpg図2 付録の LM73 の基板に、両端オスのコネクタと 0.1uF のセラミック・コンデンサをつけ、ブレッドボードに載せた。ADDR 端子(ピン1)には何もつながない

 配線が終わって、玄箱PROが起動したら、I2C バスを利用している RTC が認識されていることを確認しておきます:
dmesg | grep rtc
を実行して、次のように表示されれば OK です。

kurobox@kurobox:~$ dmesg | grep rtc
[42949375.720000] rtc-rs5c372 0-0032: rs5c372a found, am/pm, driver version 0.5
[42949375.730000] rtc-rs5c372 0-0032: rtc core: registered rtc-rs5c372 as rtc0
[42949375.760000] rtc-rs5c372 0-0032: setting system clock to 2009-06-27 06:39:07 UTC (1246084747)
認識されていない場合は速やかに電源を切って、配線を確認します。

■温度を読み込んでみる
 付録の LM73 (LM73CMIK-1, マーキング:T731) のアドレスは ADDR 端子が無接続のとき 0x4c です。i2cget コマンドを使って ID (レジスタ 0x07)を読んでみます(root で実行する)。

kurobox:/home/kurobox/work/i2c-tools-3.0.2/tools# ./i2cget -y 0 0x4c 0x7 w
0x9001

 ID は 0x0190 なので i2cget コマンドでは、上位バイトと下位バイトが反転するようです。変換精度が最もよい14bit モードにするために、コントロール・レジスタ(0x04)に書き込むため、以下を実行します。

./i2cset -y 0 0x4c 0x04 0x68

 温度(レジスタ 0x00)を読んでみます。

kurobox:/home/kurobox/work/i2c-tools-3.0.2/tools# ./i2cget -y 0 0x4c 0x00 w
0xa80d

 上位バイトと下位バイトを変換し、2進数に直すと、
0x0da8 = 0000 1101 1010 1000

となります。計算すると 16+8+2+1+.25+.0625 = 27.3125℃ となっているようです。ICに指をあてると温度も変化します。

■温度を直接読めるようにする
 手計算で変換するのは大変なので、簡単なプログラムを書いてみました。i2c-tools-3.0.2-diffをダウンロードし、ディレクトリ i2c-tools-3.0.2 で以下を実行してください。

patch -p1 < i2c-tools-3.0.2-diff
make

 tools ディレクトリに lm73 コマンドができます。ソースは tools ディレクトリにできる lm73.c です。実行すると以下のように、1秒おきに温度を表示します。

kurobox:/tmp/i2c-tools-3.0.2/tools# ./lm73
27.78125
27.78125
27.78125
27.75000
27.75000
27.78125
27.78125
^C
kurobox:/tmp/i2c-tools-3.0.2/tools#

光永 法明

 カテゴリ 

 

トラックバック(0)

このブログ記事を参照しているブログ一覧: I2C バスに温度センサをつけてみる

このブログ記事に対するトラックバックURL: http://www.eleki-jack.com/mt/mt-tb.cgi/3098

コメントする

おすすめ書籍
Powered by
Movable Type 4.1