Было создано много тем и много вопросов по поводу "А как управлять сервой?" или "А как сделать управление сервой на прерываниях?". Ну всё, положим этому конец! Написал программу на скорую руку, управление 7-ю сервами по TWI( i2c ) на прерываниях с использованием ATmega8. Сразу скажу, что можно сделать и больше серв, но эта программа для обучения. Кто захочет - сделает больше. Также приведен проект в Протеусе.
Пакет для управления сервами по i2c такой:
[ S | addr | A | num | A | angle | A | speed | A | P ], где
S - start состояние,
A - ACK(подтверждение),
num - номер сервы от 0 до 6,
angle - угол в который нужно поставить серву ( от 0 до 90 град , а центральное положение 45 град),
speed - скорость с которой следует повернуть серву ( от 1 до 255 ),
{ Внимание, скорость НЕ выражена в чем либо. Чтобы выставлять скорость в, к примеру, рад/сек, нужно производить расчеты. }
P - Стоп.
Пример пакета для протеуса( с помощью i2c-debugger):
S 04 A 0x05 A 0x10 A 0x0A A P, где выставляем серву под номером 5 на 16 градусов, со скоростью 10. (см. приложенную картинку)
Еще пример:
S 04 A 0x01 A 0x10 A 0x0A A 0x02 A 0x10 A 0x0A A 0x03 A 0x10 A 0x0A A 0x04 A 0x10 A 0x0A A P, где на выставили такиеже значения как и в предыдущем примере, только на сервы 1, 2, 3, 4. Таким образом, можно слать пакеты по 3 байта либо кратные трем..
Также можно отлаживать программу с помощью графика, см. рисунок.
Внимание, чтобы отсимулировать график - вам необходимо выставить галочки "Exclude from simulation" на каждой серве, иначе выдаст ошибку. Для обычного симулирования - галки нужно убрать.
ЗЫ:
Программу не успел еще откомментировать, потом сделаю.
Все вопросы по программе задавайте, отвечу.