Timer2 ve Watchdog Timer Birimi
Timer2 ve Watchdog Timer Birimi
Timer2 Birimi
Timer2 birimi diğer Timer0 ve Timer1 birimlerinden farklı olarak sadece zamanlayıcı olarak kullanılan 8 bitlik birimdir.
- 8 bitliktir
- 8 bitlik postscaler değerine sahiptir
- CCP modülündeki PWM birimi için sinyal üretmede kullanılır.

Blok şemada görüleceği gibi Timer2 zamanlayıcısı için denetleyicinin dahili saat sinyali kullanılır. Bu sinyal bölme(prescaler) ile çapılarak kaynak saat sinyalini oluşturur.
PR2 8 bitlik yazılabilir ve okunabilir bir peryot kaydedicisidir.
TMR2 kaydedicisi içindeki değer 00h’tan başlayarak sayar ve PR2 kaydecisi içine yazılan değere eşit olduğunda (bu işlemi karşılaştırıcı yapar) bir eşitlik sinyali üretilir ve TMR2 sıfırlanır. Eşitlik sonucu PR2 FFh değerini alır.
Postscaler değeri meydana gelen eşitlik sinyalinden kaç defa mydana geldikten sonra Timer2 kesmesi oluşacağını belirler.
Bu işlemler T2CON kaydedicisinde gerçekleşir.

- Bit 7= Kullanılmayan bit Okunurken “0”
- Bit 6-3 TOUTPS3:TOUTPS0 =Timer2 Postscale değeri seçme bilgileri
- 0000: 1:1
- 0001: 1:2
- 0002: 1:3
- 0003: 1:4
- ………..
- …….
- 1111: 1:16
- Bit 2 TMR2ON= Timer2 açma-kapama
- 1: açık
- 0:kapalı
- Bit 1-0 T2CKPS1-T2CKPS2=Timer2 bölme(prescaler) değeri seçme bitleri
- 00= bölme değeri 1
- 01: bölme değeri4
- 1x:bölme değeri 16
Bölme oranı(prescaler) ve postscale değerleri POR,MCLR,WDT vb. sıfırlama sinyalelerinden biri oluştuğunda veya TMR2 kaydedicsine veri yhazma işlemi ile T2CON kaydedicisine veri yazma işlemlerinden biri gerçekleştiğinde sıfırlanır.
Timer2 Kesmesi(#INT_TIMER2)
TMR2 kaydedicisi içindeki değer 00h’tan başlayarak sayar ve PR2 kaydedicisi içindeki değere eşit olduğunda bir eşitlik sinyali üretilir. Belirlenen psotscale sayısı kadar eşitlik olduğunda Timer2 kesmesi(Interrupt) oluşur. Timer2 kesmesi izin verme biti PIE1 kaydedicisinin TMR2IE bitidir. Kesme oluşma süresi aşağıdaki gibi hesaplanır.
setup_timer_2() Fonksiyonu
Timer2 zamanlayıcı ayarları yapmaya yaran fonksiyondur.
setup_timer_2(mod,periyod,postscale);
mod kısmına aşağıda belirtilen sabitlerden biri yazılır.
mod Tanımlamaları:
T2_DISABLED: Timer2 kapat
Timer2 Bölme Oranları(Prescaler) Sabitleri:
- T2_DIV_BY_1: BÖLME ORANI 1
- T2_DIV_BY_4: bölme oranı 4
- T2_DIV_BY_16: bölme oranı 16
Periyod
Periyot kısmına 0 ile 255 arasında bir tamsayı girilir. Zamanlayıcı bu değere ulaşınca kendini sıfırlar.
Postscale
Postscale kısmına 1 ile 16 arasında bir tamsayı girilir. Timer2 kesmesi oluşması için kendini kaç kez sıfırlaması gerektiği bilgisidir.
setup_timer_2(T2_DIV_16, 192 ,3)
bölme oranı: 16,
PR2 değeri(periyot): 192,
Postscale değeri: 3
set_timer2() Fonksiyonu
Timer2 biriminin saymaya başlama değeridir. Timer2 diğer sayıcılar gibi yukarı yönlü sayar.
set_timer2
(
değer
);
değer kısmına: Timer2 biriminin saymaya başlama değeri yazılır. TMR2 kaydedicisinin içeriğidir. 8 bitlik olduğundan 0 ile 255 arasında olmalıdır.
Watchdog Timer(WDT) Birimi
WDT birimi denetleyici içinde bulunan ek olarak dışarıdan bir eleman bağlantısı bulunmayan bir R/C osilatörüdür. Denetleyici osilatör girişlerine bağlanan ()OSC1/CLKIN ve OSC2/CLKOUT) osilatörlerinden bağımsızdır. Denteleyiciye osilatör bağlansa veye denetleyici uyku modunda olsa da çalışmaya devam eder.
- 8 Bitliktir(0-255’e kadar sayar)
- Taşma sinyali üretme süresi yaklaşık 18ms‘dir(ortam sıcaklığı,denetleyici çeşidi,Vdd değerine göre değişir)
WDT taşma süresi arttırlmak isteniyorsa OPTION kaydedicisinde bölme oranı değeri(prescaler) değiştirilir.
OPTION kaydedicsinin PSA biti “1” yapılarak WDT taşma süresi en fazla yaklaşık 2,304sn olabilir.
WDT normal çalışma esnasında belirlenen süre sonunda denetleyiciyi sıfırlar. Denetleeyici uyku modunda ise WDT kesmesi meydana geldiğinde denetleyici uyku modundan çıkar ve programa kaldığı yerden devam eder.
CCS C’de PIC12,PIC14 ve PIC16 serisi denetleyiciler için WDT açma kapama komutları programın başında belirtilen şu komutlar ile sağlanır. WDT konfigürasyon açık olarak belirtilmişse, denetleyiciye yüklenen program kodları WDT birimini kapatmaz, sadece içeriği sıfırlanabilir.
#FUSE WDT
//WDT Açık
#FUSE NOWDT
//WDT Kapalı
PIC18 serisi için açma kapatma
setup_wdt(WDT_ON)
setup_wdt(WDT_OFF)
Aşağıda WDT blok şeması görülmektedir. WDT türkçe karşılığı olarak “bekçi köpeği” tabiri kullanılmaktadır.

