สารบัญ:

Arduino Hang Guardian - บทช่วยสอนตัวจับเวลา Arduino Watchdog: 6 ขั้นตอน
Arduino Hang Guardian - บทช่วยสอนตัวจับเวลา Arduino Watchdog: 6 ขั้นตอน

วีดีโอ: Arduino Hang Guardian - บทช่วยสอนตัวจับเวลา Arduino Watchdog: 6 ขั้นตอน

วีดีโอ: Arduino Hang Guardian - บทช่วยสอนตัวจับเวลา Arduino Watchdog: 6 ขั้นตอน
วีดีโอ: Watchdog Timer 🔴 ATmega328P Programming #13 AVR microcontroller with Atmel Studio 2024, พฤศจิกายน
Anonim
Image
Image

สวัสดีทุกคน, มันเกิดขึ้นกับพวกเราทุกคน คุณสร้างโปรเจ็กต์ เชื่อมต่อเซ็นเซอร์ทั้งหมดอย่างกระตือรือร้น และในทันใด Arduino ก็หยุดทำงานและจะไม่มีการประมวลผลอินพุต

“เกิดอะไรขึ้น” คุณจะถามและเริ่มขุดโค้ดของคุณ เพียงเพื่อจะรู้ว่าคุณติดอยู่ในลูปที่ไม่มีที่สิ้นสุด ขอบคุณพระเจ้าที่ Arduino อยู่บนม้านั่งของคุณและไม่ได้อยู่ในสถานที่ห่างไกล

วันนี้ เราจะมาดูวิธีที่เราสามารถใช้ตัวจับเวลาการเฝ้าระวังบน Arduino เพื่อป้องกันไม่ให้สิ่งนี้เกิดขึ้น

ขั้นตอนที่ 1: ตัวจับเวลา Watchdog นี้คืออะไร?

วิธีเปิดใช้งานตัวจับเวลา Watchdog?
วิธีเปิดใช้งานตัวจับเวลา Watchdog?

ตัวจับเวลาจ้องจับผิดของ Arduino ตามชื่อหมายถึงเป็นตัวจับเวลาที่ทำงานแยกจาก CPU หลักบนบอร์ด ตัวจับเวลานี้สามารถใช้เพื่อตรวจสอบสถานะของบอร์ดเป็นระยะๆ และในสถานการณ์ที่บอร์ดติดอยู่ในลูปของซอฟต์แวร์หรือติดขัดเนื่องจากความล้มเหลวของฮาร์ดแวร์ ตัวจับเวลาจ้องจับผิดสามารถรีเซ็ต Arduino และเริ่มต้นใหม่ทั้งหมดได้

โดยค่าเริ่มต้นเมื่อไม่ได้ใช้งานตัวจับเวลานี้จะถูกปิดใช้งานในทุกโครงการและเฉพาะเมื่อเราเปิดใช้งานเท่านั้น เราจำเป็นต้องตรวจสอบให้แน่ใจว่าได้บอกเป็นระยะว่าจะไม่รีเซ็ตบอร์ดของเราหากยังคงทำงานตามที่คาดไว้

เพื่อให้สามารถใช้ตัวจับเวลาจ้องจับผิด อันดับแรกเราต้องรวมไฟล์ avr/wdt.h ไว้ในร่าง Arduino ของเรา นี่คือไลบรารีมาตรฐานที่มีการดำเนินการเฝ้าระวัง

ขั้นตอนที่ 2: วิธีเปิดใช้งาน Watchdog Timer?

วิธีเปิดใช้งานตัวจับเวลา Watchdog?
วิธีเปิดใช้งานตัวจับเวลา Watchdog?
วิธีเปิดใช้งานตัวจับเวลา Watchdog?
วิธีเปิดใช้งานตัวจับเวลา Watchdog?

ในการเปิดใช้งานตัวจับเวลา เราใช้ฟังก์ชัน "wdt_enable" ซึ่งเราต้องผ่านช่วงเกณฑ์ที่จะรีเซ็ตบอร์ด ขึ้นอยู่กับกรณีการใช้งานของเรา ค่านี้สามารถอยู่ที่ใดก็ได้ตั้งแต่ 15 มิลลิวินาทีจนถึง 8 วินาทีในการตั้งค่าที่กำหนดไว้ล่วงหน้าซึ่งมีอยู่ในไลบรารี watchdog

THRESHOLD - ชื่อคงที่

