Всем здравствуйте!
Помогая студенту написал почти этот код , но вот взял и переделал (дождь , дача , делать нечего )добавив посчёт минут , но
не врублюсь никак , почему при переходе частоты обновления динамической индикации с 85гц на 56гц секундомер начинает пропускать 1 секунду из 5 . На 85Гц- всё нормально.На 56 счёт не пропускает - т.е. 1 2 3 4 5 ..... 20 21 и т.д. Но даже на глаз видно что медленне работает . И по вкл. компьютерному секундомеру видно, что мой на 5 сек он показывает 4 на 10 сек 8 и т.д. А при 85 всё тютелька в тютельку. Там в коде есть , где меняю значение . И оно не скрыто под прерыванием . Да и обработчики прерывний одни из самых коротких из возможных - можно ещё и запоминания SREG убрать в одном без потерь. Их два - один по переполнению - секунды, второй по сравнению - динамика.
Timer работает в режиме - Normal (Free timer) Прерывания одно от другого не зависяще и всегда считает от 0 до FF. Каждое чётное число TCNT - прерывание динамики для 85 гц или каждое 3-тье для 56 . В первом случае прерывание секунд совпадает с прерыванием динамики , но сбоя нет и так каждый раз . Во- втором случае , только каждое второе прерывание секунд совпадёт с динамикой и идёт сбой. ( Как я подозреваю) Прескалер Timerа настроен на деление до 512 гц соответствено частота динамики или 256/3 или 170/3. Три индикатора. Не врубаюсь где засада.
Прикрепленные файлы
second.rar ( 10.92 килобайт )
Кол-во скачиваний: 31