AVRでTimer0を使用しない理由は何ですか?


10

基本的な質問だけです... arduino / avr / ATMega328の場合、Timer1を使用した例がたくさんあります(そのためのライブラリ全体もあります)が、Timer0(またはTimer2)を使用する例はほとんどありません。

これらのタイマーのいずれかを使用してISRメソッドを制御すると、関連するピンでのPWMの使用が無効になることはわかっていますが、Timer0から離れているように見える特定の理由はありますか?内部で使用してはいけない他の何かに使用されていますか?

私の現在のアプリケーションはTimer1を使用して問題なく動作します。他の無視されがちなこれらのタイマーについて何か不足しているのではないかと気になります。

回答:


16

質問がベアAVRマイクロコントローラーに関するものである場合、いいえ、どのタイマーの使用にも制約はありません

  • Arduinoのために、タイマ0は最高の回避され、のようにmillis()delay()とArduinoのライブラリ内のすべての内部計時は、このタイマーを使用しています。時定数を変更すると、これらの操作に影響します。
  • 質問にあるように、Timer1は、TimerOneライブラリなどのライブラリや直接操作を通じて、すべてのタイマー/カウンタタスクの一般的な最初の選択肢です。これは16ビットタイマーであるため、8ビットタイマーよりも分解能が高くなります。
  • Timer2は、tone()ライブラリによって使用されますが、それが広く使用されているわけではないため、TimerOneのように非常に便利なmsTimer2ライブラリもあります。Timer2を直接操作することもできます。
  • Arduino Megaボードを使用している場合は、Mega、Timer3Timer4、およびTimer5の追加のタイマー(それぞれ16ビットタイマー)も使用できます。

9

関連するPWMを無効にする以外に、私が考えることができる他の理由は次のとおりです。

  • TIMER0は8ビットタイマーで、TIMER1は16ビットタイマーです。

  • Arduinoの世界では、TIMER0はdelay()やmillis()などのタイマー関数に使用されます。私が見た他の多くのコードは、8ビットの解像度が通常十分であるため、同じように使用します。

  • TIMER2も8ビットです。8ビットのみが必要な場合に特に回避する理由は考えられません。ただし、Arduinoのtone()関数で使用されます。

だから私はそれがかなり一般的な選択としてTIMER1を残し、16ビットのタイマーが必要な場合、より小さなAVRでの唯一の選択だと思います。AVR Megaデバイスには、すべて16ビットのTIMER3-TIMER5も含まれています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.