Atmega328P Datasheet 15. SCRST - System Control and Reset

Started by tha, January 05, 2018, 08:19:38 AM

Previous topic - Next topic

tha

ใน Interrupt mode, the WDT ให้ an interrupt เมื่อ the timer หมดเวลาลง. interrupt สามารถถูกใช้เพื่อปลุก the device จาก sleep-modes, และเป็นดัง a general system timer ได้อีกด้วย. ตัวอย่างหนึ่งคือเพื่อจำกัดเวลาสูงสุดที่ยอมได้สำหรับการดำเนินงานบางอย่าง, ให้ an interrupt เมื่อการทำงานได้รันยาวนานกว่าที่คาดไว้. In System Reset mode, the WDT ให้ a reset เมื่อ the timer หมดเวลาลง.  โดยปกติจะใช้เพื่อป้องกันไม่ให้ system hang-up(วางลง,แฮ๊ง) ในกรณีของ runaway code. โหมดที่สาม, Interrupt and System Reset mode, รวมสองโหมดก่อนหน้าโดยอันดับแรกให้ an interrupt และจากนั้นจึงสวิทช์ไปยัง System Reset mode. โหมดนี้จะช่วยให้สามารถปิดระบบได้อย่างปลอดภัยโดยการบันทึกพารามิเตอร์ที่สำคัญก่อนที่จะรีเซ็ตระบบ

tha

The Watchdog always on (WDTON) fuse, ถ้าโปรแกรม, จะฟอร์ซให้ the Watchdog Timer เป็น System Reset mode. ด้วย the fuse ที่โปรแกรม the System Reset mode bit (WDE) and Interrupt mode bit (WDIE) ถูกล็อคเป็น 1 และ 0 ตามลำดับ. เพื่อให้มั่นใจถึงความปลอดภัยของโปรแกรมยิ่งขึ้น, การปรับเปลี่ยนการตั้งค่า the Watchdog  ต้องเป็นไปตามลำดับเวลาที่กำหนด ลำดับสำหรับการเคลียร์ WDE และการเปลี่ยนการกำหนดค่าหมดเวลาเป็นดังต่อไปนี้ :

1. ในการดำเนินการเดียวกัน, เขียนลอจิก "1" ไปยัง the Watchdog change enable bit (WDCE) และ Watchdog System Reset Enable (WDE) ใน Watchdog Timer Control Register (WDTCSR.WDCE และ WDTCSR.WDE). ลอจิก "1" ต้องถูกเขียนไปยัง WDTCSR.WDE โดยไม่คำนึงถึงค่าก่อนหน้าของ the WDTCSR.WDE
2. ภายใน 4 clock cycles ถัดไป, เขียน the WDTCSR.WDE และกลุ่ม Watchdog prescaler bits group (WDTCSR.WDP) ตามที่ต้องการ, แต่ the
WDTCSR.WDCE ถูกเคลียร์ด้วย. นี้ต้องถูกทำใน one operation.

ปล. ยังไม่แน่ใจตรง but with the WDTCSR.WDCE cleared หมายถึงถูกเคลียร์โดยอัตโนมัติไปด้วยใช่หรือไม่


tha

ตัวอย่างต่อไปนี้แสดงฟังก์ชันสำหรับการปิด the Watchdog Timer. ตัวอย่างทึกทักเอาว่า interrupts ถูกควบคุม (เช่นโดยการปิดใช้งาน interrupts globally(โดยรวม)) ดังนั้นไม่มี interrupts จะเกิดขึ้นในระหว่างการปฏิบัติของฟังชั่นเหล่านี้.



หมายเหตุ: หาก Watchdog เปิดการใช้งานโดยไม่ตั้งใจตัวอย่างเช่นโดย a runaway pointer หรือ brown-out condition, the device จะถูกรีเซทและ the Watchdog Timer จะยังคง enabled. หาก the code ไม่ได้ set up ให้รับมือกับ the Watchdog, นี้อาจนำมาซึ่งการวนลูปอย่างไม่รู้จบของ timeout resets. เพื่อหลีกเลี่ยงปัญหานี้ ซอฟต์แวร์แอ็พพลิเคชันควรเคลียร์ the Watchdog System Reset Flag (WDRF) และ the WDE control bit ในการเริ่มต้นงานประจำแม้ว่า Watchdog ไม่ได้ใช้งาน

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการเปลี่ยนค่าการหมดเวลาของ the Watchdog Timer.



หมายเหตุ: The Watchdog Timer ควรถูกรีเซ็ทก่อนการเปลี่ยนของ the WDTCSR.WDP bits, เนื่องจากการเปลี่ยนแปลงใน the WDTCSR.WDP bits สามารถเป็นผลใน a time-out เมื่อสวิทช์ไปใช้ระยะเวลาการหมดเวลาที่สั้นลง (a shorter time-out period)

