roboforum.ru

Технический форум по робототехнике.

Управление Сервами в WinAvr

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Сообщение Lirzman » 17 авг 2006, 20:04

Аватара пользователя
Lirzman
 
Сообщения: 257
Зарегистрирован: 22 мар 2005, 03:59
Откуда: Питер

Сообщение aesok » 18 авг 2006, 20:58

Lirzman писал(а):ЗЫ Щас придет aesok и найдет кучу багов.(как обычно) :)



Я пришол.  :zevok:

Ну баг ты нашол сам. Но Его исправление ты предложил неверное:

if(cur_servo==3)
 {PORTB SET_B(2);
 PORTB CLR_B(1);
 TCNT1=gangle[2]+2;
 cur_servo=4;
 }

Подумай из за чего поисходит эта ошибка.

Наводки:
Посмотри асемблерный код обработчика прерывания. В чем разница для разных серв? Чему равно значение счетчика таймера в тот момент когда ему присваеваеться новое значение, для разных серв? Что будет если компилятор сгенерирует более оптимальный (или менее оптимальный) код?

Что произойдет если контроллер, в тот момент когда происходит переполнение таймера '1' и должен начать выполняться обработчик прерываня таймера '1', контроллер находиться в обработчике другого прерываня? Как это  отразиться на серве?

Ваше предложение по универсальному решению проблеммы?

Анатолий.
aesok
 
Сообщения: 69
Зарегистрирован: 11 авг 2006, 01:02
Откуда: ----

Пред.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13