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

 
 
> Глюк у атмега1280 таймер 0
_artem_
сообщение Jul 21 2007, 16:59
Сообщение #1


учащийся
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249



Встретился такой глюк - таймер 0 регистр TCNT0 не восприминает запись в него (из своей программы обработчика прерываний по overflow ) когда таймер работает в режиме Normal mode.
Может я глючу ?)


--------------------
Зачем лаять на караван , когда на него можно плюнуть?

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 2)
SasaVitebsk
сообщение Jul 22 2007, 20:00
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(_artem_ @ Jul 21 2007, 19:59) *
Встретился такой глюк - таймер 0 регистр TCNT0 не восприминает запись в него (из своей программы обработчика прерываний по overflow ) когда таймер работает в режиме Normal mode.
Может я глючу ?)


А как это выглядит. Может я проверю. У меня правда только 2560 и 640. Но это в принципе один и тот же кристалл. Я использую таймер 0 в режиме сравнения. И все таймеры до пятого. smile.gif У меня всё работает. Но может не в том режиме. Давай попробую.
Go to the top of the page
 
+Quote Post
_artem_
сообщение Jul 23 2007, 09:12
Сообщение #3


учащийся
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249



Я его использую в Normal mode (WGM2 WGM1 WGM0 = 0). Проблема вышла когда тестировал порт ucos'а для авр. Таймер 0 используется для генерации тика юкоса. Для того чтобы получить желаемое время между тиками - таймер вначале устанавлицвается в Normal mode прескалер - 1/1024, потом при каждом прерывании по overflow значение tcnt0 устанавливается так что количество тико до следующего overflow было бы равно требуемому времени между прерываниями. Так вот когда во время прерывания по overflow пытаюсь записать новое значение в tcnt0 , оно не записывается. Проявляется это в виде неизменяемой частоты прерываний равной Fproc/(1024*256) в то время как должно быть Fproc/(1024*(256 - N)) где N значение которое я пытаюсь записать в tcnt0 при каждом прерывании по overflow.

Вообше то менять частту через Normal mode криво. Я затем изменил конфигурацию на Clear timer on compare и получаю требуемую частоту посредством установки OCRA0. Потом посмотрел на новый ucos порт для атмега128 - там оказывается тоже сделано через CTC.


--------------------
Зачем лаять на караван , когда на него можно плюнуть?

Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 4th July 2025 - 10:53
Рейтинг@Mail.ru


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