ATMEL PROGRAMLAMA 20 - Timer/Counter0 Genel Yapısı


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.
  1. Sayıcı
  2. Harici saat sinyalini sayabilme
  3. Çeşitli frekanlarda sinyal üretme 
  4. PWM
  5. Üç 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. 
  1. Normal Mode
  2. CTC ( Clear Timer on Compare )
  3. Phase correct PWM 
  4. Fast PWM
Hangi modda çalışacağımızı WGM02-WGM01-WGM00 bitleri ile belirleriz. Aşağıdaki tabloda bu bitler ve bunlara karşılık çalışma modları gösterilmiştir.




Timer\Counter0 konuları içerisinde sadece Normal ve CTC modlar üzerinde duracağız. PWM modları ilerleyen konularda PWM konusu olarak ayrıca işlenecektir.






Yorumlar

  1. hocam merhaba,

    pwm konusunu ne zaman yayınlayacaksınız?

    YanıtlaSil
  2. Merhaba yoğunluktan blog u biraz ihmal ettim inşallah en kısazamanda :)

    YanıtlaSil

Yorum Gönder