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:
Kann man das US Modul umbauen, dass dieser einfach eine Spannung wiedergibt, wenn etwas in 10 cm entfernung ist?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; }







Zitieren

Lesezeichen