Спасибо, Radist, за Ваше мнение о неправильности моей программы. Если бы Вы скачали её исходный код, то б заметили, что на языке C она имеет всего четыре значимые строчки, из них две - задержки и две - установка битов. Имхо, в них запутаться сложнее, чем в не к ночи помянутом курсе avr123 с его таймерами, константами, 8-ю сервами, левой программой на 16 серв и рекламой через слово.
Дальнейшие эксперименты: с SG-5010 - лучше не стало. С MG-995 удалось выяснить следующее:
крайнее "левое" положение (~45 градусов "влево") соответствует x=1200 мкс, крайнее "правое" (~30 градусов "вправо") - когда x=200 мкс. Если управляющего сигнала не подавать (или x < 200 ) - серва резко отворачивается "вправо" на 90 градусов.
Добавлено спустя 8 минут 42 секунды:MEXAHuK писал(а):На первый взгляд - период (y) должен быть 20 мс, а у тебя 50 мс плюс длина импульса плюс ввод-вывод данных на уарт.
Строго говоря, период = x+y, но это не имеет значения. Всё одинаково при y от 4 мс до 200 мс.
Там не ввод-вывод, там проверка единственного флага. Гипотетически - 2 команды ассемблера - и главное, это линейная и постоянная задержка.
MEXAHuK писал(а):Правильнее формировать сигнал управления по таймеру, а не на задержках.
Не верю, что это настолько принципиально. Пусть сначала так заработает.
MEXAHuK писал(а):ЗЫ а зачем дрыгать всем портом B, если серва подключена к B0 ?
Забыл, как правильно писать - & или &&...