Hallo,

ich hab ein Problem mit folgenden Code:

Code:
#include <C:/Program Files (x86)/NIBObeeLib/include/nibobee/iodefs.h>
#include <C:/Program Files (x86)/NIBObeeLib/include/nibobee/led.h>
#include <C:/Program Files (x86)/NIBObeeLib/include/nibobee/delay.h>
#include <C:/Program Files (x86)/NIBObeeLib/include/nibobee/motpwm.h>
#include <C:/Program Files (x86)/NIBObeeLib/include/nibobee/i2cmaster.h>
#include <C:/Program Files (x86)/NIBObeeLib/include/nibobee/sens.h>

#include <C:/Users/Max/Documents/Atmel Studio/6.1/Beschleunigungssensor/Beschleunigungssensor/BMA020.h>
#include <C:/Users/Max/Documents/Atmel Studio/6.1/Beschleunigungssensor/Beschleunigungssensor/i2c_communicate.c>

#include <avr/io.h>

//Prototyping
void fahren(int16_t, int16_t);
void yAchse(void);
long abstand (long);
void stop(void);

//Variablendeklaration
int16_t speed_l, speed_r;
int8_t sensor_l, sensor_r;
long mess_abs;
long counter=0;
long old=0;

int16_t main()
{
	//Pause vor Start 
	delay(3000);
	
	//Initialisierung
	led_init();
	void i2c_init(void);
	motpwm_init();
	sens_init();
	
	enable_interrupts();
	
	//Timerinitialisierung
	TCCR2 = (1<<CS01);
	TIMSK |= (1<<CS01);
	sei();

	
	//PortC Bit 3 als Ausgang setzen
	DDRC = 0b00001000;

	//PORTC = (1<<PC3); 

//Endlosschleife
	while(1==1)
	{	
	PORTC |= (1<<PC3);
	
	#ifndef TIMER2_OVF_vect
	#endif
		
	//Reset
	led_set(LED_L_RD, 0);
	led_set(LED_R_RD, 0);
	led_set(LED_R_YE, 0);
	
	//Sensoren abfragen
		sensor_l	= sens_getLeft();
		sensor_r	= sens_getRight();	
		
	//Abstand
		if (mess_abs>0)
		{
			led_set(LED_R_YE, 1);
			stop();
			counter=0;
		}
		
	//Beschleunigungssensor

		//Beschleunigungssensor abfragen
		yAchse();
		
		//Abstand messen
		abstand(counter);
		
		//langsam
		if (BMA_Y>0 && speed_l != 80 && sensor_l == 0 && sensor_r == 0)
		{
			speed_l	= 80;
			speed_r	= 80;
			led_set(LED_L_YE, 1);
		}
		
		//schnnell
		if (BMA_Y<10 && speed_l!=400 && sensor_l == 0 && sensor_r == 0)
		{
			speed_l	= 500;
			speed_r = 500;
			led_set(LED_L_YE, 0);
		}
		
		
	//Kolission
		//Kolission detektieren Sensor links
		if (sensor_l != 0)
		{
			led_set(LED_L_RD, 1);
		}

		//Kolission detektieren Sensor rechts
		if (sensor_r != 0)
		{
			led_set(LED_R_RD, 1);
		}
		
		fahren(speed_l, speed_r);
	}
	return 0;
}

//Funktionendeklaration
void fahren(int16_t wert_l, int16_t wert_r)
{
	if (sensor_l || sensor_r != 0 )
	{
		motpwm_setLeft(-400);
		motpwm_setRight(-400);
			
		delay(2000);
		
		motpwm_setLeft(-400);
		motpwm_setRight(400);
		
		delay(500);
	}
	
	motpwm_setLeft(wert_l);
	motpwm_setRight(wert_r);

}

void yAchse(void)
{
	BMA_sleep(0);
	BMA_init(RANGE_2g | BANDWIDTH_25hz);
	BMA_acc_y();
}

long abstand (long counter)
{
	PORTC &= ~(1<<PC3);
	delay(1);
	PORTC |= (1<<PC3);
	delay(1);
	PORTC &= ~(1<<PC3);
	
	old = counter;
	
	while(PINC & (1<<PINC2))
	{
	
	}
	
	mess_abs = counter - old;
	mess_abs *= 136.53 /1000/10;
	
	return mess_abs;
}

void stop(void)
{
	motpwm_setLeft(-400);
	motpwm_setRight(-400);
			
	delay(2000);
			
	motpwm_setLeft(-400);
	motpwm_setRight(400);
	
	motpwm_setLeft(-400);
	motpwm_setRight(400);
	
	delay(500);
	
	//counter =0;
}

#ifndef TIMER2_OVF_vect
#endif
ISR (TIMER2_OVF_vect)
{
	counter = counter + 1;
}
Das Programm läuft im Grunde so wie es soll, lediglich der Timer funktioniert nicht. Genauer mess_abs wird nie größer als 0, kann mir jemand einen Denkanstoss geben? Es geht also um die Funktion abstand und den Timer ...