реклама на сайте
подробности

 
 
> Секундомер, Туплю
ILYAUL
сообщение May 1 2012, 21:29
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Всем здравствуйте!
Помогая студенту написал почти этот код , но вот взял и переделал (дождь , дача , делать нечего )добавив посчёт минут , но
не врублюсь никак , почему при переходе частоты обновления динамической индикации с 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
 


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Александр Куличо...
сообщение May 4 2012, 22:14
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 256
Регистрация: 6-03-06
Из: Украина, г. Винница
Пользователь №: 15 017



Порылся еще в нете и нашел схожую тему 5-летней давности на нашем же форуме: ATmega timer2 в асинхронном режиме. После прочтения темы посмотрел эррату на мегу128 - проблема до сих пор существует для всех ревизий кристалла от F до М.
Ниже выдержка из эрраты:

Цитата
2. Interrupts may be lost when writing the timer registers in the asynchronous timer
The interrupt will be lost if a timer register that is synchronous timer clock is written when the
asynchronous Timer/Counter register (TCNTx) is 0x00.
Problem Fix/Workaround
Always check that the asynchronous Timer/Counter register neither have the value 0xFF nor
0x00 before writing to the asynchronous Timer Control Register (TCCRx), asynchronous
Timer Counter Register (TCNTx), or asynchronous Output Compare Register (OCRx).


В твоем коде воспользоваться данным воркэраундом не удастся (будет заметно подмигивание)

Остается только посоветовать либо оставить все на 85Гц, либо отказаться от периодического изменения OCR:
1. настроить прескалер таймера на 1
2. Настроить таймер на режим CTC (автосброс при срабатывании output compare, WGM01 = 1, WGM00 = 0 ), в OCR занести значение (64-1). Таким образом, у нас прерывание про сравнению будет срабатывать с частотой 32768/64 == 512Гц. При каждом третьем входе в это прерывание выставлять флаг fl_Display (частота развертки 512/3/3==57Гц), а при каджом 512 входе - флаг fl_Second.
3. понятное дело, убрать обновление OCR0 из OUT_TIMER и отключить прерывание по переполнению.

ЗЫ реинициализацию регистра count (если он останется после переделки) лучше осуществлять в самом прерывании. Это, конечно, +1 такт к прерыванию, но читабельность программы существенно улучшится.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение May 5 2012, 08:55
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(Александр Куличок @ May 5 2012, 02:14) *
Порылся еще в нете и нашел схожую тему 5-летней давности на нашем же форуме: ATmega timer2 в асинхронном режиме. После прочтения темы посмотрел эррату на мегу128 - проблема до сих пор существует для всех ревизий кристалла от F до М.


Да похоже я наступил на теже грабли . Вечером попробую


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st August 2025 - 06:16
Рейтинг@Mail.ru


Страница сгенерированна за 0.01374 секунд с 7
ELECTRONIX ©2004-2016