właśnie tak mam zrobione. na serwo drży ale pod obciążeniem jest ok, wydaje mi się że nie będę już z tym kombinował. Dogrzebałem się że da się to zrobić na przerwaniach ale czasu już nie ma

tak więc dzięki wielkie za pomoc.
wrzucę jeszcze fragment kodu, może komuś się rzyda...
Kod:
#include <avr/io.h>
#include <util/delay.h>
int main()
{
PORTD = 0xff;
DDRB |=(1<<PB1)|(1<<PB2);
TCCR1A = (1<<COM1A1)|(0<<COM1A0)|(1<<COM1B1)|(0<<COM1B0)|(0<<FOC1A)|(0<<FOC1B)|(1<<WGM11)|(0<<WGM10); //prescaler = 1
TCCR1B = (0<<ICNC1)|(0<<ICES1)|(1<<WGM12)|(1<<WGM13)|(0<<CS12)|(0<<CS11)|(1<<CS10);
ICR1 = 19999;
while(1)
{
unsigned int i;
{
for (i=1500;i<1700;i++)
{
OCR1A = i;
_delay_us(200);
}
for (i=1700; i>1500; i--)
{
OCR1A = i;
_delay_us(200);
}
for (i=1500;i>1270;i--)
{
OCR1A = i;
_delay_us(200);
}
for (i=1270;i<1500;i++)
{
OCR1A = i;
_delay_us(200);
}
}
}
}
podzieliłem cały ruch tak dziwnie żeby ruch rozpoczynał się i kończył w centrum.
Oczywiście inkrementacja powoduje ruch w jedną stronę a dekrementacja w drugą...
Wartość 1500 to centrum, w moim przypadku jest tak trochę dziwnie bo max w jedną stronę to 600 a w drugą 2400... trochę mnie zdziwiły te wartości...
Wychylenia nie są takie same dla obu kierunków, w jedną obraca się o drobinę mniej.
Pozdrawiam