私はArduinoプログラミングには新しく、高解像度タイマーとしてarduino unoを使用しようとしています。私は、2つの立ち上がりエッジ割り込みの間で、フル16MHzレートでクロックサイクルをカウントできるようにしたいと考えています。私は4マイクロ秒の解像度を持つmicros()関数を使用して機能するいくつかのコードを持って、私はそれより良い必要があります。ここで私はタイミングのために)(ミクロスを使用しようとしていますサンプルコードは次のとおりです。割り込み間のクロックサイクル数をカウントするArduino TCNT1?
volatile int k = 0;
volatile float t1 = 0;
volatile float t2 = 0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
attachInterrupt(digitalPinToInterrupt(2), ISR1, RISING);
attachInterrupt(digitalPinToInterrupt(3), ISR2, RISING);
}
void ISR2()
{
k = 1;
t1 = micros();
Serial.println(1);
}
void ISR1()
{
k = 2;
t2 = micros();
Serial.println(2);
}
void loop()
{
if (t1 != 0 && t2 != 0) {
if (t2 - t1 < 0) {
t1 = 0;
t2 = 0;
}
else {
Serial.print("tdelta ");
Serial.print(t2 - t1);
t1 = 0;
t2 = 0;
Serial.println(0);
}
}
}
私は私のミクロスタイミングはおそらく問題になることがあり、割り込みによってビットオフセットを、取得していることを実現します。
誰でも正しい方向に向けることができますか?
私はtimer1を使用したいと思います。なぜなら、それは16ビットであり、イベントはオーバーフローが発生する前に完了するのに十分速くなければならないからです。最初の割り込みでtcnt1を0に設定し、2回目の割り込みまでtcnt1クロックサイクルをカウントする簡単な方法を見つけることを望んでいます。私は本当にtcnt1からの値を読む方法を知らないので、行く方法があります。
私は例を検索しましたが、実際に適切と思われるものは見つかりませんでした。すべて私はかなり後になっているとは思わないタイマーの割り込みに合わせているようです。
私はおそらくこのtcnt1カウンタを使用するために必要な理解が不足していますが、正しい方向に私を指す助けがあれば幸いです!
ありがとうございました
情報をお寄せいただきありがとうございます!まさに私が欠けていたもの!それは働いた。 – jtp