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

 
 
> Проблема с таймером на Atmega168, Не получается установить режим FastPWM
CatMurr
сообщение Dec 26 2010, 12:16
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 26-10-09
Пользователь №: 53 223



Итак, есть девайс, Atmega168. Задачу можно свести к следующему минимуму:

Необходимо установить режим FastPWM и дрыгать ножкой - устанавливать низкий уровень по совпадению с регистром сравнения, высокий по переполнению счетного регистра таймера. Используется Timer1 16bit.

Проблема заключается в том, что по идее в режиме FastPWM таймер должен дотикать до FF, сбросить счетчик в 0, выдать прерывание по переполнению, и продолжить по кругу. При отладке программы в симуляторе avrstudio, таймер тикает до FF, затем тикает обратно до 0, и только тогда выдает прерывание, как в режиме PWM Phase Correct.

Инициализация следующая:

COM1A1..0 = 00
COM1B1..0 = 00
WGM13..0 = 0101 ; FastPWM 8bit
CS12..0 = 001 ; без предделителя
OCIE1A = 1 ; прерывание по совпадению
TOIE1 = 1 ; прерывание по переполнению

В OCR1A пришу, например, 0x003F.

Притом флаги OCF1A и TOV1 вообще не выставляются по соответствующим событиям, но прерывания исправно отрабатываются. Итого имеем PWM Phase Correct при настройках для FastPWM.

Где собака зарыта? Глюк в симуляторе, или (скорее всего), я что-то делаю неправильно?

Проект на всякий случай прилагаю.
Прикрепленные файлы
Прикрепленный файл  Timer_PWM.rar ( 6.81 килобайт ) Кол-во скачиваний: 17
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
777777
сообщение Dec 26 2010, 14:57
Сообщение #2


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

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Какой компилятор? В AVR Studio все исправно работает в режиме FastPWM. Флаги OCF1A и TOV1 ты не увидишь потому что они очищаются при входе в прерывание.

ЗЫ. А зачем SEI перед выходом из прерывания?
Go to the top of the page
 
+Quote Post
CatMurr
сообщение Dec 26 2010, 15:24
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 26-10-09
Пользователь №: 53 223



Цитата(777777 @ Dec 26 2010, 20:57) *
Какой компилятор? В AVR Studio все исправно работает в режиме FastPWM. Флаги OCF1A и TOV1 ты не увидишь потому что они очищаются при входе в прерывание.

Не осознал вопроса. Что значит "какой компилятор?". В avrstudio есть несколько компиляторов под ассемблер?

Цитата(777777 @ Dec 26 2010, 20:57) *
А зачем SEI перед выходом из прерывания?

Почему то сбрасывается флаг I в регистре SREG при входе по вектору прерывания. По идее не должен.

Вообще надо попробовать на железе без SEI перед выходом.

Завтра доберусь до осциллографа, выясню точно, получается ли FastPWM или PhaseCorrect.
Go to the top of the page
 
+Quote Post
777777
сообщение Dec 27 2010, 02:21
Сообщение #4


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

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(CatMurr @ Dec 26 2010, 21:24) *
Не осознал вопроса. Что значит "какой компилятор?". В avrstudio есть несколько компиляторов под ассемблер?

Не заметил сразу что ты написал про студию. Наверное версия старая, у них часто бывают глюки в симулятрое, у меня 4.18 b716.
Цитата(CatMurr @ Dec 26 2010, 21:24) *
Почему то сбрасывается флаг I в регистре SREG при входе по вектору прерывания. По идее не должен.

По идее как раз должен, при входе в прерывание он всегда сбрасывается. А при выходе восстанавливается слово состояния в котором он был установлен.
Go to the top of the page
 
+Quote Post



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

 


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


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