Donan Arduinoyu Watchdog Timer ile resetleme
  • (Arduino orijinal değil.)
    Uzun süre durmadan sorunsuz şekilde çalışan program bugün ne olduysa donmuş LCD ekranda hiç yazı yok ve 4lü rölelerin 2 tanesi tetikli kalmış (bu büyük bir sorun) takılı kaldığı kodları buna dayanarak incelediğimde (yani 2 röle aktif ve lcd.clear olan durumlara baktım) bu kodların döndüğü yerlerde delay yok kod hatası yok birşey bulamadım, zaten daha önce defalarca hatta günlerce çalışan kod birden niye dursun resetledim şimdi yine herşey düzgün çalışıyor, ben de mikrodenetleyicinin durduğuna karar verdim, neden durdu sebebi nedir durması normal mi araştırmalarım sonucu bazen olabileceğini öğrendim bunları araştırırken de Watchdog Timer ile tanıştım.

    Şimdi ben programın tüm işlemlerini tek tek yaptırarak en uzun lop döngüsünü bulmak için söyle birşey düşündüm

    void loop() {
    birDonguZamani = millis();
    //diğer tüm işlemler
    //diğer tüm işlemler
    Serial.print("millis: ");
    Serial.println(millis() - birDonguZamani);
    }

    Ve en uzun döngü diyelim ki 1sn sürdü Watchdog Timer için döngünün 1,5 katı daha yüksek bir değerle eklenmeli demişler (zaten aldığı değerler 15ms 30ms 60ms 120ms 250ms 500ms 1s 2s 4s 8s) sonra da alttaki şekilde eklersem bu sorun ortadan kalkar mı?

    void setup() {
    wdt_enable(WDTO_4S);
    }

    void loop() {
    //diğer tüm işlemler
    //diğer tüm işlemler
    wdt_reset(); //4sn boyunca bunu görmezse resetler
    }

    Şimdi kodu eklesem test etme imkanım da yok işlemcinin donmasını sağlayamam ondan soruyorum
    Olurmu bu ne dersiniz yoksa mikrodenetleyici zaten donma yaşadığı için Watchdog Timer de çalışmaz mı?

    Bu arada Arduinonun o anda yaptığı işlem sırasında balmaksızın reset atması önemli değil istediği an reset atabilir yarım kalacak bir mekanizma kontrolü yapmıyor
  • İşlemci sadece osilatör durursa donar. Eğer devrede çok hassas zamanlama ihtiyacı duymuyor isen kristal yerine dahili osilatör kullanmanı öneririm. Dahili osc daha garantilidir ama frekansı 8 mhz.

    Ha her ihtimale karşı yine watchdog kullanabilirsin. Watchdog 128khz lik ayrı bir osilatör ile çalışır, yani cpu clock dursa bile çalışmaya devam eder.
  • Cevabın için teşekkürler
    watchdog ayrı bir osilatör ile çalıştığını öğrendiğim iyi oldu bu benim sorunumu şimdilik çözecek gibi
    devrede millis ile kontrollerim var 1000ms de bir artan değişkenlerle 0 ile 5 dakikalık zaman dilimini işliyorum ve geçen zaman diliminde bazı işlemleri yapıyor, hem Dahili osc kullanamam için bootloader de sanırım bazı ayarları kapatmam veya açmam gerek . şimdilik watchdog denemem gereken en mantıklı çözüm.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook

Tagged

Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.