Arduino programlamada ve arduino uno'yu yüksek çözünürlüklü bir zamanlayıcı olarak kullanmaya çalışıyorum. İki yükselen kenar kesmesi arasındaki saat döngüsünü 16MHz hızında sayabilmek istiyorum. 4 mikrosaniye çözünürlüğü olan micros() işlevini kullanarak işlevsel olan bazı kodlarım var ve bundan daha fazlasına ihtiyacım var. Benim mikroları muhtemelen bir sorun olabilir kesmeler, telafi biraz oluyor zamanlama olduğunu farkArduino TCNT1, kesmeler arasındaki saat döngülerini sayar mı?
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);
}
}
}
: İşte zamanlama için() Mikrolara kullanmaya çalışıyorum örnek kodudur.
Beni doğru yöne yönlendiren var mı?
Sanırım saat1'i kullanmak istiyorum çünkü 16 bit ve olaylarım herhangi bir taşma meydana gelmeden önce tamamlanacak kadar hızlı olmalı. İlk interrupt ile tcnt1'in 0 olması için basit bir yol bulmayı umuyorum ve daha sonra ikinci interrupt'a kadar tcnt1 saat döngüsünü sayıyorum. Gerçekten de tcnt1'deki değerleri nasıl okuyacağımı bile bilmiyorum, bu yüzden gitmem gereken bir yol var.
Örnek aradım ama uygun görmedim. Her şey, benim beklediğim şey olduğunu düşünmediğim zamanlayıcı kesintilerine doğru görünüyor.
Muhtemelen bu tcnt1 sayacını kullanmak için çok fazla ihtiyaç duyduğumu anlayamıyorum, fakat doğru yönde bana işaret edecek her türlü yardım büyük bir memnuniyetle karşılanacaktır! Sen zamanlayıcı ile çalışmak için deneyebilirsiniz
Teşekkür
Bilgi için bir demet teşekkürler! Tam olarak eksik olduğum şey! Çalıştı. – jtp