Timer\Counter0 genel amaçlı 8 bitlik Timer\Counter birimidir. Aynı zamanda 2 adet bağımsız çıkış karşılaştırcı (Ouput Compare Unit) birimi ve buna bağlı PWM desteğine sahiptir.
Timer\Counter0 donanım birimi şu görevleri yerine getirebilir.
- Sayıcı
- Harici saat sinyalini sayabilme
- Çeşitli frekanlarda sinyal üretme
- PWM
- Üç adet kesme üretme
- bir adet Timer overflow ( TOV0) interrupt
- iki adet birbirinden bağımsız Output Compare Match Interrupt (OC0A VE OC0B)
Timer\Counter0 birimini iki ayrı birim halinde incelemeliyiz.
1. Counter unit (Sayıcı Birim)
2. Output Compare Unit (Çıkış Karşılaştırma Birimi)
1. Counter Unit (Sayıcı Birim) :
Timer\Counter donanım biriminin ana kısmı programlanabilen çift yönlü Counter unit (Sayıcı Birim)'dir
Aşağıdaki şekilde Timer\Counter0 biriminin blok diyagramı görülmektedir.

Blok diyagramı sağ taraftan başlayarak inceleyelim. Clock Select isminden de anlaşılacağı gibi Timer\Counter0 için saat sinyalini nereden alacağını belirler. Bunun için iki seçenek vardır.
1- Microdenetleyici çalışması için seçilen osilatör ( Dahili saat sinyal kaynağı - Internal Clock Source )
2- Harici kaynaktan gelen saat sinyali. (Harici saat sinyal kaynağı - External Clock Source)
Dahili kaynaktan yapılan seçimde aynı zamanda sinyalin frekansı gerekirse uygun bir prescaler değeri ile düşürülebilir. Prescaler hiç seçilmeyip direkt saat sinyalide kullanılabilir.
Saat sinyali olarak harici kaynak seçildiğinde T0 (Tn)pini Timer\Counter0 için harici saat sinyal giriş ucu olur. Ayrıca tetiklemenin harici saat sinyalinin düşen kenarında mı yoksa
yükselen kenarında mı yapılacağı blok diyagramda da görüleceği üzere edge dedector devresi ile yapılır.
Herhangi bir saat sinyal kaynağı seçilmez ise Timer\Counter0 birimi aktif olmaz
Sinyal kaynağı seçimi, prescaler değeri seçimi ve sinyal kenar tetikleme seçim işlemi (Timer\Counter Control register) kayededicisinin
CS00, CS01 ve CS02 bitlerinin değerine göre yapılır.
Clock Select çıkışındaki Clktn Timer\Counter0'ın saat sinyalidir. Clktn Control Logic devresini tetikler. Control Logic sayma işlemini düzenler. TCNTn (Timer\Counter0 için TCNT0) 8 bitlik sayma değerini tutan kaydedicidir.
Control Logic
clear : TCNT0 kaydedicisinin içeriğini sıfırlar.
direction : sayma yönünü belirler (ileri\geri)
count : sayma yönü ileri ise TCNT0içeriğini 1 artırır, sayma yönü geri ise 1 azaltır.
bottom : TCNT0 değerinin 0 olduğunu bildirir
top : TCNT0 değerinin maximum değere (0xff=255) ulaştığını bildirir.
TOVn : Kesme (Interrupt ) tanımlandıysa kesme bayrağını 1 yapılır.
Timer0 Kesmesi (Timer0 Interrupt)
Timer0 kesmesi TCNT0 değeri maximum (8 bit için 0xff=255) değerine ulaştığında , bir sonraki saat sinyalinde TCNT0 değeri 0 olur , aynı anda TOV0 ( TIFR0 - Timer Interrupt Flag Register 0.bit ) bayrağı 1 olur ve Timer0 kesmesi oluşur. Hali hazırda çalışmakta olan program durur ve ISR_TOV0 fonksiyonu yürütülür. Bu sırada TOV0 otomatik olarak sıfırlanır. Timer0 kesmesini aktif etmek için TIMSK0 Timer/Counter Interrupt Mask Register0 içersindeki TOIE0 biti ve SREG kaydedicisi I biti 1 yapılmalıdır.
2- Output Compare Unit (Çıkış Karşılaştırma birimi)

Yukarıdaki şekli inceleyelim ;
TCNT0 değeri ile OCR0A ve OCR0B ( Output Compare Registers ) değerleri sürekli olarak karşılaştırılır. TCNT0 değeri OCR0A ve OCR0B değerlerine eşit olduğu anda karşılaştırıcı eşleşme olduğuna dair bir sinyal üretir. Buna bağlı olarak bir sonraki saykılda OCF0A veya OCF0B (Output Compare Flag) bayrağı bir olur. İlgili kesme aktif edilmişse kesme oluşur. OCF0A \ OCF0B ISR fonksiyonu yürütülürken otomatik olrak sıfırlanır.
Karşılaştırıcının üretmiş olduğu eşleşme sinyali, Waveform Generator 'ünün TCCR0A (Timer/Counter Control Register A) WGM00-WGM01 , TCCR0B ( Timer/Counter Control Register B) kaydedicisinin WGM02 (Waveform Generation Mode) ve TCCR0A (Timer/Counter Control Register A) kaydedicisinin COM0x1:0 (Compare Output mode) bitlerinin durumana bağlı olarak bir çıkış üretmesini sağlar. Bu şekilde istenilen frekanlarda sinyaller üretilebilir.
Timer\Counter0 birimi 4 farklı modda çalışabilir.
- Normal Mode
- CTC ( Clear Timer on Compare )
- Phase correct PWM
- Fast PWM
hocam merhaba,
YanıtlaSilpwm konusunu ne zaman yayınlayacaksınız?
Merhaba yoğunluktan blog u biraz ihmal ettim inşallah en kısazamanda :)
YanıtlaSil