also ich hab mir die zeit genommen. Vorausgeschickt - es funktioniert nur wenn am echo-pin (ICS) umgesteckt wird. Aber es kann durchaus an meinen programmierkünsten liegen. Von den timern verstehe ich nämlich immer noch wenig bis nix...
Klicke auf die Grafik für eine größere Ansicht

Name:	2014_12_28_HC-04_2-fach.jpg
Hits:	9
Größe:	77,0 KB
ID:	29558

folgendes habe ich jetzt gemacht:

die funktionen um PC5 und PC6 erweitert:

Code:
/********************* ULTRASCHALL & HC-SR-04 ******************************/

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;
    }

}



/*************** trig ***************************/

void trig_PC5(void)
{
    PORTC |= (1<<PC5);//Trig high
    _delay_us(12);
    PORTC &= ~(1<<PC5);//TRIG auf low
}

void trig_PC6(void)
{
    PORTC |= (1<<PC6);//Trig high
    _delay_us(12);
    PORTC &= ~(1<<PC6);//TRIG auf low
}

/***************** messung_SR_04 ********************/

void messung_SR_04_PC5 (void)
{
    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;

}


void messung_SR_04_PC6 (void)
{
    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;

}
die variablen im hauptprogramm:

Code:
extern volatile uint16_t zeit_PC5, zeit_PC6;
extern uint16_t distanz_PC5, distanz_PC6;

und das ist die eigentliche abfrage:
Code:
 case 2://
                setLEDs(0b0010);
                writeString_P("\n\n HC-SR-04 PC5_trig & PC6_trig\n\n");
                writeChar('\n');
                initRP6Control();
                multiio_init();
                initLCD();

                setCursorPosLCD(1, 0);
                writeStringLCD("HC-SR04 messung");
                mSleep(1500);


                while(1)
                {

                                    //Messung starten
                    messung_SR_04_PC5 ();
                    mSleep(100);
                    //Signal auslösen
                    trig_PC5();
                    _delay_ms(50);

                    //Werte ausgeben

                    writeString("zeit_PC5:      ");
                    writeIntegerLength(zeit_PC5, DEC, 4);
                    writeString("     distanz_PC5:    ");
                    writeIntegerLength(distanz_PC5, DEC, 4);
                    writeChar('\n');
                    mSleep(2000);

                    //Messung starten
                    messung_SR_04_PC6 ();
                    mSleep(100);
                    //Signal auslösen
                    trig_PC6();
                    _delay_ms(50);

                    //Werte ausgeben

                    writeString("zeit_PC6:      ");
                    writeIntegerLength(zeit_PC6, DEC, 4);
                    writeString("     distanz_PC6:    ");
                    writeIntegerLength(distanz_PC6, DEC, 4);
                    writeChar('\n');
                    mSleep(2000);


                    /**************************/
                    uint8_t key_1 = getMultiIOPressedButtonNumber();
                    key_1 = getMultiIOPressedButtonNumber();
                    if(key_1 != 0) break;

                    /**************************/
                }

                break;