क्या मिमि () टाइमर 0 से जुड़े पीडब्लूएम पिंस के साथ संघर्ष करता है?


9

मैंने पढ़ा है कि millis()फ़ंक्शन PWM पिन के एक जोड़े के रूप में एक ही टाइमर का उपयोग करता है।

यदि आप उन PWM पिन का उपयोग कर रहे हैं, तब millis()भी क्या सही मान वापस आएगा?

जवाबों:


6

वे millis()कड़ाई से संघर्ष नहीं करते हैं क्योंकि कड़ाई से तत्काल मूल्य पढ़ता है TCNT0जबकि टाइमर 0 के माध्यम से पीडब्लूएम हार्डवेयर की क्षमता का उपयोग करता है ताकि उनमें से किसी के मूल्य को प्रभावित किए बिना TCNT0मूल्यों के साथ तुलना OCR0xकी जा सके।


millis()बस टाइमर 0 अतिप्रवाह मायने रखता है का उपयोग करता है। micros()में तत्काल मूल्य पढ़ता है TCNT0
निक गैमन

5

बस @ इग्नासियो के उत्तर को जोड़ने के लिए जिसने सीधे आपके प्रश्न का उत्तर दिया है। आप जिस "संघर्ष" की बात करते हैं, वह Timer0प्रीस्कूलर के संबंध में है ।

अधिकांश भाग के लिए, आप उन पिनों का उपयोग कर सकते हैं (संयोग से पिन और UNO पर 5 और 6) बिना किसी समस्या के PWM के साथ, और सही मान पढ़ें millis()(साथ ही अपेक्षित विलंब प्राप्त करें delay)

यदि आप समस्याओं में भाग लेते हैं, यदि आप प्रीस्कूलर को बदलना चाहते हैं (आमतौर पर पीडब्लूएम सिग्नल की आवृत्ति को संशोधित करने के लिए)। यदि आप इसे बदलते हैं, तो आप सीधे गणना और रिपोर्टिंग millis()और की लंबाई को प्रभावित करते हैं delay(x)


आप Serial.println (TCCR0A, BIN) के नीचे के बिट्स द्वारा अपने टाइमर के प्रीस्कूलर को पढ़ सकते हैं; यदि वे '11' हैं तो आपका प्रिस्क्राइबर clk / 64 है। फिर आप मिलिस () और देरी () को संशोधित करने के लिए कारक की गणना कर सकते हैं।
डेव एक्स

यह एक बहुत अच्छा बिंदु है और मैंने हमेशा इसे संशोधित करने के लिए केवल स्पष्ट कदम उठाया है, लेकिन कोई कारण नहीं है अगर आप वास्तव में चाहते हैं / की आवश्यकता है। अन्य मुद्दा यह है कि अगर आप इसे संशोधित कर लिया है आप पहले से ही नई prescaler जानते हैं और में के लिए लिखने रैपर बदल सकती है millis ()या delay ()किसी भी तरह
Madivad
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.