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 )
  • センサを1個だけ前回(5/7分)の図のバス上に接続して使うプログラム。 makeするとrom_readとchktempの2つの実行ファイルができるはず。

    • rom_read
    • 半分デバッグ用。実行するとセンサの情報を色々だしてくれる。

      % ./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
    • このプログラムを 動かすと延々温度を測定して表示する。 多分時々エラーが出るでしょう。

      % ./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
      

  • ROMサーチ (ds1w_search090517.tar.gz)
  • 複数のセンサをバス上に接続してこれを動かすと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データロガーも試してみるかな?

Posted at 19:44 in computer

Archives
Powered by
blosxom 2.0
and
modified by
blosxom starter kit