Ich bin jetzt wieder zu Hause.
Hab eben eure ganzen Vorschläge mal in mein Prog eingearbeitet
das sieht jetzt so aus:
Code:
#include <avr/io.h>
#include <stdint.h>
#include <avr/interrupt.h>

#ifndef F_CPU
#define F_CPU 16000000
#endif

#define Scheinwerfer PD0
#define Rueckleuchten PD1
#define PWM_ServoPort PD5
#define IR_Servo OCR1A
#define Motor_Links PB3
#define Motor_Rechts PD7
#define Motor_Links_Rueck PC0
#define Motor_Rechts_Rueck PC1

//---------------------------------Globale Variablen----------------------------------
volatile uint8_t a=1, count=0, x=0;
volatile int8_t posi=25; 

//---------------------------------Interruptroutinen----------------------------------
ISR(TIMER1_COMPB_vect)
{
count++;
if (count>=2)
  {
  x=1;  //Globales Flag???
  }
}

//---------------------------------Helligkeitsmessung---------------------------------
void helligkeitsmessung(void)
{
uint16_t LDR;

ADCSRA |= (1<<ADSC);
  while (ADCSRA & (1<<ADSC))
    {
    ;
    }
	LDR = ADC;
  
  if (LDR<150)
    {
    PORTD |= (1<<Scheinwerfer);
    PORTD |= (1<<Rueckleuchten);
    }
  if (LDR>190)
    {
	PORTD &= ~(1<<Scheinwerfer);
	PORTD &= ~(1<<Rueckleuchten);
	}
}

//-------------------------------------IR_Servosteuerung---------------------------------------
int IR_Servoposition(void)
{
if (a>=1)
  {
  posi++;
  if (posi>=50)
    {
    a=0;
    } 
  }
else
  {
  posi--;
  if (posi<=0)
    {
    a=1;
    }
  }
return ((posi)+440);   //440=min, 490=max
}

//--------------------------------------Motorsteuerung-----------------------------------------
void Motorsteuerung(void)
{
OCR0=0; //255=Max (Links)
OCR2=0; //255=Max (Rechts)
}

//-------------------------------------initialisierungen---------------------------------------
void Initial_ADC0(void)
{
ADMUX |= 0x00;	//AREF, resultat rechtsbündig, ADC-Eingang ADC0
ADCSRA |= ((1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0));  //ADC eingeschaltet, Teilungsfaktor..
DDRD |= ((1<<Scheinwerfer) | (1<<Rueckleuchten));
}

void Initial_IR_Servo(void)
{
TCCR1A |= ((1<<WGM11)|(1<<COM1A1)|(1<<COM1A0)); //9-Bit PWM, Inverted Mode OC1A
TCCR1A |= ((1<<COM1B1)|(1<<COM1B0)); //Inverted Mode OC1B
TCCR1B |= (1<<CS12); 	//Prescaler 256
TIMSK |= (1<<OCIE1B);
DDRD |= (1<<PWM_ServoPort); 
PORTD |= (1<<PWM_ServoPort);
OCR1B=500; //beliebige zeit (irgendwas unter ner ms)
}

void Initial_Motoren(void)
{
//Ausgang Initialisieren (OC0)
DDRB |= (1<<Motor_Links); //Setzen als Ausgang
PORTB |= (1<<Motor_Links); //Pull-Up

//Ausgang Initialisieren (OC2)
DDRD |= (1<<Motor_Rechts); //Setzen als Ausgang
PORTD |= (1<<Motor_Rechts); //Pull-Up

//Initialisierung der Ausgänge für Rückwärtsfahren
DDRC |= ((1<<Motor_Links_Rueck)|(1<<Motor_Rechts_Rueck));

//Initialisierung PWM für OC0
TCCR0 |= ((1<<WGM01)|(1<<WGM00)); //Fast PWM
TCCR0 |= (1<<COM01); //Clear Output on Compare, Set on Top
TCCR0 |= ((1<<CS02)|(1<<CS00)); //CLK/1024 (15,625kHz, 64µs/periode)
//Compare Register ist OCR0

//Initialisierung PWM für OC2
TCCR2 |= ((1<<WGM21)|(1<<WGM20)); //Fast PWM
TCCR2 |= (1<<COM21); //Clear Output on Compare, Set on Top
TCCR2 |= ((1<<CS22)|(1<<CS21)|(1<<CS20)); //CLK/1024 (15,625kHz, 64µs/periode)
//Compare Register ist OCR2
}

//---------------------------------------Hauptprogramm---------------------------------
int main(void)
{
Initial_ADC0();
Initial_IR_Servo();
Initial_Motoren();
sei(); //Globales Interrupt gesetzt

while(1)
  {
  helligkeitsmessung();
  if (x>=1)
    {
    IR_Servo = IR_Servoposition();
	x=0;
	count=0;
	}
  Motorsteuerung();
  }
}
Das problem ist, das der Servo immer noch solche macken macht, aber glaub nicht mehr so doll. Mal fährt er bis links dann in die mitte und wieder nach links, mal zuckt der etc.
Hab eben mal den ganzen Motorkram mal kommentiert, so das das programm ohne den kram abläuft. Da hat der Servo gar nicht gesponnen. Müsste also denke ich was mit dem Motorkram nicht richtig sein. Ich Finde aber nichts. Das mit dem "if statt weil" beim ADC weiß ich auch nicht richtig wie ich das machen soll. Müsste ja dann so sein if (ADCSRA !& (1<<ADSC))
{
LDR = ADC;
}
aber dann bekomme ich fehlermeldungen.
Das mit dem Globalen Flag weiß ich auch nicht was das bringt, außer ne zusätzliche Variable. Hab die x genannt.
Hoffe ihr habt noch tipps.

MfG Jan