Hallo

Ich benutze den Servo PWM code vom Wiki und wenn der wie im Wiki beschrieben alle 10uS aufgerufen wir geht das ganz schön in die Rechnenzeit.


Hier der "Wiki" code wobei meiner noch auf 2 Servos ausgebohrt wurde.




Code:
#define SERVOPIN 7
#define SERVOPORT PORTD
#define DDRSERVO DDRD

volatile unsigned char servopos;

void servo_init()
{
	TIMSK|=(1<<OCIE2);
	TCCR2 |= (1<<WGM21) | (1<<CS20);	//Prescale=1, CTC mode
	OCR2 = F_CPU/100000;			//alle 10µS ein IRQ
	DDRSERVO|=(1<<SERVOPIN);
};

ISR(TIMER2_COMP_vect)
{
	static int count;
	if(count>servopos)SERVOPORT&=~(1<<SERVOPIN);
	else SERVOPORT|=(1<<SERVOPIN);
	if(count<2000+servopos)count++;
	else count=0;
};

lg manhunt