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

 
 
> mega8 timer..., Прерывания 16-bit таймера по сравнению.
BVU
сообщение Aug 17 2005, 10:01
Сообщение #1


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

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Всем, привет!
Для mega8 пытаюсь сделать прерывание по сравнению - используя 16-bit timer-B. Выполняю инициализацию, таймер начинает работать увеличивая программный счетчик в теле своего прерывания, но работа идет явно не по сравнению константного значения, а как бы по переполнению... Почему такие выводы спросите вы, потому что при изменении константы в регисте сравнения в два раза - частота прерываний не меняется... sad.gif. По всей видимости где-то, что-то я не доглядел или непонял.
Привожу пример своего кода:

void InitTimers(void)
{
/* Initialization Timer1 */
OCR1B = QUARTER_sec; // Set compare value on one second.
TIMSK = (1 << OCIE1B); // Set mask to enable Timer1B compare interrupt.
TCCR1B = ((1 << CS12) | (1 << CS10)); // Set prescaller on 1024.
}


// IRQ TIMER1_COMPB
#pragma vector = TIMER1_COMPB_vect
__interrupt void timer1_compB_Processing(void)
{
char pd;

__disable_interrupt();
tick++;
... // обработка подпрограммы.
__enable_interrupt();
}

Ваши мнения корифеи программирования таймеров???

С уважением,
BVU


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
BVU
сообщение Aug 17 2005, 13:20
Сообщение #2


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

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



По всей видимости после прерывания на совпадение счетчик TCNT1 продолжает счет до 0xffff и сбросившись в 0x0000 работа продолжается до следующего совпадения. Тем самым создается иллюзия, что таймер работает по переполнению и не зависит от константы сравнения.
В этом случае в самом начале обработки прерывания таймера придется обнулять TCNT1 "в ручную" (высокой точности периода мне пока не требуется, ну а если возникнет такая необходимость ее можно компенсировать ассемблерными вставками - nop) или воспользоваться советом prottoss.

Тем не менее всем участникам спасибо за помощь!

С уважением,
BVU


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
yung
сообщение Aug 17 2005, 18:33
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 207
Регистрация: 25-03-05
Из: Рязань
Пользователь №: 3 669



Лучше будет использовать режим СТС - сброс при совпадении. Почитай pdf, там это есть.
Go to the top of the page
 
+Quote Post



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

 


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


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