Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Неожиданно неверная симуляция в AVR Studio 4.14
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
smk
Не в первый раз использую Мегу8, но никогда не было необходимости симулировать Timer1 в режиме FastPWM (14). Был крайне удивлен тем, что: 1) регистры OCR1A и OCR1B при предустановке не меняют свое содержимое или прописывается только значение младшего байта; 2) счетчик досчитывает до 0x1FF, происходит реверс и далее до нуля. Потом опять прямой счет... короче это Phase Correct получается.
Что это такое? Так у всех?
В Протеусе как ни странно все правильно выходит.
Текст программы:
Код
#include <avr/io.h>

int main (void)
{
DDRB=0b00000110;
TCCR1A=0b10100010;
TCCR1B=0b00011001;
ICR1=0x1000;


OCR1A=0x0800;
OCR1B=0x00;

while(1)
{
asm("nop");
}//while(1)
}//void

Кому-нибудь удавалось правильно симулировать Timer1 в режиме FastPWM у ATMega8 в Студии? Спасибо!
Скопидор
Цитата(smk @ Apr 11 2009, 13:34) *
Кому-нибудь удавалось правильно симулировать Timer1 в режиме FastPWM у ATMega8 в Студии? Спасибо!

Не знаю как в этой версии, но во всех предыдущих не удавалось. Не работает там fastPWM (вместо fast PWM таймер симулировался в другом режиме)
smk
А в чем удавалось, если удавалось?
_Pasha
Этой "неожиданности" уж лет 10 как... ни одна студия не могла
smk
Цитата
Этой "неожиданности" уж лет 10 как... ни одна студия не могла

Странно. Мега8 вроде как давно производится. Даже как-то не верится... Чего еще я не знаю? А если выбрать другой контроллер, то есть ли шанс, что будет симулироваться правильно? Я еще понял ситуацию с Тини45. Там тоже Таймер1 не симулируется, но он покруче будет, Тини45 новее и про отсутствие симуляции прямо написано в хелпе Студии.
arisov
Изменение (сброс – установка в 1) одного флага в TIFR1 «сбрасывает» все флаги в этом регистре в нули. Этот так должно быть или глюк AVRStudio?
ReAl
Цитата(arisov @ Apr 12 2009, 08:55) *
Изменение (сброс – установка в 1) одного флага в TIFR1 «сбрасывает» все флаги в этом регистре в нули. Этот так должно быть или глюк AVRStudio?

А это смотря какой rристалл и как код написан.
Если мега8 (а не мега48/88/168) и написано
Код
TIFR1 |= (1<<TOV1);
// sbi TIFR1,TOV1
то оно так и должно себя вести.
А если написано
Код
TIFR1 = (1<<TOV1);
// ldi r16, (1<<TOV1)
// out TIFR1,r16

То ничего лишнего сбрасываться не должно.

В документации на контроллеры об этом написано - у mega8 как предупреждение о RMW-шности на уровне байта для команд sbi/cbi, а для новых - в духе "а теперь не боись, всё пучком".
arisov
Цитата(ReAl @ Apr 12 2009, 12:54) *
А это смотря какой rристалл и как код написан. Если мега8 (а не мега48/88/168) и написано

Для мега48/88/168, писал sbi TIFR1,TOV1 и sbi TIFR1,(1<<TOV1). Попробовал ldi r16, (1<<TOV1) и out TIFR1,r16 всё в Studio заработало. Спасибо.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.