Anasayfa » Arduino – Watchdog timer – Arduino WDT – Arduino resetleme – Robotik Kodlama Dersleri – 76 –

Arduino – Watchdog timer – Arduino WDT – Arduino resetleme – Robotik Kodlama Dersleri – 76 –

whatcdog_timer_76

Arduino – Watchdog timer – Arduino WDT – Arduino resetleme konularına yer vereceğiz.

Teknik olarak WDT; Bir izleme zamanlayıcısı (WDT), mikrodenetleyici (MCU) programlarının kontrolden çıkıp çıkmadığını veya çalışmayı durdurup durdurmadığını görmek için izleyen bir zamanlayıcıdır . MCU operasyonunu izleyen bir “bekçi köpeği” görevi görür. Bir mikrodenetleyici (MCU), elektronik cihazları kontrol etmek için kompakt bir işlemcidir şeklinde tanımlanabilir.

Peki ne işe yarıyor bu işlem, her hangi bir sebeple algoritma yürütülmez ise, kodlar ilerlemez ise yada donmalar olur ise işte tam da burada devreye WDT girer ve arduinoyu resetler herşeyi en baştan başlatır.

Konuyu biraz daha somutlaştırmak ve örneklemek gerekirse; Bir peyzaj klima iklimlendirme sistemimizin olduğunu ve bu sitemin ısıtıldığını, soğutulduğunu, nemlendirildiğini ve havalandırıldığını düşünelim, sistemin ortamı bizim istediğimiz seviye ısıtılması gerektiği anda devreye ısıtıcılar girsin bu sırada sistem kilitlenmiş olsun ve sıcaklığın artık arduino tarafından ölçülemediği ve kontrol edilemediği durumu başlamış olacak devreye giren ısıtıcı istenilen sıcaklık değeri aşılsa bile sistem kilitlendiği için artık devre dışı olmayacak ve gereğinden çok fazla ısıtma yapacağı için olumsuz durumlar meydana gelecektir. İşte eğer ki algoritmamızın belli yerlerine WDT kodlarını yerleştirirsek herhangi bir kilitlenme-donma durumunda arduino bir şeylerin ters gittiğini anlayacak ve resetlenecektir.

Aşağıda  bunu daha iyi kavrayabileceğimiz devre şeması ve kodların yer aldığı sistemi kurup çalıştırabilirsiniz. Bu sayede WDT kullanımı hakkında artık detaylı bilgiye sahip olmuş olacaksınız.

WDT

 




//Görsel İşitsel Teknoloji Kanalı
//wwww.teknikerler.com
//Kerim Arı Youtube kanalı WDT Kodları - kullanımı örnek Kodları

#include<avr/wdt.h> 

int i;

void setup() {
  Serial.begin(9600); 
  Serial.println("Sistem baştan Başladı");
  
  for(int i=5;i<11;i++)
  {
    pinMode(i, OUTPUT);
  }
  
 
  {
    digitalWrite(5, HIGH);
    delay(500);
    digitalWrite(5, LOW);
    delay(500);
    digitalWrite(5, HIGH);
    delay(250);
    digitalWrite(5, LOW);
   }


  
  wdt_disable();  //Zamanlayıcıyı kapatıyoruz
  delay(3000);  // !!!!DİKKAT!!!!Bu satırda arduino için zamanlayıcıdan önce önyüklmenin yapılabilmesi için tedbiren zaman tanıyoruz!!!!!!
  wdt_enable(WDTO_4S);  //zamanlayıcı başlatıyoruz (WDTO_2S)2 yerine 4,6,8 ne kaç yazılır ise okadar saniye bekler.
 Serial.println("Süre saymaya başladı");
}

void loop() {


  
  for(int k=0;k<5;k++)
  {
  Serial.println("ilk for");
  for(int i = 6; i<11; i++) 
  {
    digitalWrite(i, HIGH);
    delay(100);
    digitalWrite(i, LOW);
    delay(100);
   Serial.println("ikinci for");
  }
 
  wdt_reset();  // Bu satır belirtilen süre içinde tekrar okunmaz ise reset atılır
  Serial.println("reseti gördüm");
  }



  
  while(1) // sistemi kilitledik.
     { 
        digitalWrite(10, HIGH);
        Serial.println("while ile içindeyim");
       
  }
   wdt_reset(); 
   Serial.println("reseti gördüm");
}
Videoyu İzlemek İçin Tıklayınız

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir