По поводу моей реплики насчет точности тиканья.
При входе в прерывание таймер продолжает тикать. У вас выполняется какая-то не маленькая функция, таймер в момент ее выполнения тикает дальше. После чего вы вдруг берете и перенастраиваете таймер, не учитывая то, что таймер за время выполнения функции уже что-то отсчитал. Таким образом вы вносите сумасшедшую погрешность в сторону "отставания" в ваших якобы часах реального времени.
Есть два пути устранения этого: 1. режим CTC, в котором таймер сам будет обнуляться при достижении значения OCR2 (прерывание OCIE2).
2. (дался вам делитель 256?) перенастроить предделитель вместо 256 на 128 (значение TCCR2 = 5), чтобы таймер отсчитывал за полный ход ровно одну секнду и не надо было бы дергать регистр TCNT2 в прерывании. (прерывание TOIE2)
|