Watchdog Timer là gì và hướng dẫn sử dụng Watchdog Timer cho Arduino (How to use Watchdog Timer);
Mesenco giới thiệu về Watchdog Timer và tầm quan trọng của nó làm thế nào để cấu hình watchdog timer cho arduino.
Có một vài ví dụ cụ thể để bạn dễ hiểu hơn về cách cấu hình và sử dụng;
Chúng ta cùng đi tìm hiểu nhé

Watchdog timer là gì
Hầu hết vi điều khiển PIC, Arduino (AVR) đều có bộ dao động riêng, (độc lập với bộ dao động của hệ thống) dành riêng cho Watchdog.
Điều này rất hay cụ thể bởi lý do sau:
1/ Không phải chia nhiều (bộ dao động watchdog timer của PIC là khoảng 8ms, có thể dùng các bộ Prescaler để giảm clk watchdog).
AVR: có một bộ dao động độc lập với tốc độ 1Mhz. Đây là giá trị cụ thể tại VCC=5V.
2. Watchdog hoạt động được ở cả ở chế độ “ngủ”. Vì tại chế độ ngủ này, CLK của hệ thống ngừng hoạt động.
3. Trong chế độ vừa ngủ vừa watchdog enable, một số vđk thiết kế là: Đang ngủ —> Bị Watchdog timer —> Nó không khởi động lại mà là thức MCU thức dậy.

Vậy chúng ta có thể hiểu đơn giản là watchdog timer dùng để reset nếu bị lỗi phần mềm:
- Do người lập trình,
- Do vi điều khiển bị treo do nhiễu tác động vài nguồn hay nhiễu kiểu điện từ trường…. cường độ cao xông thẳng vào chip;
Từ đó watchdog timer được sử dụng để fix lỗi các công đoạn trên;
Watchdog Timer làm việc như thế nào
Hầu hết các chương trình thường có một vòng lặp, mà nó liên tục đi qua thực hiện các chức năng khác nhau.
Watchdog Timer được nạp một giá trị ban đầu lớn hơn thời gian trễ của toàn bộ chương trình, trường hợp xấu nhất gặp vòng lặp vô hạn, dùng watchdog timer để thoát khỏi vòng lặp vô han ( hay vòng lặp chết);
Nếu xảy ra lỗi và chương trình chính không quay trở lại để đặt lại bộ hẹn giờ, trước khi nó đếm ngược về 0, một ngắt được tạo ra để đặt lại bộ xử lý;
Quy trình hoạt động
Cơ quan giám sát khởi động lại

Cơ quan giám sát một giai đoạn

Cơ quan giám sát nhiều tầng

Sử dụng Watchdog Timer cho Arduino
Bước 1: Cần thêm thư viện sau:
#include <avr/wdt.h>
Để sử dụng watchdog timer cho arduino cần thêm thư viện đó ;
Bước 2: Cho phép hoạt động và không cho phép hoạt động Watchdog timer;
Cho phép Watchdog timer hoạt động:
wdt_enable(WDT Reset Timer);
Ví dụ:
wdt_enable(WDTO_5S);
Watchdog timer có thể cho phép cài đặt thời gian khác nhau, Thời gian thiết lập phải lớn hơn thời gian cần thiết cho vòng lặp chương trình sẽ quay trở lại,
Ở vi điều khiển Arduino (AVR): Tối đa là 8s còn min là 15ms có thể cài đặt;
Dưới đây là bảng Watchdog timer cài đặt:

- Không cho phép Watchdog timer hoạt động;
wdt_reset();
chức năng reset vòng lặp để cài đặt lại giá trị về 0 để lặp lại từ đầu;
Ví dụ:
#include <avr/wdt.h>
void setup(){
//watchdog timer với 2s
wdt_enable(WDTO_2S);
}
void loop(){
// toàn bộ chương trình chạy
wdt_reset(); // thực hiện reset bộ đếm về 0;
}
Một số ví dụ dùng watchdog timer cho arduino để tiết kiệm năng lượng và đánh thức vi điều khiển;
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "LowPower.h"
RF24 radio(9,10);
const uint64_t pipe = 0xF0F0F0F0E1LL;
void setup() {
//Setup Watchdog Timer with 8 Seconds Reset
wdt_enable(WDTO_8S);
//Setup Wireless nRF24L01 Radio
radio.begin();
radio.setRetries(15,15);
radio.setPayloadSize(30);
radio.setPALevel(RF24_PA_MAX);
radio.setDataRate(RF24_250KBPS);
radio.openWritingPipe(pipe);
radio.stopListening();
}
void loop() {
double Temperature = ((5.0/1024.0) * analogRead(A0)) * 100;
radio.powerUp();
delay(5);
radio.write(Temperature,sizeof(double));
//Turn off Radio
radio.powerDown();
// Set sleep to full power down. Only external interrupts or
// the watchdog timer wake the CPU after 7 Seconds
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
}
Cảm ơn mọi người đã theo dõi bài viết Watchdog timer là gì? Hướng dẫn sử dụng Watchdog cho Adruino. Nếu có bất kì tắc mắc hay hỏi đáp gì vui lòng liên hệ qua email: info@mesenco.com
Công ty TNHH MESENCO
Chuyên cung cấp và lắp đặt các sản phẩm : Công tắc, Ổ cắm, Đèn Led, Camera giám sát, Pin năng lượng mặt trời, Thiết bị khách sạn,… cho các dự án, chung cư,khách sạn,TBA,..
HOTLINE : 098 588 2002( Mr Vũ)
Email : info@mesenco.com