Ich könnte echt durchdrehen.
kann das sein das man den Interrupt wieder löschen muss?
Der Servo bleibt in einer Stellung stehen. Und zwar immer in der wo (Count+440) steht zB. bei 440. wenn man Count+490 eingibt fährt er auf 490.
Das heißt Count wird nicht hochgezählt.
Ich weiß nicht warum.
Hab das Programm nochmal leicht umgeschrieben.
Hier der Code:
Code:
#include <avr/io.h>
#include <stdint.h>
#include <avr/interrupt.h>
//#include <util/delay.h>

#ifndef F_CPU
#define F_CPU 16000000
#endif

#define Scheinwerfer 0
#define Rueckleuchten 1
#define PWM_ServoPort 5


//Globale Variablen
uint8_t a;
uint16_t i;
//uint16_t count;  //hier geändert (wegkommentiert)
//void IR_Servosteuerung(uint16_t i);  //hier geändert (wegkommentiert)

//---------------------------------Interrupt-routinen---------------------------------
ISR(TIMER1_OVF_vect) //Diese Routine soll bei Overflow von Timer1 ausgeführt werden
{
while (a==0) 
  {
  //IR_Servosteuerung(i);  //hier geändert (wegkommentiert)
  i=i+1;
  if (i==50)
    {
	a=1;
	}
  }
while (a==1)
  {
  //IR_Servosteuerung(i);  //hier geändert (wegkommentiert)
  i=i-1;
  if (i==0)
    {
	a=0;
	}
  }
}

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

ADCSRA |= (1<<ADSC);
  while (ADCSRA & (1<<ADSC))
    {
	;
	}
  LDR = ADCL;
  LDR += (ADCH<<8);
  
  if (LDR<150)
    {
    PORTD |= (1<<Scheinwerfer);
    PORTD |= (1<<Rueckleuchten);
    }
  if (LDR>160)
    {
	PORTD &= ~(1<<Scheinwerfer);
	PORTD &= ~(1<<Rueckleuchten);
	}
}

//-------------------------------------IR_Servosteuerung---------------------------------------
void IR_Servosteuerung(uint16_t count)  //hierher wird der Wert von i  
                                                            //übergeben
{
OCR1A=(count+440); //440=min, 490=max
}

//-------------------------------------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
TCCR1B = (1<<CS12); 	//Prescaler 256
DDRD |= (1<<PWM_ServoPort); 
PORTD |= (1<<PWM_ServoPort);
}

//---------------------------------------Hauptprogramm---------------------------------
int main(void)
{
Initial_ADC0();
Initial_IR_Servo();
a=0;
i=0;

while(1)
  {
  cli();    //hier geändert
  helligkeitsmessung();
  IR_Servosteuerung(i);  //hier geändert
  sei();  //hier geändert
  }
}
Aus dem AVR-GCC-Tutorial werde ich irgendwie auch nicht schlau.

MfG Jan