Es lag an dem Programm vom I2C von der Wiki Seite. Da waren die Werte WriteI2C und ReadI2C drin.

ret = StartI2C(pcf8591_address+WriteI2C); // Sende Start Condition
ret = StartI2C(pcf8591_address+ReadI2C); // Sende Start Condition

Diese sind aber Falsch, es muss so aussehen.
ret = StartI2C(pcf8591_address+WRITE);
ret = StartI2C(pcf8591_address+READ);

Ich bekomme aber bei ret immer den Wert 1. Ich habe den Code so geändert, dass er immer auf 0 geht aber das ist ja eigentlich so nicht gedacht. Hier mal der Code:
Code:
unsigned char read_pcf8591_adc(unsigned char adc)
{
    unsigned char ret;
    unsigned char byte = 0;

    ret = StartI2C(pcf8591_address+WRITE);  // Sende Start Condition
    ret=0;
    if (ret == 0)
       ret = WriteI2C(adc);                // Senden des Control Bytes startet die A/D Wandlung
    StopI2C();                            // Sende Stop Condition, Bus freigeben
    Sleep(10);                             // Warten bis A/D Wandlung benedet (mind. 90µs)
    ret = StartI2C(pcf8591_address+READ);  // Sende Start Condition
    ret=0;
    if (ret == 0)
    {
       // Mehrmaliges Lesen um alte A/D Werte zu ignorieren
       byte = ReadI2C(1);      // Lese Byte + acknowledge
       byte = ReadI2C(0);      // Lese Byte + no acknowledge
    }
    else ret = 3;
    StopI2C();                           // Sende Stop Condition, Bus freigeben
    return byte;
}
Kann man das US Modul umbauen, dass dieser einfach eine Spannung wiedergibt, wenn etwas in 10 cm entfernung ist?