Hallo,
ich hab ein Problem mit folgenden Code:
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 ...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; }







Zitieren
Hoffentlich liegt das Ziel auch am Weg 


Lesezeichen