« STM32F3のSPI | トップページ | STM32F303 »

2014年1月18日 (土)

DS18B20

いろいろ忙しいのだけれど、とある用事で、ちょっと高精度の温度センサがほしくなる。
サーモカップル、とまではいらないんだけれど、長く引っ張るのでデジタル系がいいよなあ、ということで、秋月でも扱っているDS18B20+を試してみる。

今はマキシム扱いだけれど、ダラスセミコンダクタの頃から知ってはいる。
結構古いチップだ。使うのは初めてだけど。

140117

入手して、データシートを眺める。
せっかくなので、1-wire を使ってみようか。

------

双方向シグナル1本で、電源も含め、全部やってしまう規格。
プロセッサとの接続は、GNDとこの一本だけだ。

オープンドレインで駆動して、外部は4.7kでプルアップね。
電源電圧は3~5Vか。
いまどきからすると、ちょっと高めだね。

で、データのやり取りは、CPU側からの立下りエッジをもとに、一定時間後のバスの状態で、”0”、”1”を指定している。

1usecとかの、幅の狭いパルスを要求するようだ。
で、デバイス側のサンプリングは立下りエッジから、15usec後か。
プロセッサ側は30usecあたりで、サンプリングするようだ。

タイマー割り込みを使うか、時間待ちループで待つか微妙な時間帯だなあ....

まあ、とりあえず、ごりごりコーディング....

------

これって、バスがLの間は、デバイスは完全に無電源になるんだよなあ。

でもデバイスもバスをLに維持できてるってことは、このICパッケージの内部の電荷だけで、高々数十usecとはいえ、動作維持してるってことか。

各動作シーケンスの最初のリセットパルスは480usecとあるから、このくらいのOFF期間だとパワーオンリセットがかかるってことか?

いや、温度変換のデータは内部SRAMに保持できているから、480usecでは、コールドリセットがかかってるわけじゃないのか。ふーん。

さらに、どうしても保持しなきゃいけないデータは、EEPROMに入っていて、毎回起動時にSRAMにコピーされるようだ。
なんだか凝ってるなあ...(無駄に?)

------

温度変換をしている間、(ADCが動作している間)は、さすがにプルアップ抵抗経由の電源では動作できないようで、変換リクエストを出した後は、速やかにもっと低いインピーダンスでバスを電源側に引っ張る必要がある。
時間は10usec以内とある。せわしないなあ。

要求されるのは数mAなので、通常はCPUのGPIOをオープンドレインで使用して、しかるべきタイミングで、プッシュプルに切り替えれば十分用は足りる。

変換終了までは、電力供給を維持しなければならない。ふむふむ。

------

で、変換を開始して、しばらく待って読み込もうとすると、うまくいかない。
うーん...途中で、バスが落ちているようだが、これは...

制御用のタイミングが、どれも十数usecなんてオーダーなので、勝手な印象で、変換開始から数十msecくらい待って読み込みを開始していたんだけれど、どうも早すぎるようだ。
busy/readyフラグなんて物もないので、時間で決め打ちなのだけれど、ちょっと伸ばしてみても、状況は変わらない。

あらためてデータシートを読むと、驚愕の変換時間750msecとの記述がある。
1秒近く待つのか。ちょっと待ったくらいじゃ全然届いてない...

デフォルトの12ビット分解能だと750msec。
ビットを1つ減らすと、変換時間が半分になるようだ。

と、いうことは....こいつは積分型AD変換器なのか。

久しぶりに見たかも。
積分型なら、この長い変換時間も納得。
4096カウントで750msecだから、内部クロック5kHzくらい?

------

なんだかんだで、まあ動くようにはなった。
普通の温度計と見比べても、ほとんど同じ値を示すようだ。
MPL115の内蔵温度センサは、個体によっては3度くらいずれているが、こいつは温度計としても正しく使えそう。

微妙に早かったり、えらくゆっくりだったり、ちょっと普段付き合ってる人たちとは毛色が違うけど、これはこれで使えそう。

なかなか寄り道が多くて、本筋に戻ってないけど、まあ趣味なのでよし。

|

« STM32F3のSPI | トップページ | STM32F303 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: DS18B20:

« STM32F3のSPI | トップページ | STM32F303 »