Millis () zamanlayıcı 0 ile ilişkili PWM pinleriyle çakışıyor mu?


9

millis()Fonksiyonun birkaç PWM piniyle aynı zamanlayıcıyı kullandığını okudum .

Bu PWM pinlerini kullanıyorsanız, millis()yine de doğru değeri döndürür mü?

Yanıtlar:


6

Onlar çatışma yok millis()kesinlikle acil değerini okur TCNT0zamanlayıcı 0 kullanımları yoluyla değerini karşılaştırmak için donanım yeteneğini PWM oysa TCNT0değerlerle OCR0xbunlardan herhangi değerini etkilemeden.


millis()Zamanlayıcı 0 taşma sayılarını kullanır. micros()içindeki anlık değeri okur TCNT0.
Nick Gammon

5

Sorunuzu doğrudan cevaplayan @ Ignacio'nun cevabına eklemek için. Bahsettiğiniz "çatışma", Timer0ön ölçekleyici ile ilgilidir.

Çoğunlukla, bu pinleri (tesadüfen UNO üzerindeki 5 ve 6 pinleri) PWM ile sorunsuz bir şekilde kullanabilir ve doğru değerini okuyabilirsiniz millis()(ve beklenen gecikmeyi de alabilirsiniz delay)

Sorunlarla karşılaştığınız yer, ön ölçekleyiciyi değiştirmek istiyorsanız (genellikle PWM sinyalinin frekansını değiştirmek için). Bunu değiştirirseniz, hesaplamasını ve raporlamasını millis()ve uzunluğunu doğrudan etkiler delay(x).


Zamanlayıcı ön ölçekleyicinizi Serial.println (TCCR0A, BIN) alt bitlerinden okuyabilirsiniz; Eğer '11' ise ön ölçekleyiciniz clk / 64'tür. Daha sonra millis () ve delay () değiştirme faktörünü hesaplayabilirsiniz.
Dave X

Bu çok iyi bir nokta ve her zaman onu değiştirmekten uzak durdum, ama gerçekten yapmak / ihtiyaç duymak için hiçbir neden yok. Diğer bir nokta, eğer değiştirdiyseniz, yeni ölçeklendiriciyi zaten biliyorsunuz ve karşılığında millis ()ya da delay ()yine de sarmalayıcılar yazabiliyorsunuz
Madivad
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.