Klappt leider nicht, es scheint als würde TCCR2 nicht auf Null gesetzt werden. Oder der Timer gleich wieder gestartet.
Mein Code sieht komplett im Moment so aus:

Code:
#include <avr/io.h>         // I/O Port definitions 
#include <avr/interrupt.h>   // Interrupt macros 

#define F_CPU 16000000 
#define timer 236

volatile int ms = 0;

void pwm_init(void) 
{
	TIMSK |= (1<<TICIE1);
		
	//Timer 1 (Port 0/1)
	TCCR1A = (1<<COM1A1)| (1<<COM1B1); 	//Clear OC on Comp Match when up-count, set downcount
	TCCR1B = (1<<WGM13) | (1<<CS11) ;	//PWM Phase abd Freq Correct. Prescaler 8

	ICR1 = 20000;	//Periodendauer Servo 20ms
	OCR1A = 1000;	//Servosignal (Port 0)
	OCR1B = 1000;	//Servosignal (PORT 1)

	//Timer 2 (Port 2)
	TCCR2 = (1<<WGM20)| (1<<COM21) /*| (1<<CS21)*/ | (1<<CS22);
	OCR2 = 150;
	
};

ISR(TIMER2_OVF_vect)
{
	TCCR2 = 0x00;
};

ISR(TIMER1_CAPT_vect)
{
	TCCR2 = (1<<WGM20) | (1<<COM21) | (1<<CS22);
};

/*void timer_init(void)
{
	
	TCCR0 |= (1<<CS01);
	TCNT0 = timer;
	TIMSK |= (1<<TOIE0);
	TIFR |= (1<<TOV0);
};

ISR(TIMER0_OVF_vect)
{
	TCNT0 = timer;
	ms++;
	if (ms >= 1000)
	{
		OCR1A++; 
		ms = 0; 
	}
	if (OCR1A >= 2000)
		OCR1A = 1000;

};*/

int main(void) 
{
	//Initialisierungen
	sei(); //Globale Interupts zulassen
	pwm_init();	//PWM initialisieren
	/*timer_init(); //Timer initialisieren*/

	DDRB |= (1<<PORTB1) | (1<<PORTB2) | (1<<PORTB3);			//B... AUSGANG
	PORTB &= ~((1<<PORTB1) | (1<<PORTB2) | (1<<PORTB3));		//B.. Low

	while(1)
	{

	}

}