roboforum.ru

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

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

Lirzman » 17 авг 2006, 20:04


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', контроллер находиться в обработчике другого прерываня? Как это  отразиться на серве?

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

Анатолий.


Rambler\'s Top100 Mail.ru counter