Bu uygulamada Timer1 kesmesi kullanıldı. Kesme işlemi için Arduino'nun değil harici bir clock kaynağı kullanıldı. Timer1 başlangıç değeri 49 olarak, harici clock frekansı da 5 hz ayarlanarak, 10 sn'de bir programın kesme alt programına giderek buradaki ledi yakması sağlandı. Ana programa dönünce led söndürüldü. Harici clock olarak pull-down şeklinde Arduino'nun 5. pinine bağlı buton ile clock sinyali verildi.
NOT: Bu uygulamadaki kesme işlemi Proteus'ta çalışmadı. Bu nedenle fiziksel Arduino kartında deneme yapıldı ve çalıştı.
void setup()
{
pinMode(13, OUTPUT);
cli(); //tüm kesmeler durduruldu
TCCR1A = 0; // TCCR1A register 0'lanıyor
TCCR1B = 0; // TCCR1B register 0'lanıyor
TCNT1 = 0; //sayaç değeri sıfırlandı
OCR1A = 49; //timer1 çözünürlüğü
TCCR1B |= (1 << WGM12); //CTC(Clear Timer on Compare Match) mod açıldı
TCCR1B |= (1 << CS12) | (1 << CS11) | (1 << CS10); //external clock yapıldı. yükselen kenarda tetikleme olacak
TIMSK1 |= (1 << OCIE1A); //timer1 karşılaştırma kesmesi aktif edildi
sei(); //tüm kesmelere izin verildi
}
void loop()
{
digitalWrite(13, LOW);
}
ISR(TIMER1_COMPA_vect)
{
digitalWrite(13, HIGH);
delay(2000);
}
___________________________________________________________________________________________________________________________________________________
0 comments:
Yorum Gönder