roboforum.ru

Технический форум по робототехнике.

ATMega169 - проблема с прерываниями от таймера

ATMega169 - проблема с прерываниями от таймера

Roman_tmb » 29 апр 2009, 15:05

Приветствую всех!
Начал изучать программирование МК, написал простенькую программку мигания светодиода с помощью задержек - работает...
Решил усложнить - сделать тоже самое, но с помощью прерываний от таймера. И стою на одном месте уже 2 недели...
Пример реализации взял из книги "CodeVision AVR Пособие для начинающих". Светодиод должен мигать 1 раз в секунду. В итоге получилось: первое и второе прерывания после включения приходят с интервалом чуть больше минуты, остальные - как и должны быть (через 0.5 сек).
Так и не могу понять, почему первые 2 прерывания приходят с такими задержками...
Попробовал такую же прогу сделать для mega8 - работает без проблем (эмулировал в Proteus).

Помогите - где, что я не так настроил у 169-ой.
Прикладываю архив со схемой для Proteus и исходниками CVAVR для mega169 и mega8
Вложения
Led_Proteus.rar
Схема в Proteus и исходники CVAVR
(75.31 КиБ) Скачиваний: 27

Re: ATMega169 - проблема с прерываниями от таймера

avr123.nm.ru » 29 апр 2009, 17:09

Roman_tmb писал(а):Пример реализации взял из книги "CodeVision AVR Пособие для начинающих". стою на одном месте уже 2 недели...
Ого ! Интересное пособие.

Roman_tmb писал(а): эмулировал в Proteus.
Какой PROTEUS у вас ? Советую скачать PROTEUS 7.5 SP3 PRO - работает хорошо, все нужное в одном архиве. http://proteus123.narod.ru

В исходнике у вас 1 Мгц в ПРОТЕУСЕ 8 и формула в ините таймера - наверно лучше заранее ее посчитать.

А еще лучше настроить таймер и прерывание мастеровм кода - вот так - http://avr123.nm.ru/z6.htm

Re: ATMega169 - проблема с прерываниями от таймера

Roman_tmb » 29 апр 2009, 17:38

avr123.nm.ru писал(а):Какой PROTEUS у вас ? Советую скачать PROTEUS 7.5 SP3 PRO - работает хорошо, все нужное в одном архиве. http://proteus123.narod.ru


Версия Proteus такая же.

avr123.nm.ru писал(а):В исходнике у вас 1 Мгц в ПРОТЕУСЕ 8 и формула в ините таймера - наверно лучше заранее ее посчитать.


В фузах установлен бит деления на 8 частоты, поэтому получается 1 МГц, но это проблемы не решает, даже если в протеусе указать 1МГц

avr123.nm.ru писал(а):А еще лучше настроить таймер и прерывание мастеровм кода - вот так - http://avr123.nm.ru/z6.htm


Оба исходника созданы мастером кода CVAVR (и для mega169 и mega8).

Кстати, если в исходниках и протеусе исправить для частоты генератора 8 МГц, то задержка этих 2-х прерываний уменьшается до 12-13 сек (примерно в 8 раз).

Re: ATMega169 - проблема с прерываниями от таймера

avr123.nm.ru » 29 апр 2009, 17:46

В Студии первое прерывание на 62.47 мС

далее через 62464 мкС примерно повторяются. или 499712 и 499713 тактов кварца.

Добавлено спустя 4 минуты 3 секунды:
Roman_tmb писал(а):Оба исходника созданы мастером кода CVAVR (и для mega169 и mega8).

Ни разу не видел чтоб мастер CVAVR вот так лихо выписывал:
Код: Выделить всёРазвернуть
TCNT1=0x10000-(xtal/fdiv/frq); 

Re: ATMega169 - проблема с прерываниями от таймера

Roman_tmb » 30 апр 2009, 11:14

avr123.nm.ru писал(а):Ни разу не видел чтоб мастер CVAVR вот так лихо выписывал:
Код: Выделить всёРазвернуть
TCNT1=0x10000-(xtal/fdiv/frq); 


Считал, что такая конструкция прокатит.

Разобрался, в чем была моя ошибка. Спасибо за указание пути истинного


Rambler\'s Top100 Mail.ru counter