Ich komm einfach nicht weiter.
Mein Prog 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 Impulsgeber PD4
#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----------------------------------
uint8_t count=0;
int8_t posi=25, a=1, ADC_Switch=1;
uint16_t LDR, memo=2000;
uint16_t IR_Messung[51];

//---------------------------------Interruptroutinen----------------------------------
ISR(TIMER1_COMPB_vect)
{
count++;
}

ISR(ADC_vect)
{
if (ADC_Switch)
  {
  ADC_Switch=0;
  LDR = ADC;
  ADMUX = 0x01;    //Auf ADC1 umschalten
  ADCSRA |= (1<<ADSC);    //Nach aufzeichnen Ergebniss in LDR, neue Messung starten
  }
else
  {
  ADC_Switch=1;
  IR_Messung[posi] = ADC;
  ADMUX = 0x00;    //Auf ADC0 umschalten
  ADCSRA |= (1<<ADSC);    //Nach aufzeichnen Ergebniss in IR_Messung, neue Messung starten
  }
}

//---------------------------------Helligkeitsmessung---------------------------------
void helligkeitsmessung(void)
{
if (LDR<=140)
  {
  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)
{
uint8_t i, farest=0;

OCR0=100; //255=Max (Links)
OCR2=100; //255=Max (Rechts)

//if (IR_Messung > 150)
if (posi<=0)
  {
  for (i=0; i<=51; i++)
    {
    if (IR_Messung[i] < memo)
	  {
	  memo=IR_Messung[i];
	  farest=i;
	  }
    }
  }
if (farest<=15)
  {
  PORTC |= (1<<Motor_Rechts_Rueck);
  }
else if (farest>=35)
  {
  PORTC |= (1<<Motor_Links_Rueck);
  }
else
  {
  PORTC &= ~((1<<Motor_Links_Rueck)|(1<<Motor_Rechts_Rueck));
  }
}
  
//-------------------------------------initialisierungen---------------------------------------
void Initial_ADC(void)
{
ADMUX |= 0x00;   //AREF, resultat rechtsbündig, ADC-Eingang ADC0
ADCSRA |= ((1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0));  //ADC eingeschaltet, Teilungsfaktor..
ADCSRA |= (1<<ADIE);
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);
//DDRD |= (1<<Impulsgeber);
//PORTD |= (1<<Impulsgeber);
//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_ADC();
Initial_IR_Servo();
Initial_Motoren();
ADCSRA |= (1<<ADSC);    //Erste Messung starten

sei(); //Globales Interrupt gesetzt

while(1)
  {
  if (count)
    {
	count=0;
    helligkeitsmessung();
    IR_Servo = IR_Servoposition();
    Motorsteuerung();
	}
  }
return 0;  //wird nie erreicht
}
Warum geht das bloß nicht???
Eine Kette dreht vorwärts und die andere rückwärts.
Es ändert sich auch nichts und der Sensor reagiert auch auf nichts.
Hoffe das kuckt sich noch jemand an.

@robocat:
Das war schon richtig so. Hab im datenblatt noch mal nachgesehen.
Aber jetzt benutz ich das ja gar nicht mehr.

MfG Jan