ฉันได้อ่านแล้วว่า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