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」カテゴリの記事
- Arduinoで「ボコスカハンマー」 あれれれれっ?!(2023.12.07)
- Arduino UNO R3で±19.9V表示電圧計(2023.10.14)
- 「御詠歌プレーヤー」の製作 (MP3-TF-16Pモジュールの使用例)(2023.08.10)
- Arduino UNO R3のソケット・・思えば違和感がぁ(2023.07.07)
- 初めて買ったArduino UNO・・・今は(2023.05.25)
コメント