การใช้งาน WatchDog timer
 
   
  WatchDog timer  
 
  • มีหน้าที่รีเซ็ทไมโครคอนโทรลเลอร์
  • มี free running oscillator แบบ RC แยกอิสระจากสัญญาณนาฬิกาของระบบ ทำให้ทำงานอย่างต่อเนื่องแม้อยู่ใน sleep mode
  • เมื่อสั่งให้ WatchDog timer ทำงานแล้ว WatchDog timer จะเริ่มนับค่าเวลาจนถึงที่ตั้งไว้ แล้วจะส่งสัญญาณไปรีเซ็ท MCU ฉะนั้น MCU จะต้องเคลียร์ค่าใน WatchDog ตลอดเวลา
 
     
  การตั้งค่าการใช้งาน WatchDog timer    
  สำหรับ Complier ใน Preprocessor #fuse ให้ใส ่WDT เพื่อให้ WatchDog ทำงาน  
  #fuses XT,PUT,BROWNOUT,MCLR,WDT,NOPROTECT,NOLVP  
     
  ฟังก์ขั่นที่สำคัญ  
 
  setup_wdt (mode) การกำหนดระยะเวลาให้กับ WatchDog timer
  For PCB/PCM parts:  
  WDT_18MS  
  WDT_36MS  
  WDT_72MS  
  WDT_144MS  
  WDT_288MS  
  WDT_576MS  
  WDT_1152MS  
  WDT_2304MS  
  For PIC18 parts:  
 

WDT_ON, WDT_OFF

 
     
     
  restart_wdt() กำหนดให้ WatchDog timer เริ่มนับใหม่ (Clear Watch dog)
     
   
การตรวจสอบเงื่อนไขเมื่อ MCU ถูกรีเซ็ท
     
  value = restart_cause() ฟังก์ขั่นที่ใช้ตรวจสอบเหมือน MCU ถูกรีเซ็ท
 

WDT_FROM_SLEEP
WDT_TIMEOUT
MCLR_FROM_SLEEP
NORMAL_POWER_UP

 
 
     
   
  - การทดสอบการทำงานของ WATCHDOG โดยให้แสดงผ่านทาง RS232 (soft ware TX=RA0,RX=RA1)
 
     
     
  WDTDEMO.C  
 
//Watchdog timer Demo

//#include <16F628.h>
#include <16F648A.h> #use delay(clock=4000000) #fuses XT,PUT,BROWNOUT,MCLR,WDT,NOPROTECT,NOLVP #define TxD PIN_A0 #define RxD PIN_A1 #use rs232(baud=9600, xmit=TxD,rcv=RxD) void main(void) { int c,done; switch(restart_cause()) { case WDT_FROM_SLEEP: printf("WAKEUP form sleep\r\n"); break; case WDT_TIMEOUT: printf("Watchdog Reset!\r\n"); break; case NORMAL_POWER_UP: printf("Normal power up!\r\n"); break; default: printf("Reset!\r\n"); //27 } printf("*** Watchdog Timer ***\r\n"); printf("Press h goto Halt\r\n"); printf("Press s goto Sleep mode\r\n"); setup_wdt(WDT_2304MS); done=0; while(!done) { if(kbhit()) { c =getc(); //printf("%c",c); switch(c) { case 's': done=1; break; case 'h': printf("Halt!\r\n"); while(1); break; } } restart_wdt(); //Clear Watch Dog } printf("sleep\r\n"); }
 
 
     
  เมื่อโปรแกรมเริ่มทำงาน  
 
*** Watchdog Timer  ***
Press h goto Halt
Press s goto Sleep mode 
 
     
  - ทดสอบโดยกดตัวอักษร h เพื่อให้โปรแกรมวนลูป (Hang)  
 
Halt!
Watchdog Reset!
*** Watchdog Timer  ***
Press h goto Halt
Press s goto Sleep mode
 
     
  - ทดสอบโดยกดตัวอักษร sเพื่อให้ไมโครคอนโทรลเลอร์เข้าสู่ Sleep mode  
 
sleep
WAKEUP form sleep
*** Watchdog Timer ***
Press h goto Halt
Press s goto Sleep mode
 
     
  - เมื่อปิดแหล่งจ่ายไฟ แล้วเปิดขึ้นมาใหม่  
 
Normal  power up!
*** Watchdog Timer *** Press h goto Halt Press s goto Sleep mode