Чи конфліктує millis () з ШІМ-штифтами, пов'язаними з таймером 0?


9

Я читав, що millis()функція використовує той же таймер, що і пара шпильок ШІМ.

Якщо ви використовуєте ці ШІМ-шпильки, все millis()одно поверне правильне значення?

Відповіді:


6

Вони не конфліктують, оскільки millis()суворо читає безпосереднє значення, TCNT0тоді як ШІМ через таймер 0 використовує можливість апаратного забезпечення порівняти значення TCNT0зі значеннями, OCR0xне впливаючи на значення жодного з них.


millis()просто використовує кількість переливів Таймера 0. micros()читає безпосереднє значення в TCNT0.
Нік Гаммон

5

Просто додати до відповіді @ Ignacio, яка безпосередньо відповіла на ваше запитання. "Конфлікт", про який ви говорите, пов'язаний Timer0з дошкільником.

Здебільшого ви можете користуватися цими штифтами (до речі, штифтами 5 і 6 в UNO) з ШІМ без проблем і читати правильне значення millis()(а також отримувати очікуване затримку від delay)

Якщо у вас виникли проблеми, якщо ви хочете змінити дошкільник (зазвичай, щоб змінити частоту ШІМ-сигналу). Якщо ви зміните це, ви безпосередньо вплинете на обчислення та звітність millis()та тривалість delay(x).


Ви можете прочитати докажчик таймера за допомогою нижніх бітів Serial.println (TCCR0A, BIN); Якщо вони "11", тоді ваш дошкільник має clk / 64. Потім можна обчислити коефіцієнт для зміни milis () та затримки ().
Дейв X

Це дуже хороший момент, і я завжди просто уникав змін, але немає причин, якщо ви дійсно цього хочете / потребуєте. Інший момент полягає в тому, що якщо ви змінили його, ви вже знаєте нового докалітератора і можете в свою чергу написати обгортки для millis ()або в delay ()будь-якому випадку
Мадівад,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.