tha

15.9.1. MCU Status Register
ในการใช้ประโยชน์ the Reset Flags เพื่อระบุ a reset condition, ผู้ใช้ควรอ่านและจากนั้นรีเซ็ท the MCUSR ให้เร็วที่สุดเท่าที่จะเป็นไปได้ในโปรแกรม ถ้ารีจิสเตอร์ถูกเคลียร์ก่อนการรีเซ็ตอื่นเกิดขึ้น แหล่งรีเซ็ตสามารถถูกตรวจพบโดยการตรวจสอบ the Reset Flags.
เมื่อระบุที่อยู่ I/O Registers ราวกับเป็น data space โดยใช้ LD and ST instructions, การจัดให้มีระยะชดเชยต้องถูกใช้ เมื่อใช้ the I/O specific commands IN and OUT, ระยะ the offset ถูกลดลงไป 0x20, เป็นผลให้ an I/O address offset อยูภายใน 0x00 - 0x3F.



Bit 3 – WDRF: Watchdog System Reset Flag
บิทนี้ถูกเซ็ทถ้า a Watchdog System Reset เกิดขึ้น. บิทนี้ถูกรีเซ็ทโดย a Power-on Reset, หรือโดยการเขียน '0'ไปยังมัน.

Bit 2 – BORF: Brown-out Reset Flag
บิทนี้ถูกเซ็ทถ้า a Brown-out Reset เกิดขึ้น. บิทนี้ถูกรีเซ็ทโดย a Power-on Reset, หรือโดยการเขียน '0'ไปยังมัน.

Bit 1 – EXTRF: External Reset Flag
บิทนี้ถูกเซ็ทถ้า an External Reset เกิดขึ้น. บิทนี้ถูกรีเซ็ทโดย a Power-on Reset, หรือโดยการเขียน '0'ไปยังมัน.

Bit 0 – PORF: Power-on Reset Flag
บิทนี้ถูกเซ็ทถ้า a Power-onl Reset เกิดขึ้น. บิทนี้ถูกรีเซ็ทโดยการเขียน '0'ไปยังมันเพียงอย่างเดียวเท่านั้น.

ปล. หมู่นี้ตาไม่ค่อยดี ตาขวาพร่า ไปลอกตาก็ไม่ได้ ติดเป็นเบาหวาน เลยไม่ค่อยจะได้แปล

tha

อันนี้จบแล้วหรือยัง เลื่อนไปต้นๆก่อน จะได้ไม่ลืม เดี๋ยวดูดาต้าชีทอีกที

tha

   อันนี้ยังไม่จบนี่ นึกว่าจบเสียแล้ว เดี๋ยวจะแปลต่อ แต่ทำตัวอย่างเสียก่อนแล้ว เอาลงให้ดูก่อนเลยนะ เดี๋ยวจะลืม watchdog timer อันนี้ไม่ต้องเลือกติ๊กถูกที่ WDTON ใน FUSE BITS นะ(ดูในตาราง Table 15-1. Watchdog Timer Configuration) จะกลายเป็นเลือก system reset mode เพียงอย่างเดียวไป เราจะใช้การเซทบิทเอา ตามตัวอย่างในดาต้าชีทนั่นแหละ

  ตัวอย่างการใช้ watchdog timer ไฟก็กระพริบไปตามปกติ แต่พอเรากดสวิทช์ ทำงานฟังชั่นดีเลย์ watchdog ไม่รีเซทสักที่ พอเลยเวลา 2 วินาที watchdog ก็จะรีเซทระบบ เริ่มต้นการทำงานใหม่

  ตัวอย่างนี้ก็จะเหมือนกัน ทั้งการใช้ไลบรารี่กับไม่ใช้(เซทเป็นบิทเอา) ตัวที่ใช้ไลบรารี่ก็ลองไล่เช็คดูในไฟล์ wdt.h ใน C:\WinAVR-20100110\avr\include\avr ดู ก็จะเข้าใจมากขึ้น ตัวที่เซทเป็นบิทเอา ก็อ่านการทำงานของมันที่แปลๆนั่นแหละ

http://www.mediafire.com/file/3yeomtxd6kc1mwf/wdt.rar/file

http://www.mediafire.com/file/csyjd79sv4gol5n/wdt_1.rar/file

