Arduino Ders 9.1: Interrupt-Kesmeler || Zaman Kesmesi (Timer Interrupt)
1. Giriş
Kesmeler (Interrupt), mikrodenetleyicilerde kritik görevlerin zamanında gerçekleştirilmesi için kullanılan bir mekanizmadır. Kesmeler, normal program akışını durdurarak belirli bir işlemi gerçekleştirmek için kullanılır. Özellikle, Arduino'da zaman kesmeleri (Timer Interrupt), periyodik görevlerin hassas bir şekilde zamanlanması için vazgeçilmezdir.
2. Kesme Çeşitleri
Arduino'da iki ana kesme türü vardır:
- Donanım Kesmesi: Belirli bir pin değişikliği veya zamanlayıcı olayına tepki olarak tetiklenir.
- Yazılım Kesmesi: Kod içinde belirli bir duruma ulaşıldığında manuel olarak çağrılır.
3. Zaman Kesmesi (Timer Interrupt) Nedir?
Zaman kesmeleri, belirli bir süre boyunca belirli işlemleri tekrar tekrar gerçekleştirmek için kullanılır. Zamanlayıcılar, mikrodenetleyicinin donanımında yerleşik bir özelliktir ve Arduino'da farklı zamanlayıcılar (Timer0, Timer1, Timer2) bulunur:
- Timer0: Genellikle
millis()
vedelay()
işlevleri için kullanılır. - Timer1: 16-bit zamanlayıcıdır ve daha uzun süreli olaylar için uygundur.
- Timer2: 8-bit zamanlayıcıdır ve PWM sinyalleri gibi hızlı olaylar için idealdir.
4. Timer Interrupt Nasıl Çalışır?
Zaman kesmesi, belirli bir süre dolduğunda mikrodenetleyicinin normal çalışmasını keserek bir fonksiyonu çalıştırır. Arduino'da zamanlayıcıları kontrol etmek için genellikle harici kütüphaneler veya doğrudan donanım kayıtları kullanılır.
Örnek: Timer1 Kullanımı
Kod Örneği
#include <TimerOne.h>
void setup() {
pinMode(13, OUTPUT); // LED pini çıkış olarak ayarlanır
Timer1.initialize(1000000); // 1 saniyelik bir kesme ayarla (mikrosaniye cinsinden)
Timer1.attachInterrupt(kesmeFonksiyonu); // Kesme fonksiyonunu bağla
}
void loop() {
// Döngü içinde bir işlem yapılmıyor
}
void kesmeFonksiyonu() {
digitalWrite(13, !digitalRead(13)); // LED'in durumunu değiştir
}
Kod Açıklaması
- Timer1.initialize: Zamanlayıcıyı 1 saniyelik bir kesme için ayarlar.
- Timer1.attachInterrupt: Zamanlayıcı kesmesi tetiklendiğinde çağrılacak fonksiyonu belirler.
- kesmeFonksiyonu: LED'in durumunu değiştirerek bir "blink" işlemi gerçekleştirir.
5. TimerOne Kütüphanesi
TimerOne kütüphanesi, Arduino'nun Timer1 donanımını kullanarak zaman kesmelerini kolayca ayarlamanıza olanak tanır. Kütüphane, kullanıcı dostu bir arayüz sunarak karmaşık zamanlayıcı ayarlarını basitleştirir. Aşağıda TimerOne kütüphanesinin temel işlevleri ve kullanım detayları verilmiştir:
Temel Fonksiyonlar
- initialize(period): Timer1'i belirtilen süre ile başlatır. Süre mikrosaniye (µs) cinsindendir.
- attachInterrupt(function): Zaman kesmesi tetiklendiğinde çağrılacak fonksiyonu ayarlar.
- detachInterrupt(): Zaman kesmesini devre dışı bırakır.
- restart(): Timer1'i sıfırlar ve yeniden başlatır.
Örnek: Timer Kesmesini Durdurma
#include <TimerOne.h>
void setup() {
pinMode(13, OUTPUT); // LED pini çıkış olarak ayarlanır
Timer1.initialize(500000); // 500 ms kesme
Timer1.attachInterrupt(kesmeFonksiyonu); // Kesme fonksiyonunu bağla
}
void loop() {
delay(5000); // 5 saniye bekle
Timer1.detachInterrupt(); // Kesmeyi devre dışı bırak
}
void kesmeFonksiyonu() {
digitalWrite(13, !digitalRead(13));
}
Örnek: Zamanlayıcıyı Yeniden Başlatma
#include <TimerOne.h>
void setup() {
pinMode(13, OUTPUT); // LED pini çıkış olarak ayarlanır
Timer1.initialize(1000000); // 1 saniyelik kesme
Timer1.attachInterrupt(kesmeFonksiyonu);
}
void loop() {
delay(10000); // 10 saniye bekle
Timer1.restart(); // Zamanlayıcıyı yeniden başlat
}
void kesmeFonksiyonu() {
digitalWrite(13, !digitalRead(13));
}
Kütüphanenin Avantajları
- Karmaşık donanım zamanlayıcı ayarlarını basitleştirir.
- Zamanlama hassasiyeti sağlar.
- Kullanıcı dostu bir arayüz sunar.
6. Sonuç
TimerOne kütüphanesi, Arduino projelerinde zaman kesmeleri kullanmayı kolaylaştıran güçlü bir araçtır. Bu kütüphane ile hassas zamanlama gerektiren uygulamaları kolayca gerçekleştirebilirsiniz. Yukarıdaki örnekler, TimerOne kütüphanesinin nasıl kullanılacağını ve projelerinize nasıl entegre edileceğini açıklar.
0 Yorumlar