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

 
 
> Проблема с таймером на 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
Ответов
Diusha
сообщение Dec 26 2010, 13:20
Сообщение #2


Вечный студент
****

Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262



Попробуйте WGM=1110, а 0х00FF загоните в ICR1. У меня нормально работает.

Цитата(CatMurr @ Dec 26 2010, 18:16) *
COM1A1..0 = 00
COM1B1..0 = 00

При этом ножка дрыгаться не будет

Цитата(CatMurr @ Dec 26 2010, 18:16) *
Притом флаги OCF1A и TOV1 вообще не выставляются по соответствующим событиям, но прерывания исправно отрабатываются.

Раз прерывания обрабатываются, значит флаги выставляются, с чего Вы взяли, что нет?

Цитата(CatMurr @ Dec 26 2010, 18:16) *
Итого имеем PWM Phase Correct при настройках для FastPWM.

А это откуда следует?
Go to the top of the page
 
+Quote Post
CatMurr
сообщение Dec 26 2010, 13:42
Сообщение #3


Участник
*

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



Цитата(Diusha @ Dec 26 2010, 19:20) *
При этом ножка дрыгаться не будет

Не будет дрыгаться ножка OC1A/OC1B, я дергаю другой ногой по прерываниям.

Цитата(Diusha @ Dec 26 2010, 19:20) *
Раз прерывания обрабатываются, значит флаги выставляются, с чего Вы взяли, что нет?

При симуляции программа уходит на вектор прерывания, но флаги в регистрах не выставляются. Глюк симулятора?

Цитата(Diusha @ Dec 26 2010, 19:20) *
А это откуда следует?

Получаем не "single-slope operation", как в FastPWM, а "double-slope", с частотой в два раза меньше, чем при FastPWM => PWM Phase Correct.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 26th August 2025 - 13:33
Рейтинг@Mail.ru


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