SHT21と組み合わせた場合にうまく動かない
2023-01-28更新
<<前のFAQ
| 次のFAQ>>
|
Q.SHT21(#80021)と組み合わせて、Holdモードで温度湿度を計測していますがうまく動作しません。SHT21との直接接続では正しく動いています。LTC4331はマスター側にクロックストレッチングを要求しているのに、自分自身はクロックストレッチに対応していないのでしょうか?
A.SHT21(SHT25,SHT31,SHT35も含む)はSCLクロックストレッチを利用してAD変換時間をマスター側に待たせて温度(湿度)変換できるHoldモードがあります。LTC4331はI2Cスレーブバスのクロックストレッチを検出することはできるのですが、待ち時間の最大があります。約31.5ms以上SCLをLowのまま待機させるとI2Cバスが異常と見なして、I2Cバスを解放してしまいます。そのため通信に失敗してしまいます。SHT21やSHT31をLTC4331で使う場合はNo Holdモードでお使いください。No Holdモードでは正しく動作します。
●下記は実際の通信異常波形になります。
▼上2つの波形はマスター側、下2つの波形はスレーブ側
SHT21にTrigger T measurementコマンドを送り、SCLがLowになってクロックストレッチング状態になり、I2Cバスがホールドされているのが分かります。

▼約32ms経過後、スレーブのSCLはまだLowのまま保持されているのにマスター側のSCLがHighに戻ってしまいました。これは約31.5msのタイムアウト時間以上SCLがホールドされていたのでLTC4331が自動的にバスを解放したからです。その後プログラムは変換が終わったと勘違いして3バイトの温度データを読み取っていますが失敗して0xFFになっています。

▼SHT21の変換時間66ms経過してSCLが解放され、最初のバイトを出力していますが、マスター側の温度取得後の次の処理に入っているのでおかしくなっています。

●LTC4331のタイムアウト時間(約31.5ms)以上のクロックストレッチが入るとうまく動作ができません。これはLINKスピードの設定(SP1, SP2のジャンパ設定)に関係なく固定です。ですから28ms(min値)以上SCLをホールドするデバイスには使えないことになります。SHT21,SHT31にはクロックストレッチを使わない変換モード(No holdモード)がありますのでそれで解決できます。
ちなみにSHT21ではAD分解能を12ビットにすることができ、そうすると変換時間は17msになります。この時間では31.5msより短いのでLTC4331でクロックストレッチを正しく処理できます。
▼SHT21を12ビットモードに設定後、AD変換を開始しています。SCLがLowになりバスをホールドしています。

▼約17ms経過後AD変換が終わり、SCLが解放され、最初の1バイトから正しくマスターに伝達できています。
※時間軸を拡大して最初の1バイトだけしか見えていませんが、後続のバイトも正しく転送できています。

※一応動作はしますが、せっかくのSHT21の分解能が落ちてしまうので実務上はNo holdモードでお使いいただくことになると思います。
|
●データシート・ファイル (うまく表示されない場合は、右クリックしてファイルに保存してから開いてください)
|
|
LTC4331モジュール説明書
(773kバイト) 2021年 02月 26日
LTC4331 Datasheet
(238kバイト) 2019年 06月 06日
LTC4331データシート
(2,167kバイト) 2019年 03月 10日
インターフェース・セレクションガイド
(3,573kバイト) 2023年 06月 10日
●その他の質問一覧(この商品について)
|
SHT21と組み合わせた場合にうまく動かない 2023-01-28更新 |
|