SCL」タグアーカイブ

温湿度センサーSHT31をクロックストレッチで使う時の備忘録

前回は、センシリオン社製温湿度センサーSHT31をArduinoで制御する時の注意点を紹介しました。

Part3で述べた様に、測定開始コマンドを送った直後、SHT31のデータシートに記載された測定時間分(表1参照)の待ち時間をdelay()を使って決め打ちで指定しないと、マスター(Arduino)が温湿度データを受け取れませんでした。

表1 SHT31の測定時間一覧

しかしながら、SHT31が持つ「クロックストレッチ」機能を使うと、delay()を使ってその待ち時間を決め打ちで指定する必要はありません。

I2Cの「クロックストレッチ」とは、マスターからのコマンドに対して、スレーブの処理が間に合わない時、スレーブがクロックライン(SCL)を強制的にLOWにしてマスター側からのクロック送信を待たせる機能です(図1参照)。

図1 クロックストレッチの説明(NXPセミコンダクタのI2C仕様書から引用)

スレーブ側の処理が終了すると、クロック送信が再開され、マスターはスレーブからのデータを受信できるようになります。

続きを読む

ArduinoのWireライブラリに関するTips

 皆様、ご無沙汰しております。代表の國頭です。

 「デバッグ事例」のカテゴリでは、ほぼ6年ぶりの更新になりますがどうぞ宜しくお願い致します。

 さて、表題にありますように「ArduinoのWireライブラリ」について、ここ数年疑問だった事が解決したので、私の備忘録も兼ねて記事を書いてみたいと思います。

 Arduinoについてはご存じの方が多いと思うので、ここでは詳細な説明は省きますが、私はI2CやSPIなどで制御できるデバイスの評価用プラットフォームとして使っています。

 つい先日、温湿度センサーである、Sensirion社製「SHT31」を評価する機会がありましたので、その時に得られた知見をご報告したいと思います。

続きを読む