ATmega16A: некорректно работает ШИМ

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
KaCD
Родился
Сообщения: 6
Зарегистрирован: Ср июл 04, 2012 20:06:25

ATmega16A: некорректно работает ШИМ

Сообщение KaCD »

Проблема вскрывается при "шагании" по коду в дебаггере (используется AVRStudio 4)
При настройке Таймера1(16-ти битный), я первоначально задаю значения в регистрах OCR1AH/L и OCR1BH/L, потом произвожу настройку Таймера1 на нужный мне режим работы
Трабл таков: если шагать по коду, то после строчек настройки регистров TCCR1A/B, старшие байты регистров OCR1A/B почему-то самопроизвольно меняются на совсем другие значения. Младшие байты не меняются.
Почему так происходит понять ни как не могу.
Хотя, если ткнуть осциллографом в ногу, куда выводится ШИМ, то там он будет иметь правильную форму, заданную регистрами OCR1A/B (правильность проверял также по получаемому периоду меандра)
Чтобы убедится, что это не глюк программы состряпал прерывание, в котором, по нажатию кнопки, сначала данные с регистров OCR1AH/L и OCR1BH/L копируются во временные регистры, а потом сразу же обратный процесс - из временных регистров в регистры сравнения.
Тут-то бага и вскрывается, т.к. старшие байты самопроизвольно поменялить так, что предел счёта стал меньше сравниваемого значения, ни о каком ШИМ речи не идёт (что осциллограф и подтверждает).

Посему и вопрос к светилам: в чём моя ошибка и как сделать так, чтобы старшие байты регистров сравнения не менялись?
Вложения
FastPWM with TOP-OCR1A.asm
(1.72 КБ) 485 скачиваний
Реклама
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Re: ATmega16A: некорректно работает ШИМ

Сообщение GP1 »

Код: Выделить всё

t0_comp:

sbic pinD,1				
rjmp exit
in temp1,OCR1BH
in temp2,OCR1BL

out OCR1BL,temp2
out OCR1BH,temp1

exit:
согласно ДШ при записи первым пишется ст.байт, затем мл.
при чтении - сначало читается мл.байт, затем ст.байт
а у тебя все наоборот

а при инициализации все правильно:
сначала ст. потом мл.
Чем дальше, тем больше становлюсь занудой...
Изображение
Реклама
KaCD
Родился
Сообщения: 6
Зарегистрирован: Ср июл 04, 2012 20:06:25

Re: ATmega16A: некорректно работает ШИМ

Сообщение KaCD »

Замечание верное, но сути дела не меняет - всё равно старшие байты меняются и поэтому, в прерывании t0_comp, во временные регистры записываются неверные значения
Аватара пользователя
zero648
Вымогатель припоя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Re: ATmega16A: некорректно работает ШИМ

Сообщение zero648 »

Нужно в обработчике прерываний сохранять регистры и флаги в стеке, а при выходе восстанавливать, а иначе концов не найдешь.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: ATmega16A: некорректно работает ШИМ

Сообщение Engineer_Keen »

zero648 писал(а):Нужно в обработчике прерываний сохранять регистры и флаги в стеке, а при выходе восстанавливать, а иначе концов не найдешь.
По хорошему да, но тут вся программа - инициализация и пара обработчиков прерывания, так что это не влияет.
Это явный глюк симулятора студии, поиграйтесь во время пошаговой отладки с битами WGM10-WGM13 и OCR и сравните результат с таблицей в даташите. Создается впечатление что WGM13 и 12 вообще не влияют на режим, остаются 8,9 и 10 битные режимы, в которых старшие 7-9 бит регистров сравнения просто обнуляются. Кстати в протеусе этого не происходит, в железе проверить не могу, 16я мега осталась на даче...
Реклама
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15570
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: ATmega16A: некорректно работает ШИМ

Сообщение BOB51 »

сколько раз уже эти "грабли" повторяются...!
Читайте описание ограничений в работе дебаггера AVRstudio!!!
Реклама
KaCD
Родился
Сообщения: 6
Зарегистрирован: Ср июл 04, 2012 20:06:25

Re: ATmega16A: некорректно работает ШИМ

Сообщение KaCD »

Engineer_Keen писал(а):Создается впечатление что WGM13 и 12 вообще не влияют на режим, остаются 8,9 и 10 битные режимы, в которых старшие 7-9 бит регистров сравнения просто обнуляются.
Согласен, действительно похоже на это, но, правда, отчего же?
Engineer_Keen писал(а):Кстати в протеусе этого не происходит, в железе проверить не могу, 16я мега осталась на даче...
Чего именно не происходит в протеусе?
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: ATmega16A: некорректно работает ШИМ

Сообщение Engineer_Keen »

KaCD писал(а):Согласен, действительно похоже на это, но, правда, отчего же?
Написали уже - глюк симулятора, смиритесь с этим :)))
Engineer_Keen писал(а):Чего именно не происходит в протеусе?
Не обнуляются старшие биты в OCR. Хотя они там не обнуляются если и действительно 8-10 битные режимы ставить... Как должно быть на самом деле не знаю, никогда такие режимы (менее 16 бит для 16 разрядного таймера) не использовал.
KaCD
Родился
Сообщения: 6
Зарегистрирован: Ср июл 04, 2012 20:06:25

Re: ATmega16A: некорректно работает ШИМ

Сообщение KaCD »

Engineer_Keen писал(а):
KaCD писал(а):Согласен, действительно похоже на это, но, правда, отчего же?
Написали уже - глюк симулятора, смиритесь с этим :)))
Пичаль... видимо придётся попробовать другой софт или другую версию того же АВРСтудио...
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15570
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: ATmega16A: некорректно работает ШИМ

Сообщение BOB51 »

у аврчатых симуляторов (и у симуляторов в большинстве) отлично проработано только "ядро", а чего касательно всяческой периферии и особенно "сложных" режимов - всегда будут различной степени ограничения... :cry:
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»