Gut, mit dem Timing dampft es etwas.
Für 1 mS prescale 64 Preload 6
zähler = 0 -->Pulse on
zähler = 20 ----> zähler reset
else ---->pulse off
d.h
1. mS PULSE ON
2. mS ---> 19. mS PULSE ON
20 ms zähler reset
Code:
#include <avr/io.h> 
#include <avr/signal.h> 
#include <avr/interrupt.h> 
#include <inttypes.h> 
#include <math.h> 

volatile unsigned char servowert; 
volatile unsigned char puls; 
volatile unsigned char zaehler; 

int set_servo(volatile uint8_t pos) 
   { 
   servowert = (pos/180) + 1; 
   } 
    
int main(void) 
   { 
   zaehler = 0; 
   sei(); 
   DDRB = (1<<PB0); 
   PORTB = (1<<PB0); 
   //Timer0 übernimmt die Highphase 
   //muss 1ms sein also 25 Takte bei einem Prescaler von 64 
   puls = 25; 

   TCCR0 = (1<<CS01)|(1<<CS00); 
   TCNT0 = 6; 
   for(;;) 
   { 
   } 
} 
    
SIGNAL(SIG_OVERFLOW0) 
{ 
	switch(zaehler)
	{ 
	      case 0:         
	 //     case 1:         das da aktivieren für 2 mS Servo 
		PORTB |= (1<<PB0); 
    	                zaehler++; 
		break;
	      case 20:       
		zähler = 0;   		
		break;
	      default:
		PORTB &= ~(1<<PB0);  	
    	                zaehler++; 
		break;	
      	} 
	TCNT0 = 6; 
}
Aber viel kannst du mit dem mS Timing nicht machen, ausser ganz links und ganz rechts