hi Jordi,

ich habe nun mit dem code etwas "herumgespielt", es funktioniert bei mir (messung und servo auch):

Code:
#include "RP6ControlLib.h"
#include "RP6I2CmasterTWI.h"
#include "RP6Control_MultiIOLib.h"
#include "RP6Control_I2CMasterLib.h"
#include "RP6Control_MultiIO.h"
#include "RP6Control_LFSBumperLib.h"
#include "RP6Control_OrientationLib.h"
#include "RP6Stopwatch0Lib.h"
#include "RP6ControlServoLib.h"
#include "standard.h"


#define I2C_RP6_BASE_ADR 10

uint16_t servopos, range;

//ULTRASONIC FUNCTIONS #######################################

void task_US_SW()
{
    DDRC |= IO_PC6; // IO_PC6 Ausgang
    PORTC |= (1<<PORTC6); // IO_PC6 high IO_PC6;
    _delay_us(10); // 10uS warten
    PORTC &= (0<<PORTC6); // IO_PC6 low ~IO_PC6;

    DDRC &= ~IO_PC5; // IO_PC5 Eingang
    while(!(PINC & IO_PC5)); // Warten bis steigende Flanke an IO_PC5
    setStopwatch01(0);
    while(PINC & IO_PC5); // Warten bis fallende Flanke an IO_PC5
    range = getStopwatch01() * 1.67; // Wert der Stoppuhr * 1,67 = Abstand in cm.
}



void displayData()
{

    writeString_P("Abstand:");
    writeInteger(range, DEC);
    writeString_P(" cm\n");

    //sound(170,40,0);
}

//END OF ULTRASONIC FUNCTIONS ################################

int main(void)
{

    initRP6Control();
    multiio_init();
    initLCD();

    setLEDs(0b111111);
    mSleep(500);
    setLEDs(0b000000);

    I2CTWI_initMaster(100);
    I2CTWI_setTransmissionErrorHandler(I2C_transmissionError);

    showScreenLCD(" RP6Control M32", " hc-sr04 plus servo"," jordi","PC5 und PC6");
    mSleep(1500);
    clearLCD();

    setServoPower(1);
    PCA9685_init(50);
    servopos = (SERVO1_LT);

    startStopwatch01();

    while(true)
    {

        PCA9685_set(1, servopos);

        servopos += 5;
        mSleep(2000);

        if (servopos > (SERVO1_RT)) servopos = (SERVO1_LT);

        task_US_SW();

        displayData();

    }
    return 0;
}
ich habe den code nach meinem verständnis angepasst, weil ich ein paar sachen in Deinem code nicht verstanden habe:

- die funktion displayData(range) innerhalb der messfunktion - warum?

- die variablen r und range - warum zwei, warum innerhalb der funktion deklariert/definiert?

die messwerte, die ich bekomme sind nachvollziehbar, das einzige was mich noch stört ist das verhalten meines servos: es kommen erstmal 4 messwerte bevor die erste servobewegung stattfindet. Verstehe ich nicht, liegt aber nicht an Deinem, sondern an meinem code ...