 
          
 
			
			Hallo,
da ich freiwillig einer inoffiziellen Roboter AG beigetreten bin soll ich nun eineen Asuro mit Ultraschallsensor ausstatten.
Der Bausatz von Arexx.
Jedenfalls registriert er schon was, wenn ich einfach Ultraschall erzeuge und dann die LED anschalte, wenn was am ADC eingang ankommt, wo der ausgang des Verstärkers vom receiver dranne ist.
Wenn ich nun was vor den Sensor halte geht die LED an.
Nun möchte ich die Entfernung zum Objekt messen, dazu habe ich dieses Programm geschrieben:
Die LED leuchtet nicht, also ist die gemessene Entfernung unter 0.01 cm.Code:#include <avr/io.h> #include <util/delay.h> #ifndef F_CPU #warning "F_CPU war noch nicht definiert, wird nun mit 3686400 definiert" #define F_CPU 8000000UL #endif //ADC Funktion Anfang uint16_t reciver = 0; float zeit = 0; uint8_t timer = 0; float distanz = 0; void ADC_Init(void) { TCCR0 = (1<<CS02); //Timer initalisieren uint16_t ergebnis = 0; //ADC zeugs anfang ADMUX = (1<<REFS1) | (1<<REFS0); ADCSRA = (1<<ADPS2) | (1<<ADPS1); ADCSRA |= (1<<ADEN); ADCSRA |= (1<<ADSC); //Warmlaufen while (ADCSRA & (1<<ADSC) ) {} // auf Abschluss der Konvertierung warten ergebnis = ADCW; } //ADC Funktion Ende uint16_t ADC_Read( uint8_t channel )//Einzelmessung { ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F); ADCSRA |= (1<<ADSC); while (ADCSRA & (1<<ADSC) ) {} // auf Abschluss der Konvertierung warten return ADCW; //ADC Zeugs Ende } int main (void) { DDRB = 0xFF; //Ausgang DDRD = 0xFF; //Ausgang //TCCR1A = (1 << WGM10) | (1<<COM1A1)| (1<<COM1B1); //TCCR1B = (1<<CS12) | (1<<CS10); TCCR2 = (1 << WGM20) | (1<<COM21)|(1<<CS22); //PWM register. Vorteiler : 256 //OCR1A = 0; //OCR1B = 0; //OCR2 = 126; //PORTB |= (1<<DDB5);//Vorwärts //PORTD |= (1<<DDD5);//Vorwärts ADC_Init(); while (1) { if (TCNT0 < 62) //wenn timer noch nciht 62 mal gezählt hat { OCR2 = 126; if (timer == 0) { timer = 1; TCNT0 = 0; } } else {OCR2 = 0;} reciver = ADC_Read(2); if (reciver > 1000){ zeit = TCNT0; zeit = zeit * 0.32/1000; distanz = zeit; distanz = distanz * 3/100; timer = 0; } if (distanz > 0.01){PORTB |= (1<< DDB0);} //Led zur Kontrolle else {PORTB &= ~ (1<< DDB0);} //LED aus } }
Egal, was ich amche, also was hinhalte zum reflektieren oder so: die LED will nicht leuchten.
Wo liegt mein Fehler?
Ode rhat hier jemand ein dunkles Ritual abgehalten um die Schallgeschwindigkeit zu ändern?
Ich bin für alle hilfreichen Antworten dankbar.
Gruß
Olaf
Lesezeichen