LTC2460 無駄待ちはダメ! busyチェックで他の仕事をしろ!
103JTサーミスタ対応温度計 ArduinoとLTC2460を使って
これ、16bitのA/DコンバータLTC2460でサーミスタ抵抗を読んでいます。
このコンバータの変換時間(遅くって)「13ms~23ms」
typ値が16.6ms (60Hzですな)。
Arduinoの定石だと・・・変換を開始してデータを読むまで、
余裕を見て「delay(25)」てなところでしょうか。
このなにもしない待ち時間がもったいない。
しかし・・・
LTC2460は「CPOL=1モード」で変換の終了チェックができるんです。
データーシートのタイミング。
SCKをHにした状態で/CSをLに。
すると、SDOに変換中か変換が終わったか、
busy(H)/ready(L)状態
が出てくるのです。
busyなら/CSをHに戻して、次のチェックタイミングを待ちます。
この間、他の仕事ができます。
delay()で待ってたら、したい仕事が待たされます。
ready(L)ならSCKパルス列を出してデータを吸い出します。
その最後の/SCの↑エッジパルスで次の変換を開始。
こんな流れです。
同じ待つのでも、単純に待つのと、busyチェックしながら待つの
では、さまざまな処理の応答性に違いが出てきます。
操作スイッチを押したときの反応とか。
実際の波形を見てもらいましょう。
1msサイクルごとにbusy/readyをチェック。
busy中は他の仕事ができます。
readyならA/Dデータを読み出して、
平均処理→抵抗→温度計算を。
busyだとこんな波形。
/CSポートのH/L操作は digitalWrite() は使わず直叩き。
digitalWrite() は遅い!。
readyだとSCKパルスを出してデータ吸い出し。
busyチェック機能を使うことで「無駄な時間待ち」を
しなくて済みます。
※1msごとに実行しているbusyチェックを遅らせて
「他の仕事」をしている様子。
他の仕事(液晶表示とシリアル出力)をしていても、
A/Dデータの読み出し間隔は変わって(遅れて)いません。
A/Dの変換完了待ちをdelay()で処理していたら、こういうわけ
には行きません。
シリアル送信は割り込みで処理されるんで、
文字変換とバッファに書き込むだけの処理時間。
| 固定リンク
「Arduino」カテゴリの記事
- 「UART←→IrDA」変換IC、MCP2122のクロック供給(2022.06.20)
- 秋月の赤外光送受信モジュール(AE-RPM851A)を使ってみる(IrDAを試す) #2(2022.06.18)
- 秋月の赤外光送受信モジュール(AE-RPM851A)を使ってみる(IrDAを試す)(2022.06.17)
- 4046・VCO回路の直線性改善方法その2(2022.06.13)
- 「ダイソーの観覧車」を回せ! 回路図(2022.05.08)
コメント