Я читал, что millis()
функция использует тот же таймер, что и пара выводов ШИМ.
Если вы используете эти выводы ШИМ, все millis()
равно вернете правильное значение?
Они не конфликтуют, так как millis()
строго считывают непосредственное значение, TCNT0
тогда как ШИМ через таймер 0 использует способность оборудования сравнивать значение TCNT0
со значениями, OCR0x
не влияя на значение любого из них.
millis()
просто использует счетчик переполнения таймера 0micros()
читает непосредственное значение вTCNT0
.Просто чтобы добавить к ответу @ Игнасио, который прямо ответил на ваш вопрос. «Конфликт», о котором вы говорите,
Timer0
связан с прескалером России.По большей части вы можете использовать эти выводы (между прочим, контакты 5 и 6 в UNO) с ШИМ без проблем и прочитать правильное значение
millis()
(а также получить ожидаемую задержку отdelay
)Проблемы возникают в том случае, если вы хотите изменить прескалер (обычно для изменения частоты сигнала ШИМ). Если вы измените это, то вы будете напрямую влиять на расчет, отчетность
millis()
и продолжительностьdelay(x)
.источник
millis ()
или вdelay ()
любом случае