« PICでも「1/1023」。 トラ技2021年9月号別冊付録 | トップページ | サーミスタ温度計、何ビットのA/Dコンバータがいるか? »

2021年8月 6日 (金)

LTC2460 無駄待ちはダメ! busyチェックで他の仕事をしろ!

103JTサーミスタ対応温度計 ArduinoとLTC2460を使って
これ、16bitのA/DコンバータLTC2460でサーミスタ抵抗を読んでいます。

このコンバータの変換時間(遅くって)「13ms~23ms
typ値が16.6ms (60Hzですな)。

Arduinoの定石だと・・・変換を開始してデータを読むまで、
余裕を見て「delay(25)」てなところでしょうか。

このなにもしない待ち時間がもったいない
しかし・・・
  LTC2460は「CPOL=1モード」で変換の終了チェックができるんです。

データーシートのタイミング。
B011

SCKをHにした状態で/CSをLに。
すると、SDOに変換中か変換が終わったか、
   busy(H)/ready(L)状態
が出てくるのです。

busyなら/CSをHに戻して、次のチェックタイミングを待ちます。
  この間、他の仕事ができます。
  delay()で待ってたら、したい仕事が待たされます。

ready(L)ならSCKパルス列を出してデータを吸い出します。
その最後の/SCの↑エッジパルスで次の変換を開始。

B012

こんな流れです。
同じ待つのでも、単純に待つのと、busyチェックしながら待つの
では、さまざまな処理の応答性に違いが出てきます。
操作スイッチを押したときの反応とか。

実際の波形を見てもらいましょう。
B001_20210806122301
1msサイクルごとにbusy/readyをチェック。
busy中は他の仕事ができます。
readyならA/Dデータを読み出して、
  平均処理→抵抗→温度計算を。

busyだとこんな波形。
B004_20210806122301
/CSポートのH/L操作は digitalWrite() は使わず直叩き。
digitalWrite() は遅い!。

readyだとSCKパルスを出してデータ吸い出し。
B003_20210806122301

busyチェック機能を使うことで「無駄な時間待ち」を
しなくて済みます。


※1msごとに実行しているbusyチェックを遅らせて
 「他の仕事」をしている様子。
B005_20210806160301
他の仕事(液晶表示とシリアル出力)をしていても、
A/Dデータの読み出し間隔は変わって(遅れて)いません。
A/Dの変換完了待ちをdelay()で処理していたら、こういうわけ
には行きません。
  シリアル送信は割り込みで処理されるんで、
  文字変換とバッファに書き込むだけの処理時間。

|

« PICでも「1/1023」。 トラ技2021年9月号別冊付録 | トップページ | サーミスタ温度計、何ビットのA/Dコンバータがいるか? »

Arduino」カテゴリの記事

コメント

コメントを書く



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




« PICでも「1/1023」。 トラ技2021年9月号別冊付録 | トップページ | サーミスタ温度計、何ビットのA/Dコンバータがいるか? »