millis()はタイマー0に関連付けられたPWMピンと競合しますか?


9

私はmillis()関数がいくつかのPWMピンと同じタイマーを使用することを読みました。

これらのPWMピンを使用している場合millis()でも、正しい値を返しますか?

回答:


6

彼らは、競合しないmillis()厳密で即値読み込みTCNT0の値と比較するタイマ0の使用ハードウェアの能力を経由して、一方、PWMのTCNT0中の値とをOCR0xそれらのいずれかの値に影響を与えず。


millis()タイマー0のオーバーフローカウントのみを使用します。micros()の即時値を読み取りますTCNT0
Nick Gammon

5

あなたの質問に直接答えた@Ignacioの答えに追加するだけです。あなたが話す「矛盾」Timer0はのプリスケーラに関連しています。

ほとんどの場合、これらのピン(誤ってUNOのピン5と6)をPWMで問題なく使用し、正しい値を読み取ることができますmillis()(予想される遅延はから取得できますdelay)。

問題が発生するのは、プリスケーラを変更する場合(通常はPWM信号の周波数を変更する場合)です。これを変更すると、の計算とレポート、millis()およびの長さに直接影響しますdelay(x)


タイマーのプリスケーラーは、Serial.println(TCCR0A、BIN)の最下位ビットで読み取ることができます。それらが「11」の場合、プリスケーラーはclk / 64です。次に、millis()およびdelay()を変更するための係数を計算できます。
Dave X

それは非常に良い点であり、私は常にそれを修正することを避けてきましたが、本当に望んでいる/必要があるのなら理由はありません。もう1つのポイントは、変更した場合は、新しいプリmillis ()delay ()
スケーラー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.