PIC denetleyicilerde program istenmeyen bir şekilde kilitlenmesi durumunda PIC’in sıfırlanmasını sağlamak için kullanılır.
Bir mikrodenetleyicili sistemde meydana gelen bir arız veya normal akış dışı bir olay meydana geldiğinde denetleyici belirlenen süre sonunda kendini sıfırlanmasıdır.
WDT birimi kullanıldığında istenmeyen durumlarda PIC’in sıfırlanmasını önlemek için programda gerekli yerlerde WDT sıfırlayan komut kullanılmalıdır.
setup_wdt() Fonksiyonu
Watchdog Timer ayarları için kullanılan fonksiyondur.setup_wdt(mod)
mod kısmına bölme sabitleri(prescaler) yazılabilir.
Bu bölme değerleri 12 bit ve 14 bit denetleyiciler için geçerlidir.
12 ve 14 bit PIC denetleyiciler için kullanılan sabitler
WDT_18MS
=Taşma süresi 18ms WDT_36MS
=Tşama süresi 36msWDT_72MS
=Taşma süresi 72ms WDT_144MS
=Taşma süresi 144msWDT_288MS
=Taşma süresi 288ms WDT_576MS
=Taşma süresi 576msWDT_1152MS
=Taşma süresi 1,152sn WDT_2304MS
=Taşma süresi 2,304sn
16 bit komut boyuna sahip PIC18FXXX için sabitler
WDT_ON
=WDT Aktif WDT_OFF
=WDT Pasif
restarat_wdt() Fonksiyonu
WDT sıfırlamak için kullanılır.
restart_wdt();
Timer2 ve Watchdog Timer uygulamalarına buradan ulaşabilirsiniz.