also ich habs jetzt mit meinen bescheidenen möglichkeiten versucht:
der code läuft einmal durch und gibt vier mal "0000" aus. Ich habe es bereits mit zeitmessung mit stopwatch zu ergründen versucht, danach bleibt der code in der " if ( PINC & (1<<PC5) )" abfrage hängen...Code:#include "RP6ControlLib.h" #include "RP6Control_MultiIOLib.h" uint16_t anfang, ende, dauer, distanz_schleife; void trig_schleife(void) { PORTC |= (1<<PC6);//Trig high _delay_us(12); PORTC &= ~(1<<PC6);//TRIG auf low } void messung_SR_04_schleife (void) { startStopwatch2(); anfang=getStopwatch2(); DDRC |= (1 << PC6);//Trig als Ausgang PORTC &= ~(1<<PC6);//TRIG auf low DDRC &= ~(1<<PC5);//Echo als Eingang PORTC &= ~(1<<PC5);//ECHO pullup AUS (Echo auf LOW) // PORTC |= (1<<PC5);//Echo auf high while(1) { if ( PINC & (1<<PC5) ) { ende = getStopwatch2(); dauer = (ende - anfang); distanz_schleife = (dauer*4)/58; //das stimmt noch nicht! break; } } } int main(void) { initRP6Control(); multiio_init(); initLCD(); while(1) { //Messung starten messung_SR_04_schleife (); //Signal auslösen trig_schleife(); _delay_ms(50); //Werte ausgeben writeString("anfang: "); writeIntegerLength(anfang, DEC, 4); writeString(" ende: "); writeIntegerLength(ende, DEC, 4); writeString(" dauer: "); writeIntegerLength(dauer, DEC, 4); writeString(" distanz: "); writeIntegerLength(distanz_schleife, DEC, 4); writeChar('\n'); mSleep(200); } return 0; }
Habe ich einen logischen fehler eingebaut, stimmt die reihenfolge der programmteile nicht, oder ist schlicht die abfrage des ports falsch? Ich wüsste nicht wo ich noch nachlesen soll, oder was ich noch probieren kann...







Zitieren

Lesezeichen