May 17, 2009
DS18B20を使ってみる(プログラム) [computer]
前回書いた時点で既にDS18B20を使って温度を測定するところまで動いていたが動作検証したプログラムについては特に述べなかった。
動くのは動くんだが、 ソフトウェア的にμS単位のタイミングを制御する必要があり動作環境で動いたり動かなかったりすることがあるのも確認している(ぉい)
どのみちすべての環境で動くことが期待できるようにするのは難しいし、そこまでやる気がないのでスペルミス等の些細な部分だけ直したきちゃないプログラムを公開してみる。
それぞれFreeBSDの7.1-stable(時々buildしなおしているのでいつの環境かは不明。前回迄は確かに7.1だったが今は7.2-stableになっていたりする)上で作成した。Linux(Debian 5.0)上でも一応動くようにはしたがろくに動作確認はしていない。どのみちマザーボード等のハードウェアによって動いたり動かなかったりする。
ターゲットマシンのスペック、動作条件は以下のとおり
- マザーボード Intel D945GCLF (intel Atom230 1.6GHz/945GC)
- RAM 2GB
- BIOSでプリンタポートを双方向に設定
- FreeBSDではpowerdは止めている。これはCPUのrdtscを使ってタイミングを計っているため、動作中に省電力化のためにクロックが変わってしまうとタイミングに誤りが出てしまうため。
ちなみに以下のプログラムのds_tlib.cにはセンサのリセットルーチンが2つ(ds_reset(), ry_reset() )入っている。デバッグ時の便宜も考えてリセットの時のステータスを見ながらリセットをかけているのがds_reset()だが、これがたまたま試してみたマシンで動作しなかった。ry_reset()は単純に規程時間だけ待ってリセットがかかったとみなしている。ds_reset()が動かなかったマシンでry_reset()を代わりに使ったらそれなりに動いたので残してみた。
- 温度測定 (chktemp090517.tar.gz )
- rom_read
センサを1個だけ前回(5/7分)の図のバス上に接続して使うプログラム。 makeするとrom_readとchktempの2つの実行ファイルができるはず。
半分デバッグ用。実行するとセンサの情報を色々だしてくれる。
% ./rom_read tsc_1micro 1599 Family Code: 28 CRC : c8 Serial No. : 000001aff6c5 verify CRC : c8 OK 8a 01 4b 46 7f ff 06 10 2c scpad crc 2c CRC : 2c Temperature : 24.625000 out length 12 verify CRC : 2c OK
このプログラムを 動かすと延々温度を測定して表示する。 多分時々エラーが出るでしょう。
% ./chktemp Temp. : 24.69 Temp. : 24.69 Temp. : 24.62 Temp. : 24.69 Temp. : 24.69 Temp. : 24.69 Temp. : 24.69 Temp. : 24.75
複数のセンサをバス上に接続してこれを動かすと1-Wireバスのサーチアルゴリズムにより各センサのROM IDを取得して画面上に表示する。以下実行例。
% ./rom_search write: f0, 1599 find device 28 78 07 b0 01 00 00 4c write: f0, 1599 28 ac bf b1 01 00 00 aa write: f0, 1599 28 c5 f6 af 01 00 00 c8この例では3個のDS18B20が接続されている。
このプログラムについてはアルゴリズムの中核部分、CRCの算出部分にMAXIMが提供しているサンプルコードを使用している。そのライセンスの部分をここに引用しておく。
Copyright (C) 2000 Dallas Semiconductor Corporation, All Rights Reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL DALLAS SEMICONDUCTOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of Dallas Semiconductor shall not be used except as stated in the Dallas Semiconductor Branding Policy.
P.S. ところで某の某氏よりUSB温度計の話が秋葉原の三月兎で売られていることを聞いた。確かにWebの方にも紹介されている。いかにもな怪しい作りで、PCにつなぐとUSBシリアルがつながっているように見え、USBシリアルの先に温度センサがあるようだ。
というかこれUSB-シリアルコンバータのPL230xじゃない。どうもデータ垂れ流しっぽいような気もするけど。
秋月で売られているUSBデータロガーも試してみるかな?
blosxom 2.0
and
modified by
blosxom starter kit