Bei mir functioniert das mit folgende code :
Code:
/*
Timer 1 is used for servo-puls generation
*/
ISR(TIMER1_COMPA_vect)
	{
	if(servocount==0){PORTC|=IO_PC2;OCR1A=servo4;}
	if(servocount==1){PORTC&= ~IO_PC2;PORTC|=IO_PC3;OCR1A=servo3;}
	if(servocount==2){PORTC&= ~IO_PC3;PORTC|=IO_PC5;OCR1A=servo2;}
	if(servocount==3){PORTC&= ~IO_PC5;PORTC|=IO_PC7;OCR1A=servo1;}
	if(servocount==4){PORTC&= ~IO_PC7;PORTD|=IO_PD5;OCR1A=servo5;}
	if(servocount==5){PORTD&= ~IO_PD5;OCR1A=250*12;}
	servocount++;
	if(servocount>5) servocount=0;
	}
/*
	Timer 1 is free for your application!
	Prescaler = 64, CTC mode, 4µs resolution
*/
	TCCR1A = (0<<WGM10)
			|(0<<WGM11)
			|(0<<COM1A1)
			|(0<<COM1B1);
			
	TCCR1B = (1<<WGM12)
			|(0<<CS12)
			|(1<<CS11)
			|(1<<CS10);
	OCR1A = 1000;	
// Enable timer interrupts:
	TIMSK =   (1 << OCIE0)|(1<<OCIE1A); 	
uint16_t servo1=350;
uint16_t servo2=350;
uint16_t servo3=250;
uint16_t servo4=500;
uint16_t servo5=350;

uint8_t servocount=0;
void servo (uint8_t nummer,uint16_t puls)
{
if (puls<200) puls=200;		//beveiliging tegen extreme pulslengte!!
if (puls>550) puls=550;		//beveiliging tegen extreme pulslengte!!
if(nummer==1) servo1=puls;
if(nummer==2) servo2=puls;
if(nummer==3) servo3=puls;
if(nummer==4) servo4=puls;
if(nummer==5) servo5=puls;
}
Timer 1 wird genutzt um servopulsen zu generieren. Forteil : lauft ohne uberhead, da wird nur eine Timerinterrupt getriggerd jeden 1 bis 2mS, je nach den Pulslaenge von actuele Servo.