Mikrodenetleyicilerde Zamanlama ve Sayaçlar

 

Zamanlama ve Sayaçlar (Timers & Counters)

Mikrodenetleyicilerde zamanlama (timing) ve sayaçlar (counters), hassas gecikmeler oluşturmak, görevleri belirli aralıklarla çalıştırmak veya olayları saymak için kullanılır. Bu özellikler, kesintiler (interrupts), PWM sinyalleri ve olay zamanlamaları gibi birçok kritik işlemi yönetmede önemlidir.


1. Zamanlayıcılar (Timers)

Zamanlayıcılar, belirli bir süreyi takip eden ve mikrodenetleyicinin dahili saat frekansı (clock) ile çalışan donanım modülleridir. Kullanım alanları:

  • Kesintiler (Interrupts)
  • PWM (Darbe Genişlik Modülasyonu)
  • Gecikmeler (Delays)
  • Olay zamanlama (Event Timing)
  • Sayısal saatler ve kronometreler

Mikrodenetleyicilerde genellikle birden fazla zamanlayıcı bulunur. Örneğin:

  • 8-bit Timer → 0-255 arasında sayar.
  • 16-bit Timer → 0-65535 arasında sayar.
  • 32-bit Timer → Çok daha büyük sayıları takip edebilir.

a) Zamanlayıcı Çalışma Prensibi

Zamanlayıcılar, belirli bir saat sinyali (clock signal) ile çalışır. Saat sinyali, mikrodenetleyicinin içindeki osilatör tarafından üretilir ve belirli bir frekansta çalışır.

Örnek:
Bir 16 MHz saat frekansına sahip bir mikrodenetleyicide, zamanlayıcı her bir döngüde 1/16.000.000 saniyelik bir artış yapar.

Eğer bir zamanlayıcı, ön bölücü (prescaler) ile 1024'e bölünürse:

ZamanlayıcıFrekansı=16MHz1024=15.625kHzZamanlayıcı Frekansı = \frac{16 MHz}{1024} = 15.625 kHz

Bu, her sayaç artışının 1 / 15.625 ms süreceği anlamına gelir.


2. Sayaçlar (Counters)

Sayaçlar, bir harici kaynaktan gelen sinyalleri sayan modüllerdir. Örneğin:

  • Dijital darbe sayımı
  • Dış olayların tespiti (butona basma, motorun tur sayısı vb.)
  • Frekans ölçümleri

Sayaçlar, harici sinyaller tarafından tetiklenirken, zamanlayıcılar genellikle mikrodenetleyicinin dahili saat kaynağını kullanır.

a) Sayaç Çalışma Prensibi

  • Bir butona her basıldığında sayaç değeri 1 artar.
  • Bir motorun döngüsünü ölçmek için, bir manyetik sensör kullanılarak her turda bir darbe (pulse) sayılabilir.

Örnek: Motor devrini ölçmek için sayıcı kullanma

  1. Manyetik sensör her tam turda 1 darbe üretir.
  2. 60 saniye boyunca sayaç artışı sayılır.
  3. Sayaç değeri 60 ile çarpılarak RPM (Revolutions Per Minute - Dakikadaki Devir) hesaplanır.

3. Zamanlayıcı Modları

Mikrodenetleyicilerde zamanlayıcılar genellikle üç farklı modda çalışır:

a) Normal Mod

  • Zamanlayıcı belirlenen değere ulaştığında sıfırlanır ve tekrar saymaya başlar.
  • Kesinti (interrupt) oluşturmak için kullanılır.
  • Gecikme üretme işlemlerinde sıkça kullanılır.

b) CTC Modu (Clear Timer on Compare Match)

  • Sayaç belirli bir eşleşme değerine ulaştığında sıfırlanır.
  • Belirli bir sürede kesme üretmek için idealdir.
  • PWM üretmek için kullanılabilir.

c) PWM Modu (Pulse Width Modulation)

  • Analog sinyal üretmek için kullanılır.
  • Motor hız kontrolü, LED parlaklık kontrolü gibi uygulamalarda yaygındır.

4. Ön Bölücü (Prescaler) ve Zamanlayıcı Hesaplamaları

Zamanlayıcıların çalışma hızını kontrol etmek için ön bölücü (prescaler) kullanılır.

Ön bölücü, zamanlayıcıyı daha yavaş çalıştırarak zaman aralıklarını uzatmaya yarar. Yaygın ön bölücü değerleri: 1, 8, 64, 256, 1024.

📌 Örnek:
Eğer bir zamanlayıcı 16 MHz'de çalışıyorsa ve 1024 ön bölücü kullanılıyorsa:

Gerc\cekZamanlayıcıFrekansı=16,000,0001024=15.625kHzGerçek Zamanlayıcı Frekansı = \frac{16,000,000}{1024} = 15.625 kHz

Bu durumda zamanlayıcı her bir artışta yaklaşık 64 mikro saniye sürecektir.


5. Kesintilerle (Interrupts) Zamanlayıcı Kullanımı

Kesintiler, mikrodenetleyicinin belirli bir süre sonunda bir işlem yapmasını sağlar.

📌 Örnek: 1 saniyede bir LED yakıp söndürme (Timer Interrupt)

const int ledPin = 13;

void setup() {
    pinMode(ledPin, OUTPUT);
    noInterrupts();           // Kesintileri devre dışı bırak
    TCCR1A = 0;               // Timer1 yapılandırması
    TCCR1B = 0;
    TCNT1 = 3036;             // 1 saniyelik gecikme için başlangıç değeri
    TCCR1B |= (1 << CS12);    // 256 ön bölücü
    TIMSK1 |= (1 << TOIE1);   // Timer overflow kesmesini etkinleştir
    interrupts();             // Kesintileri etkinleştir
}

ISR(TIMER1_OVF_vect) {
    TCNT1 = 3036; // Yeniden başlat
    digitalWrite(ledPin, !digitalRead(ledPin)); // LED durumunu değiştir
}

void loop() {
}

Açıklama:

  • 1 saniyede bir kesme (interrupt) oluşturulur.
  • Her kesmede LED durumu değiştirilir (yak/söndür).

6. Uygulama Alanları

Kullanım Alanı Açıklama
Zaman Gecikmesi (Delay) Belirli bir süre bekleme oluşturur.
PWM Sinyalleri Motor hız kontrolü, LED parlaklık ayarlama.
Saat ve Kronometre Gerçek zamanlı sayaçlar oluşturma.
Kesme (Interrupt) Kullanımı Belirli aralıklarla olay tetikleme.
Frekans Ölçümü Dış sinyallerin frekansını hesaplama.
Dijital Olay Sayma Butona basma sayısı, motor devri ölçme.

Sonuç

  • Zamanlayıcılar, belirli periyotlarla işlem yapmak için kullanılır.
  • Sayaçlar, harici sinyalleri saymak için kullanılır.
  • Kesintiler (Interrupts) ile zamanlayıcılar belirli aralıklarla işlem yapabilir.
  • Ön bölücü (Prescaler), zamanlayıcı hızını ayarlamak için kullanılır.
  • PWM çıkışı, analog sinyaller üretmek için kullanılabilir.

Bu bilgilerle mikrodenetleyici projelerinde zamanlama işlemlerini verimli bir şekilde kullanabilirsiniz! 🚀

Yorumlar

Sitedeki popüler yayınlar:

Kullanım Alanlarına Göre Farklı Linux Dağıtımları 3

Kullanım Alanlarına Göre Farklı Linux Dağıtımları

Kullanim Alanlarina Gore Farklı Linux Dagitimlari 2