Watchdog timer là gì ?

Watchdog timer là bộ đếm thời gian (Giống như Timer)  hoạt động liên tục sau một khoảng thời gian được định trước nếu bộ đếm không được dừng hoặc refresh nó sẽ kích hoạt tác vụ đã được định sẵn (Ví dụ như Reset vi điều khiển khi bị treo  do lỗi lập trình hay bị nhiễu, hay thực hiện tắt hoặc phát tín hiệu cảnh báo cho hệ thống). 

watch-dog-timer-pic

Đối với vi điều khiển PIC 16F877A  watchdog timer được thực hiện chỉ với 2 lệnh :

setup_wdt (mode), mode : WDT_18MS, WDT_36MS, WDT_72MS, WDT_144MS,WDT_288MS, WDT_576MS, WDT_1152MS, WDT_2304MS cài đặt chế độ watchdog timer và thời gian để thực hiện watchdog timer.

-  restart_wdt(); Reset lại watchdog timer thường để trong chương trình chính mục đích reset thời gian  watchdog timer  không cho watchdog timer tràn

Ngoài ra trong ví dụ này còn sử dụng lệnh : restart_cause()  giá trị trả về là  : WDT_FROM_SLEEP, WDT_TIMEOUT, MCLR_FROM_SLEEP and NORMAL_POWER_UP

Trả về nguyên nhân làm cho vi điều khiển bị reset.

 Trong bài tập này các bạn thực tập watchdog timer với vi điều khiển Pic 16F877A khi bình thường thì nhấp nháy LED1 PIN_RB1, nếu watchdog timer sảy ra thì nháy LED0 PIN_RB0 các bạn có thể tham khảo bài : các lệnh xuất nhập I/O port cho vi điều khiển PIC.

setup_wdt(WDT_2304MS);  // bật chế độ watchdog timer  2304ms

while(TRUE)
{

restart_wdt();                // Reset watchdog timer  
if(flag_wdt) {
Output_low(PIN_B0);
delay_ms(1000);
Output_high(PIN_B0);
delay_ms(1000);
}

if(flag_power_up) {
for (i=0;i<100;i++){
Output_low(PIN_B1);
delay_ms(200);
Output_high(PIN_B1);
delay_ms(200);
}
}

}

Trong vòng lặp for LED 1 tắt sáng 6 lần 6x400=2400ms >2304ms  thì watchdog timer xảy ra và LED0 sáng. Đây chỉ là một ví dụ cơ bản dùng watchdog timer để thoát ra khỏi vòng lặp. Trong thực tế chúng ta cũng sẽ gặp những trường hợp tương tự khi bị vòng lặp vô tận và treo vi điều khiển, khi bị nhiễu công nghiệp làm cho các hàm, các biến bị sai chỉ số cũng dẫn tới treo vi điều khiển thì Watchdog timer là một giải pháp vô cùng hữu dụng.

Download bài tập : Watchdog timer vi điều khiển PIC

Xem video mô phỏng bài tập tại đây :

Nếu bạn thấy hay hãy đăng ký , chia sẻ giúp tôi nhé chúng tôi sẽ thường xuyên cập nhật kiến thức mới về vi điều khiển PIC tại đây