Arduino dan watchdog timer

Pernahkah Anda mengalami situasi ketika perangkat berbasis Arduino Anda hang?

Ada banyak alasan untuk ini mungkin ada induksi dari input atau output modul atau mungkin karena sensor rusak. kalau perangkat dekat dengan kita mungkin tinggal direstart manual saja bisa berjalan lagi, Tetapi bagaimana jika perangkat Anda tidak mudah diakses  atau berfungsi untuk waktu yang lama tanpa pengawasan manusia? Situasi semacam itu harus dicegah salah satunya dengan watchdog timer. watchdog timer ini berjalan diluar procecor (koreksi jika saya salah) dengan watchdog timer maka dimungkinkan sistem akan restart otomatis jika tidak dalam waktu yang ditentukan tidak ada proses yang berhenti.

Quoting ATMega Datasheet:

ATmega48/88/168/328 has an Enhanced Watchdog Timer (WDT). The WDT is a timer counting
cycles of a separate on-chip 128 kHz oscillator. The WDT gives an interrupt or a system reset
when the counter reaches a given time-out value. In normal operation mode, it is required that
the system uses the WDR – Watchdog Timer Reset – instruction to restart the counter before the
time-out value is reached. If the system doesn’t restart the counter, an interrupt or system reset
will be issued.

yang kira – kira artinya ini (saya translate dari google)

ATmega48 / 88/168/328 memiliki Enhanced Watchdog Timer (WDT). WDT adalah penghitung waktu
siklus osilator on-chip terpisah 128 kHz. WDT memberikan interupsi atau pengaturan ulang sistem
ketika penghitung mencapai nilai batas waktu yang diberikan. Dalam mode operasi normal, diperlukan itu
sistem menggunakan WDR – Reset Timer Watchdog – instruksi untuk me-restart penghitung sebelum
nilai habis waktu tercapai. Jika sistem tidak memulai ulang penghitung, penghentian atau pengaturan ulang sistem
akan di isu-kan.

sebenarnya dalam implementasinya cukup mudah kita harus mengambil librarynya dahulu kalau dalam script cukup ketikan perintah dibawah ini dibagian atas skript

#include <avr/wdt.h>

selanjutnya saat proses setup maka tambahkan

wdt_enable(WDTO_2S);

perintah ini berfungsi untuk memeritahkan arduino reset dalam 2 detik. aduh berarti dalam 2 detik arduino akan reset sendiri ya? bagaimana kalau proses lebih dari 2 detik itu akan memotong proses dalam arduino dan mengakibatkan program yang kita pasang akan jadi gak berjalan normal. tapi tenang aja itu adalah batasan waktu jika ada error dalam proses memang sih kita jadi rada ribet masang reset timernya setiap proses yang kita rasa sering terjadi error atau proses yang lebih dari 2 detik. bagaimana caranya? sebenernya cukup simple kita hanya menyisipkan script

wdt_reset();

 

dalam setiap prosesnya dengan logika kalau proses akan lebih dari 2 detik maka timer akan direset ke 0 lagi sehingga batasan restart akan diulang lagi sehingga proses tidak akan terganggu. namun bagaimana kalau dalam 1 proses akan lebih dari 2 detik ? oh tenang wdt tidak sekejam itu kok kita bisa merubah timernya pada saat setup sesui keinginan kita. berikut adalah table untuk timernya :

Threshold value Constant name Supported on
15 ms WDTO_15MS ATMega 8, 168, 328, 1280, 2560
30 ms WDTO_30MS ATMega 8, 168, 328, 1280, 2560
60 ms WDTO_60MS ATMega 8, 168, 328, 1280, 2560
120 ms WDTO_120MS ATMega 8, 168, 328, 1280, 2560
250 ms WDTO_250MS ATMega 8, 168, 328, 1280, 2560
500 ms WDTO_500MS ATMega 8, 168, 328, 1280, 2560
1 s WDTO_1S ATMega 8, 168, 328, 1280, 2560
2 s WDTO_2S ATMega 8, 168, 328, 1280, 2560
4 s WDTO_4S ATMega 168, 328, 1280, 2560
8 s WDTO_8S ATMega 168, 328, 1280, 2560

 

Leave a Reply

Your email address will not be published. Required fields are marked *