Сразу оговорюсь для «писателей» я знаю о существовании модулей RTC и умею ими пользоваться. Пост немного о другом.
Довольно часто в программах нужно определять интервалы времени, зачастую для этого используют функцию millis(). Вопрос в том, насколько это точный процесс, это я и попытался определить.
"При использовании millis() нужно помнить об одной особенности — millis() "тикает" не равномерно.
Возвращаемое значение увеличивается на единицу каждые 1024 мсек. Затем, когда миллис отстанет на 1 мсек, она "подводится" на единицу, т.е. возвращаемое значение перескакивает через один."
Для теста я написал скетч, в котором время считается в двух функциях. Одна это пресловутая millis(), а вторая использует прерывание по таймеру (TIMER1_OVF_vect).
Теперь собственно скетч.
Настройки элементарные:
Функция прерывания по таймеру тоже выглядит просто и аскетично:
Собственно millis() разместил в пустом «лупе»:
Для контроля точности использовал часы в смартфоне:
Старт контрольного замера:
Через шесть часов получили вот такой результат:
В общем, каждый пусть решает сам какую функцию использовать в зависимости от своих требований к точности и удобству. Главное, что теперь есть информация о точности. Свой выбор я сделал.