ฉันได้อ่านแล้วว่าmillis()
ฟังก์ชั่นนี้ใช้ตัวจับเวลาเดียวกันกับหมุด PWM สองสามตัว
หากคุณใช้หมุด PWM เหล่านั้นจะmillis()
ยังคงส่งคืนค่าที่ถูกต้องหรือไม่
ฉันได้อ่านแล้วว่าmillis()
ฟังก์ชั่นนี้ใช้ตัวจับเวลาเดียวกันกับหมุด PWM สองสามตัว
หากคุณใช้หมุด PWM เหล่านั้นจะmillis()
ยังคงส่งคืนค่าที่ถูกต้องหรือไม่
คำตอบ:
พวกเขาจะไม่ขัดแย้งกันเนื่องจากmillis()
อ่านค่าในทันทีTCNT0
ขณะที่ PWM ผ่านตัวจับเวลา 0 ใช้ความสามารถของฮาร์ดแวร์ในการเปรียบเทียบค่าของค่าTCNT0
กับค่าOCR0x
โดยไม่ส่งผลกระทบต่อค่าใด ๆ ของพวกเขา
เพียงเพิ่มคำตอบของ @ Ignacio ซึ่งตอบคำถามของคุณโดยตรง "ความขัดแย้ง" ที่คุณพูดถึงเกี่ยวข้องกับพรีTimer0
สเกลเลอร์
ส่วนใหญ่คุณสามารถใช้หมุดเหล่านั้น (หมุด 5 และ 6 โดยบังเอิญบน UNO) กับ PWM โดยไม่มีปัญหาและอ่านค่าที่ถูกต้องของmillis()
(รวมทั้งรับความล่าช้าที่คาดไว้จากdelay
)
จุดที่คุณพบปัญหาคือถ้าคุณต้องการเปลี่ยนพรีสเกลเลอร์ (โดยปกติคือเพื่อแก้ไขความถี่ของสัญญาณ PWM) หากคุณเปลี่ยนแปลงสิ่งนี้แสดงว่าคุณมีผลต่อการคำนวณและการรายงานmillis()
และความยาวของdelay(x)
โดยตรง
millis ()
หรือdelay ()
อยู่ดี
millis()
เพียงใช้ตัวนับล้นของ Timer 0 อ่านค่าได้ทันทีในmicros()
TCNT0