soooooooo =)
ich hab mir das alles nochmal angeschaut, und tatsächlich hat es bei mir auch nicht funktioniert (was zu erwarten war).
Komisch war es dennoch, denn... der Servo ließ sich per Hand zwar in die eine Richtung drehen, in die andere sperrte er aber. Ich kenn mich zwar mit der Elektronik von Servos nichtt richtig aus, aber es deutet schon darauf hin, dass da irgendwo was kleines schief läuft.
Dann hab ich mich nochmal an deine Spannungsspitze erinnert und versucht, in der Software eine Erklärung dafür zu finden, und wurde fündig (zumindest glaube ich, dass es "diese" Spitze war (hab wie gesagt grad kein Oszi zur Hand).
Und zwar ist das Problem folgendes: Beim Overflow-Interrupt wird ja der Timer abgestellt, was dazu führt, dass die PWM-Unit nicht mehr die Kontrolle über den Port hat, sondern sie an die normalen Portbefehle übergibt. Und dabei kommt es wahrscheinlich zu dieser Spitze.
Wie ändert man das nun? Ganz einfach! Man schaltet den Timer nicht mit dem overflow-interrupt, sondern mit dem compare-interrupt ab. Zu den Zeitpunkt macht die Spannungsspitze nämlich nix aus =)

Ich hab den Code ausprobiert, er funktioniert!

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


/*----------------------------------------------------------------------------------------*/
//PWM
/*----------------------------------------------------------------------------------------*/

//750 = 1.5ms
volatile int schulter= 750;
volatile int huefte = 750;
volatile int knie = 750;


void pwm_init(int schulter, int huefte, int knie);   //PWM_init Funktion
//void pwm_chance(int schulter, int huefte, int knie);//Anpassen der PWM grössen

/*----------------------------------------------------------------------------------------*/
//MAIN AUFRUF
/*----------------------------------------------------------------------------------------*/

int main(void)
{
   DDRB = 0xFF;                                 //B... AUSGANG
   PORTB &= ~((1<<PORTB1) | (1<<PORTB2) | (1<<PORTB3));   //B.. Low

   sei();                                        //Globale Interupts zulassen
   pwm_init(schulter, huefte, knie);                  //PWM initialisieren



   while(1)
   {


   }

}


ISR(TIMER2_COMP_vect)   //Überlaufinterupt Timer2
{
   TCCR2 = 0x00;   //Löschen von Timer2
}

ISR(TIMER1_CAPT_vect)   //Captureinterupt Timer1
{
   TCNT2 = 0;
   TCCR2 = (1<<WGM20) | (1<<WGM21) |(1<<COM21) | (1<<CS22) | (1<<CS20);    //Setzten von Timer2
}



void pwm_init(int schulter, int huefte, int knie) //PWM initialisieren
{
   TIMSK |= (1<<TICIE1) | (1<<TOIE2); //Interupt initialisieren, freischalten

   //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 = 10000;                  //Periodendauer Servo 20ms
   OCR1A = schulter;                  //Servosignal (Port 0, Schulter)
   OCR1B = huefte;                  //Servosignal (PORT 1, Hüfte)

   //Timer 2 (Port 2)
   TCCR2 = (1<<WGM20)| (1<<WGM21) | (1<<COM21) | (1<<CS22) | (1<<CS20);    //Fast PWM
   OCR2 = (knie/8);                     //Servosignal (Port2, Knie)

}
Gruß, Yaro