NeON79, HarryStar, спасибо.
>А зачем такой большой радиатор, что реально так сильно греется?<
Не , просто другого нету. Нашел самый маленький и поставил.
Диэлектрик
Вот тут http://cdxp.zx6.ru/archives/355 есть формула для расчета значений в регистре OCRnx и пример кода как управлять сервой.
А вот мой код для двух серв (mikropascal)
//////////////////ATMega32 16MHz//////////////////////
TCCR1A:=0xA0; // настраиваем МК
TCCR1B:=0x12;
TCNT1H:=0x00;
TCNT1L:=0x00; // настроили
ICR1H:=0x4E; //TOP равно 20000
ICR1L:=0x20;
OCR1AH:= 0x05; //Поворачиваем серву 1
OCR1AL:= 0xDC; // на 90 градусов (нейтральное положение)
OCR1BH:= 0x05; //тоже самое с сервой 2
OCR1BL:= 0xDC;
С помощью расчетов (формулы по ссылке) узнаем , что для крайнего левого положения сервы в регистры OCR1AH и OCR1AL нужно записать число 500 , а для крайнего правого 2500 . Сразу в 2 регистра его записать нельзя (в микропаскале не поддерживается), поэтому нужно "разбить" это число и по кускам записать в два регистра . Чтоб было проще , пишем процедуру которая будет этим заниматься.
Procedure ServoControl (Value: integer); //min 500 , max 2500 ,
Begin
OCR1AH:= Value shr 8;
OCR1AL:= Char(Value);
End;
Для второй сервы тоже самое , только регистры будут OCR1BH и OCR1BL