ต้องการ เพิ่มเวลาการ Clear Watch dog

  • 8 Replies
  • 3131 Views
*

Offline ROM

  • ***
  • 167
    • View Profile
ใช้ MCU ของ ATMEL เบอร์ AT89S52 ความถี่ 11.059MHz อยู่ครับ มีปัญหาคือ
ตอนนี้จะใช้ Watchdog แต่มันมาค่อนข้างเร็วครับ คืออ่านตามคู่มือแล้วว่าทุกๆ 8191 machine cycles.
(ซึ่งคำนวณแล้วประมาณ 8.9 ms ) จะเกิดการ Reset หากไม่ทำการ Clear watch dog ในเวลาดังกล่าว
โดยอ้างอิงตามเอกสารของ MCU นี้ ที่ได้ี่คัดลอกมาให้ดูครับ

Using the WDT
To enable the WDT, a user must write 01EH and 0E1H in
sequence to the WDTRST register (SFR location 0A6H).
When the WDT is enabled, the user needs to service it by
writing 01EH and 0E1H to WDTRST to avoid a WDT overflow.
The 13-bit counter overflows when it reaches 8191
(1FFFH), and this will reset the device. When the WDT is
enabled, it will increment every machine cycle while the
oscillator is running. This means the user must reset the
WDT at least every 8191 machine cycles. To reset the
WDT the user must write 01EH and 0E1H to WDTRST.
WDTRST is a write-only register. The WDT counter cannot
be read or written. When WDT overflows, it will generate an
output RESET pulse at the RST pin. The RESET pulse
duration is 96xTOSC, where TOSC=1/FOSC. To make the
best use of the WDT, it should be serviced in those sections
of code that will periodically be executed within the
time required to prevent a WDT reset.

หากต้องการให้มันเกิดการ Reset จาก Watch dog ช้าลงได้ไหมครับ ทำยังไงได้บ้างครับ.?
เพราะใน main program จะทำการมา Clear Watch dog ได้ในเวลาััประมาณ 200 ms. ครับ
และไม่อยากไปแก้ใน subroutine อื่นๆนะครับ

*

Offline JENG

  • *****
  • 808
  • รู้ทุกเรื่องเว้นเรื่องจริง
    • View Profile
สามารถติดตาม electoday ได้ที่

Facebook
www.facebook.com/groups/coopmicro

Google+
https://plus.google.com/communities/103482067769375459277

☺☺☺ความรู้ และความฉลาด ไม่ใช่สิ่งเดียวกัน จะมีประโยชน์อะไร ถ้าฉลาดแต่อยู่ในกะลา☺☺☺

*

Offline ROM

  • ***
  • 167
    • View Profile
ขอบคุณท่าน JENG มากครับที่แนะนำ แต่ราคามันใกล้ๆจะเท่าๆกับ MCU (89S52 ) เลยครับ http://www.es.co.th/detail.asp?Prod=06501686  :'(
มี IC หรือ วงจรที่ถูกกว่านี้ไหมครับ ?
แสดงว่า 89S52 นี้ไม่มีวิธีที่จะยืดเวลาของการ Watchdog นี้หรือครับ ? ทำไมทำมาซะเร็วขนาดนี้นะ  :o

*

Offline JENG

  • *****
  • 808
  • รู้ทุกเรื่องเว้นเรื่องจริง
    • View Profile
ประกาศเป็น function แล้วแทรกลงไปใน flow code ครับ มันไม่ได้ยาก ถ้าไม่อยากเสียตัง  ;D
หรือไปใช้ PIC แทนราคาแพงกว่าไม่กี่บาท ได้อะไรเมพๆมาอีกเยอะ
สามารถติดตาม electoday ได้ที่

Facebook
www.facebook.com/groups/coopmicro

Google+
https://plus.google.com/communities/103482067769375459277

☺☺☺ความรู้ และความฉลาด ไม่ใช่สิ่งเดียวกัน จะมีประโยชน์อะไร ถ้าฉลาดแต่อยู่ในกะลา☺☺☺

