Arduinoでタイマー割り込み
Arduinoでタイマー割り込み 前回の記事( Arduinoを使ってみよう )で簡単な時間計測プログラムを作成しましたが実は正確ではありません。 なぜならば、デッドラインを意識したリアルタイム設計が成されていないからです。 そこで、今回は、Arduinoのタイマー割り込みを使ってより正確な時刻計測を行うプログラムを作成してみましょう。 目次: ・ デッドラインとは? ・ タイマーで1秒間隔の割り込みを作るには? ・ 正確なストップウォッチを作ってみる! デッドラインとは? なぜ、前回のタイマー処理では正確な時間計測ができないのでしょうか? 処理を時間で見てみると下記のようになっています。 LCDへの表示を行い、その後1ミリ秒のディレイを行っています。 1回の処理時間は下記のようになります。 処理時間 = LCD表示処理時間 + 1ミリ秒ディレイ LCDの表示にかかる処理時間は短いものですが、使い続けると誤差が大きくなってしまいます。 組み込み機器は、電源を入れられるとそのまま動き続けることが多いため、このような誤差も問題になってきます。 或いは、実際の競技計測のように厳密な計測を求められるような場合も同様です。 そこで、下記のように1秒の間隔の間でLCDの表示処理を行うようにする方法が考えられます。 このような処理形態とした場合、 必ず1秒以内に処理を完了しなければなりません 。 この1秒という時間が『 デッドライン 』になります。 上記の図では、2つ目の1秒の間隔で処理が終わることができませんでした。 このような場合、次の1秒の処理に影響が出てしまうため、このような状況は避けなければなりません。 だから、『 デッドライン 』といいます。 また、このデッドラインを意識した設計は、組み込み機器のリアルタイム性能に大きく影響を及ぼします。 さて、ではどうやって1秒の間隔を作り出せばよいのか? このブログの以前の記事「 STM32F3 Discovery、タイマーと割り込みのキホン 」ではタイマーで割り込み駆動してLEDをソフトPWMで制御しました。 Arduinoでも同様に、タイマーによる割り込みが可能です。 ...