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

 
 
 
Reply to this topicStart new topic
> Неожиданно неверная симуляция в AVR Studio 4.14, Timer1 FastPWM ATMega8
smk
сообщение Apr 11 2009, 09:34
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Не в первый раз использую Мегу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 в Студии? Спасибо!


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Guest_Скопидор_*
сообщение Apr 11 2009, 09:49
Сообщение #2





Guests






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

Не знаю как в этой версии, но во всех предыдущих не удавалось. Не работает там fastPWM (вместо fast PWM таймер симулировался в другом режиме)

Сообщение отредактировал Скопидор - Apr 11 2009, 09:50
Go to the top of the page
 
+Quote Post
smk
сообщение Apr 11 2009, 10:47
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



А в чем удавалось, если удавалось?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Apr 11 2009, 11:20
Сообщение #4


;
******

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



Этой "неожиданности" уж лет 10 как... ни одна студия не могла
Go to the top of the page
 
+Quote Post
smk
сообщение Apr 12 2009, 04:46
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата
Этой "неожиданности" уж лет 10 как... ни одна студия не могла

Странно. Мега8 вроде как давно производится. Даже как-то не верится... Чего еще я не знаю? А если выбрать другой контроллер, то есть ли шанс, что будет симулироваться правильно? Я еще понял ситуацию с Тини45. Там тоже Таймер1 не симулируется, но он покруче будет, Тини45 новее и про отсутствие симуляции прямо написано в хелпе Студии.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
arisov
сообщение Apr 12 2009, 05:55
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 157
Регистрация: 17-02-07
Из: Ульяновск
Пользователь №: 25 455



Изменение (сброс – установка в 1) одного флага в TIFR1 «сбрасывает» все флаги в этом регистре в нули. Этот так должно быть или глюк AVRStudio?
Go to the top of the page
 
+Quote Post
ReAl
сообщение Apr 12 2009, 08:54
Сообщение #7


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(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, а для новых - в духе "а теперь не боись, всё пучком".


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
arisov
сообщение Apr 12 2009, 09:15
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 157
Регистрация: 17-02-07
Из: Ульяновск
Пользователь №: 25 455



Цитата(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 заработало. Спасибо.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 06:37
Рейтинг@Mail.ru


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