*

Offline ROM

  • ***
  • 167
    • View Profile
ประกาศเป็น function แล้วแทรกลงไปใน flow code ครับ มันไม่ได้ยาก ถ้าไม่อยากเสียตัง  ;D
หรือไปใช้ PIC แทนราคาแพงกว่าไม่กี่บาท ได้อะไรเมพๆมาอีกเยอะ

ขอขอบคุณท่าน Jeng อีกครั้งครับที่ช่วยเหลือ การเปลี่ยน MCU ไปเป็น PIC หรือ AVR ตอนนี้คงยากสักหน่อยครับ
เพราะมี Hardware และ Souce code(ที่เขียนด้วย C และ ASM) อื่นๆเข้ามาเกี่ยวข้องมากเกินกว่าจะย้ายไปได้ครับ
เลยอยากได้วิธีง่ายๆ ที่จะทำให้ Watchdog ทำงานได้กับ MCU นี้
เพียงแต่มีิเงื่อนไขในการ Trig watchdog ในรอบของ main ที่ประมาณ 200 ms. เท่านั้น
ถ้าไม่มีวิธียืดการ Clear watchdog ของ AT89S52 ออก ก็อาจต้องไปไล่แก้ใน Source code อย่างที่ท่านว่า(ซึ่งไม่ค่อยอยากยุ่งมากนักครับ)

*

Offline MicroX

  • *****
  • 219
    • View Profile
สมัยก่อนตอนที่เล่น Z80 ผมเองก็ใช้ IC NE555 มาทำเป็น watchdog เดี๋ยวนี้ MCU ส่วนใหญ่ก็มักจะมี watchdog มาให้
แต่ก็จะอึดอัดที่ระยะเวลามันสั้นไปหน่อย แถมยังต้องเสีย timer ไปอีก ลองดู NE555 แล้วกันครับถูกดี


https://markto1970a.thruhere.net.nz/Saved_Pages/General%20Info/A%20Simple%20555%20Watchdog%20Timer.htm



http://www.playwitharduino.com/?p=291&lang=en

ดูเพิ่มเติมยังมีอีกเยอะ keyword: 555 watchdog timer





*

Offline ROM

  • ***
  • 167
    • View Profile
ขอบคุณท่าน MicroX มากครับ ไม่น่าเชื่อว่า IC หัวเราะได้ (555) จะราคาถูกจริงๆและเอนกประสงค์สมชื่อ จึงเป็นตัวเลือกที่น่าสนใจมากครับ
เพราะไม่ต้องไปไล่แก้ Source code ในส่วนต่างๆให้วุ่นวายมากนัก จึงขอขอบคุณทั้งท่าน Jeng และท่าน MicroX อีกครั้งครับ
จริงๆแล้ว ก็ได้ดู AT89S8253 อยู่เหมือนกันนะครับ ซึ่งจะแก้ปัญหาทั้งหลายได้เลย เพราะมี Watchdog ที่มี Prescaler แล้วซึ่งได้ถึงประมาณ 2 วินาที
แต่ราคาจะแพงกว่าอยู่เยอะพอสมควร และอยากลองหาทางเลือกอื่นๆเผื่อเป็นแนวทางในการแก้ไขปัญหาที่เหมาะสมกว่า การขี่ช้างจับตั๊กแตนครับ

จริงๆ ก็พอมีทางนะครับ ที่จะทำการยืดการ Reset ของ Watchdog 89S52 ออกไปให้นานขึ้น โดยไม่ต้องเพิ่ม Hardware ใดๆนะครับ
แต่คงจะต้องอาศัยและใช้ Resource อย่าง Timer ของ Hardware 89S52 เข้าช่วยด้วยครับ Idea ก็คือเพื่อให้ทำหน้าที่ให้คล้ายๆเป็น Prescaler นั่นเองครับ
อย่างไรก็ตาม การใช้ Hardware ข้างนอก อย่างที่หลายๆท่านแนะนำมา ก็คงน่าจะดีที่สุดครับ