|
|
|
|
|
|
|
|
|
|
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 |
|
|
|
|
|
|
|