WDT(Watch Dog Timer – Bekçi Köpeği Zamanlayıcısı)

Mikrodenetleyi içinde ayrı bir donanım zamanlayıcıdır. Bu zamanlayıcının kullanım amacı diğer timerlardan biraz farklıdır. Adı üstünde programın bekçiliğini yapmaktadır.  Program bekçiliği nasıl olur? Şöyle ki program içinde yapılacak işlerde aksama durumu olabilir veya program kilitlenebilir veya sapıtabilir. Yani kontrolden çıkar. Böyle durumlarda WDT imdadımıza yetişir. WDT programı resetler (yeniden başlatır) ama status registerinde bu durumu belirtir.

PIC’i sleep (uyku) modundan çıkartmak için de kullanılabilir.

wdt_temsil

Yukarıdaki şekilde WDT temsil olarak gösterilmiştir.

WDT biriminin kendine ait RC osilatörü vardır. Çünkü sistemin clock palsi kesilse bile WDT çalışması gerekir.

WDT zaman aşım normal süresi 18ms dir. Prescalar değer ile 128 *18ms =2304ms yani yaklaşık 2.3 saniyeye kadar uzatılabilir.

WDT hakkında daha geniş bilgiye http://ww1.microchip.com/downloads/en/DeviceDoc/31026a.pdf adresinden ulaşılabilir.

wdt

WDT Nasıl Kurulur?

WDT konfigürasyon ayarlarıyla aktif edilir veya pasif edilir. MikroC’de Project /Edit Project menüsünden konfigurasyon ayarlarından “Watchdog Timer” Enable  yapılmalıdır.

WDT Taşma süresi nasıl ayarlanır?

option_reg_wdt

Ölçeklendirme yapılmamış taşma süresi 18ms. Olduğuna göre OPTION_REG registerinin 0,1,2 bitleri le yukarıdaki şekilde görüldüğü gibi birim süreyi ölçekle çarparak istenilen taşma zamanını bulabiliriz.

Örnek;

1:128 ölçekleme ile ;

18ms *128 = 2304ms lik taşma süresi elde ederiz bu da yaklaşık 2.3 saniye eder. Program kodlarını yazacak olursak;

OPTION_REG.PSA=1;

OPTION_REG.PS2=1;

OPTION_REG.PS1=1;

OPTION_REG.PS0=1;

WDT Taşma süresi dolduğunda ne olur?

PIC resetlenir ve yeniden baştan başlar ancak STATUS registerinin  TO(Time Out) biti “0” olur. Program başlarken bu bit kontrol edilerek uyarıcılar (Led, buzzer, siren vb) çalıştırılabilir.

Örnek kod;

 if(!STATUS.B4) PORTB.B7=1;

 

MikroC ile WDT uygulaması

Bu uygulamamızda en uzun zaman aşım süresini kullanacağız. PB7 pinine bağlı LED yandığında hızlıca RB0’a bağlı butona basıp çekeceğiz. Bu durumda zaman aşımı gerçekleşmeyecek. Ancak led yanıp söndükten  sonra geç basılırsa zaman aşımı gerçekleşecek ve PIC resetlenecektir. Reset sonrası RB1’e bağlı zaman aşım LED’i yanacaktır. Normal Reset butonuna basılınca ne değişiyor? izleyiniz

wdt_devre

#define LED PORTB.B7
#define ZamanAsimLED PORTB.B1
#define BUTON PORTB.B0

void main()
{
 TRISB=1;
 PORTB=0;
 OPTION_REG.PSA=1;
 OPTION_REG.PS2=1;
 OPTION_REG.PS1=1;
 OPTION_REG.PS0=1;
 ZamanAsimLED=STATUS.B4;
 asm CLRWDT;
 do
 {
 LED=1;
 Delay_ms(500);
 LED=0;
 while(BUTON){};
 asm CLRWDT;

 }while(1);

}

 Proje dosyalarına buradan ulaşabilirsiniz.

Reklamlar

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s