我是Arduino編程的新手,嘗試將arduino uno用作高分辨率定時器。我希望能夠在兩個上升沿中斷之間以全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,然後計數tcnt1時鐘週期,直到第二個中斷。我甚至不知道如何從tcnt1讀取值,所以我有辦法去。
我搜索了一些例子,但並沒有真正找到合適的例子。一切似乎都是針對定時器中斷,我認爲這不是我所追求的。
我可能缺乏很多必要的理解來使用這個tcnt1計數器,但任何幫助指向我在正確的方向將不勝感激!
謝謝
非常感謝您的信息!正是我缺乏的!得到它的工作。 – jtp