15 ms WDTO_15MS 30 ms WDTO_30MS 60 ms WDTO_60MS 120 ms WDTO_120MS 250 ms WDTO_250MS 500 ms WDTO_500MS 1 วินาที WDTO_1S 2 วินาที WDTO_2S 4 วินาที WDTO_4S 8 วินาที WDTO_8S

ขั้นตอนที่ 3: ทำให้โปรแกรมของคุณทำงานต่อไป

ให้โปรแกรมของคุณทำงานต่อไป
ให้โปรแกรมของคุณทำงานต่อไป

ขณะนี้ เมื่อเปิดใช้งานตัวจับเวลา เพื่อป้องกันไม่ให้รีเซ็ต Arduino ของเรา เราจำเป็นต้องเรียกใช้ฟังก์ชัน "wdt_reset" เป็นระยะ เพื่อรีเซ็ตตัวจับเวลาจ้องจับผิดก่อนที่ช่วงเกณฑ์จะหมดอายุ

เมื่อเลือกช่วงเวลาการรีเซ็ต สิ่งสำคัญคือเราต้องคำนึงถึงการทำงานที่ใช้เวลานาน เช่น การอ่านหรือส่งข้อมูล หรือการเชื่อมต่อกับเซ็นเซอร์ภายนอก เกณฑ์การรีเซ็ตควรมากกว่าเวลาเหล่านี้อย่างน้อยหนึ่งเท่าครึ่งเพื่อป้องกันการรีเซ็ตโดยไม่ได้ตั้งใจ

ขั้นตอนที่ 4: ตัวอย่างการใช้งาน

ตัวอย่างการใช้งาน
ตัวอย่างการใช้งาน
ตัวอย่างการใช้งาน
ตัวอย่างการใช้งาน
ตัวอย่างการใช้งาน
ตัวอย่างการใช้งาน

ในโปรแกรมตัวอย่างที่คุณสามารถดาวน์โหลดได้ที่นี่ ก่อนอื่นเราจะตั้งค่าตัวจับเวลาจ้องจับผิดด้วยช่วงเวลาการรีเซ็ต 4 วินาที จากนั้นเพื่อให้รู้ว่าเราอยู่ในฟังก์ชันการตั้งค่า เรากะพริบไฟ LED 3 ครั้งอย่างรวดเร็ว จากนั้นในลูปหลัก เราจะรีเซ็ตตัวจับเวลาก่อน ให้ไฟ LED สว่างขึ้นด้วยระยะห่างที่ยาวขึ้นเรื่อยๆ แล้วจึงปิด วนรอบถัดไปจะรีเซ็ตตัวจับเวลาอีกครั้งจนกระทั่งเวลาสว่างขึ้นนานกว่า 4 วินาที

เมื่อสิ่งนี้เกิดขึ้น ตัวจับเวลาจ้องจับผิดจะรีเซ็ตบอร์ดและดำเนินการตั้งค่าอีกครั้ง

ขั้นตอนที่ 5: ปัญหาตัวจับเวลา Watchdog

ปัญหาหนึ่งที่อาจเกิดขึ้นกับตัวจับเวลาจ้องจับผิด ขึ้นอยู่กับ bootloader ของ Arduino ของคุณคือหากค่าตัวจับเวลาจ้องจับผิดต่ำเกินไปและ bootloader ไม่รีเซ็ตตัวจับเวลาเมื่ออัปโหลดรหัสใหม่ คุณอาจลงเอยกับบอร์ด Arduino ของคุณในลักษณะที่ มันจะติดอยู่ในระยะบูตเสมอ bootloader จะพยายามเริ่มต้น แต่ตัวจับเวลาจะทำการรีเซ็ตบอร์ดต่อไป ไม่ยอมให้มันเริ่มทำงานอย่างถูกต้อง เพื่อป้องกันปัญหาเช่นนี้ โปรดใช้ช่วงเวลาเกณฑ์ 2 วินาทีขึ้นไปเสมอ

ขั้นตอนที่ 6: สนุก

สนุก
สนุก

หากคุณมีตัวอย่างที่ที่คุณใช้ตัวจับเวลาเฝ้าระวังในโครงการจริง แจ้งให้เราทราบในความคิดเห็น อย่าลืมชอบวิดีโอและอย่าลืมสมัครรับข้อมูล

ไชโยและขอบคุณสำหรับการอ่าน/ดู!

แนะนำ: