Watchdog timer là gì

Ở bài này, Mình 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;

Vậy Watchdog Timer là cái gì,

Làm thế nào để cấu hình watchdog timer;

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;

Nào chúng ta cùng tìm hiểu;

I.Watchdog timer là cái 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.

Bạn đang xem: Watchdog timer là gì

Điều này rất hay cụ thể bới lý do sau:

1/ Không phải chia nhiều (ví dụ bộ dao động watchdog timer của PIC khoản 8ms, có thể dùng các bộ presscale để 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.

Xem thêm: Hack Game Vĩnh Hằng Kỷ Nguyên Lậu Trung Quốc Full Vàng, Kim Cương

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 anable, 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 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ừ đó ta sử dụng watchdog timer để fix lỗi các công đoạn trên;

II. 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ý;

III. Sử dụng Watchdog Timer cho Arduino:

Bước 1: Cần add thư viên sau:

#include

Để sử dụng watchdog timer cho arduino cần adđ thư viện đó ;

Bước 2: Cho phép và không cho phép Watchdog timer;

Cho phép Watchdog timer hoạt động:

Cú pháp: wdt_enable(WDT Reset Timer);

Ví dụ:

wdt_enable(WDTO_4S);

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;

THRESHOLD VALUECONSTANT NAMESUPPORTED ON
15 msWDTO_15MSATMega 8, 168, 328, 1280, 2560
30 msWDTO_30MSATMega 8, 168, 328, 1280, 2560
60 msWDTO_60MSATMega 8, 168, 328, 1280, 2560
120 msWDTO_120MSATMega 8, 168, 328, 1280, 2560
250 msWDTO_250MSATMega 8, 168, 328, 1280, 2560
500 msWDTO_500MSATMega 8, 168, 328, 1280, 2560
1 sWDTO_1SATMega 8, 168, 328, 1280, 2560
2 sWDTO_2SATMega 8, 168, 328, 1280, 2560
4 sWDTO_4SATMega 168, 328, 1280, 2560
8 sWDTO_8SATMega 168, 328, 1280, 2560
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;

Example:

#include 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;}Dưới đây là một ví dụ dùng watchdog timer cho arduino để tiết kiệm năng lượng, đánh thức vi điều khiển;

#include #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 Resetwdt_enable(WDTO_8S);//Setup Wireless nRF24L01 Radioradio.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 Radioradio.powerDown();// Set sleep to full power down. Only external interrupts or// the watchdog timer wake the CPU after 8 Secondsset_sleep_mode(SLEEP_MODE_PWR_DOWN);}

Nổ hũ club online uy tín