ปล. ท่านใดอยากจะมีสมาธิดีๆ ก็หัดนั่งสมาธินะ จะอ่านหนังสือได้ดี ใจไม่วอกแวกไปตามนิวรณ์ ๕ ลมหายใจก็จะลึกยาวละเอียด เป็นผลดีต่อสุขภาพ ไม่ค่อยเป็นหวัดเป็นไอ ง่ายๆเลย ลมหายใจเข้า "พุท" ลมหายใจออก "โธ" ประคองไป แรกๆก็จะยากหน่อยเพราะยังคิดมากอยู่ ก็จะดีขึ้นเรื่อยๆนะ ของอย่างนี้มันต้องใช้เวลา ค่อยเป็นค่อยไป ไม่ต้องเร่งรีบ

tha

15.9.2. WDTCSR – Watchdog Timer Control Register



Bit 7 – WDIF: Watchdog Interrupt Flag
บิทนี้จะเซทเมื่อการหมดเวลา (timeout) เกิดขึ้นใน Watchdog Timer และ Watchdog Timer นั้นถูกกำหนดไว้สำหรับ Interrupt ด้วย บิท WDIF จะถูกเคลียร์โดย hardware เมื่อปฏิบัติ the corresponding(ที่ตรงกัน) interrupt handling vector นั้น อีกทางเลือกหนึ่ง WDIF จะถูกเคลียร์โดยการเขียน "1" ไปยังมัน เมื่อ I-bit(Global Interrupt) ใน SREG และ WDIE ถูกเซท Watchdog Timeout Interrupt นั้นจะถูกปฏิบัติ

Bit 6 – WDIE: Watchdog Interrupt Enable
เมื่อบิทนี้ถูกเขียนให้เป็น "1" และ  I-bit(Global Interrupt) ใน Status Register ถูกเซท Watchdog Interrupt จะถูกเปิดใช้งาน ถ้า WDE ถูกเคลียร์ร่วมด้วยในการเซทครั้งนี้ Watchdog Timer จะอยู่ใน Interrupt Mode, และ corresponding(ที่ตรงกัน) interrupt จะถูกปฏิบัติ ถ้า timeout (หมดเวลา) ใน Watchdog Timer  เกิดขึ้น ถ้า WDE ถูกเซท Watchdog Timer จะอยู่ใน Interrupt and System Reset Mode. การ timeout ครั้งแรกใน Watchdog Timer จะเซท WDIF การปฏิบัติ corresponding interrupt vector จะเคลียร์ WDIE และ WDIF โดยอัตโนมัติโดย hardware (the Watchdog จะไปสู่โหมด System Reset Mode).

นี้จะเป็นประโยชน์สำหรับเก็บ Watchdog Timer ไว้ในความปลอดภัยขณะใช้งาน interrupt นี้อยู่ เพื่อให้อยู่ในโหมด Interrupt and System Reset Mode, บิท WDIE จะต้องถูกเซทหลังจากแต่ละ interrupt อย่างไรก็ตาม ไม่ควรทำภายใน interrupt service routine ของมันเอง การทำเช่นนี้จะ compromise กันได้กับ safety function ของ Watchdog System Reset mode ถ้าการ interrupt ไม่ถูกปฏิบัติก่อนการหมดเวลาครั้งหน้า System Reset จะถูกใช้



Note: 1. WDTON Fuse ถูกเซทให้เป็น '0' หมายถึงถูก programm(คือกดติ้กถูกใน Fuse Bits) และ '1' หมายถึง unprogrammed (ไม่ถูกโปรแกรม คือไม่กดติ้กถูกใน Fuse Bits)

Bit 5 – WDP[3]: Watchdog Timer Prescaler 3


ปล. การนั่งสมาธิก็ต้องมีหัวมีหางหน่อย ก็กราบขอบพระคุณ คุณพระพุทธ คุณพระธรรม คุณพระสงฆ์ ก่อนและหลังการนั่งสมาธิ หลังการนั่งสมาธิก็ภาวนาธรรมะอย่างพรหมวิหาร 4 ร่วมด้วยก็จะดี เอาอย่างนี้ก็ได้ ภาษาไทยเลย จิตเราจะเข้าใจ แล้วจะเกิดผลดี ชีวิตจะดีขึ้นแน่ๆครับ

พรหมวิหาร ๔
๑.เมตตา คือ ความรัก ความปรารถนาดี ความมีไมตรี อยากให้ผู้อื่นมีความสุข
๒.กรุณา คือ ความสงสาร อยากช่วยเหลือให้ผู้อื่นพ้นจากความทุกข์
๓.มุทิตา คือ ความเบิกบานพลอยยินดี เมื่อเห็นผู้อื่นได้รับความสุขหรือความสำเร็จ ก็พลอยเบิกบานบันเทิงใจไปด้วย
๔.อุเบกขา คือ ความมีใจเป็นกลาง มองตามความเป็นจริง จิตใจราบเรียบสม่ำเสมอ เมื่อเห็นผู้อื่นได้รับผลกรรมตามที่ตนประกอบ ไม่เอนเอียง วางตนเที่ยงธรรม