also, es funktioniert, zumindest teilweise. Ich musste (wegen code:blocks) noch ein paar libs inkludieren und auch die multiIO initialisieren, jetzt lässt sich der code bei mir auch starten:
die jeweiligen messungen werden durch die tasten der m32 ausgelöst, allerdings wird beim druck auf die taste 2 das vorhergehende ergebnis der taste 1 ausgegeben. Also muss man die ausgaben die durch die taste 1 entstehen noch irgendwo "nullen"...Code://#include "RP6ControlLib.h" #include "RP6ControlLib.h" #include "RP6I2CmasterTWI.h" #include "RP6Control_MultiIOLib.h" #include "RP6Control_I2CMasterLib.h" #include "RP6Control_LFSBumperLib.h" #include "RP6ControlServoLib.h" #include "RP6Control_OrientationLib.h" //#include "standard.h" /*****************************************************************************/ uint16_t distanz_PC5 = 0; volatile uint16_t zeit_PC5 = 0; volatile uint16_t timestamp_last_PC5 = 0; uint16_t distanz_PC6 = 0; volatile uint16_t zeit_PC6 = 0; volatile uint16_t timestamp_last_PC6 = 0; /*****************************************************************************/ ISR(TIMER1_CAPT_vect) { //Wenn steigende Flanke if(TCCR1B & (1<<ICES1)) { //Flankenerkennung auf fallend TCCR1B ^= (1<<ICES1); //aktuelen timer-wert speichern timestamp_last_PC5 = ICR1; timestamp_last_PC6 = ICR1; } //fallende Flanke else { //Flankenerkennung auf steigend TCCR1B ^= (1<<ICES1); //Laufzeit = aktueller timerwert - vorheriger timerwert zeit_PC5 = ICR1 - timestamp_last_PC5; zeit_PC6 = ICR1 - timestamp_last_PC6; } } /*****************************************************************************/ void HCSR04_vorn (void) { // Messung DDRC |= (1 << PC5);//Trig als Ausgang PORTC &= ~(1<<PC5);//TRIG auf low DDRD &= ~(1<<PD6);//Echo als Eingang PORTD &= ~(1<<PD6);//ECHO pullup AUS //Timer konfigurieren TCCR1A = 0; // normal mode, keine PWM Ausgänge //Noise Canceler aktivieren, Flankenerkennung auf steigende, Prescaler auf 64 TCCR1B |= (1<<ICNC1) | (1<<ICES1) | (1<<CS11) |(1<<CS10); //ICP Interrupt aktivieren TIMSK |= (1<<TICIE1); //Globale Interrupts aktivieren sei(); distanz_PC5 = (zeit_PC5*4)/58; mSleep(100); // Trig PORTC |= (1<<PC5);//Trig high _delay_us(12); PORTC &= ~(1<<PC5);//TRIG auf low _delay_ms(50); //Werte ausgeben writeString("zeit_PC5: "); writeIntegerLength(zeit_PC5, DEC, 4); writeChar('\n'); writeString("distanz_PC5: "); writeIntegerLength(distanz_PC5, DEC, 4); writeChar('\n'); mSleep(2000); } /*****************************************************************************/ void HCSR04_hinten (void) { // Messung DDRC |= (1 << PC6);//Trig als Ausgang PORTC &= ~(1<<PC6);//TRIG auf low DDRD &= ~(1<<PD6);//Echo als Eingang PORTD &= ~(1<<PD6);//ECHO pullup AUS //Timer konfigurieren TCCR1A = 0; // normal mode, keine PWM Ausgänge //Noise Canceler aktivieren, Flankenerkennung auf steigende, Prescaler auf 64 TCCR1B |= (1<<ICNC1) | (1<<ICES1) | (1<<CS11) |(1<<CS10); //ICP Interrupt aktivieren TIMSK |= (1<<TICIE1); //Globale Interrupts aktivieren sei(); distanz_PC6 = (zeit_PC6*4)/58; mSleep(100); // Trig PORTC |= (1<<PC6);//Trig high _delay_us(12); PORTC &= ~(1<<PC6);//TRIG auf low _delay_ms(50); //Werte ausgeben writeString("zeit_PC6: "); writeIntegerLength(zeit_PC6, DEC, 4); writeChar('\n'); writeString("distanz_PC6: "); writeIntegerLength(distanz_PC5, DEC, 4); writeChar('\n'); mSleep(2000); } /*****************************************************************************/ void taster_M32(void) { uint8_t key = getPressedKeyNumber(); if(key) { while(getPressedKeyNumber()); switch(key) { case 1: setLEDs(0b0001); HCSR04_vorn(); break; case 2: setLEDs(0b0010); HCSR04_hinten(); break; } } } /*****************************************************************************/ int main(void) { // initRP6Control(); initRP6Control(); multiio_init(); initLCD(); while(true) { taster_M32(); } return 0; }
ansonsten ähnelt die situation meinem vorhergehenden test, wenn ich auf PD6 die Sensoren umstecke, läufts, wenn beide Sensoren angeschlossen sind - nicht...
die ausgabe im terminal:
Code:Terminal cleared! zeit_PC5: 0694 distanz_PC5: 0047 zeit_PC6: 0694 distanz_PC6: 0047 zeit_PC5: 0694 distanz_PC5: 0047 zeit_PC6: 0694 distanz_PC6: 0047







Zitieren

Lesezeichen