So ich habe den Code geändert und die 2 offenen Eingänge auf Masse gezogen. Über das Terminal bekomme ich immer den Wert 255 gesendet, obwohl sich die Spannung an den Eingänger ändert.
Wer hat da ne Idee?
Code:
#include "asuro.h"
#include "i2c.h"
#include "myasuro.h"
#define pcf8591_address 0x90 // I2C Adresse des PCF8574
//liest einen ADC Wert vom PCF8591
unsigned char read_pcf8591_adc(unsigned char adc)
{
unsigned char ret;
unsigned char byte = 0;
ret = StartI2C(pcf8591_address+WriteI2C); // Sende Start Condition
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+ReadI2C); // Sende Start Condition
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;
if(ret) byte = 0xEE;
StopI2C(); // Sende Stop Condition, Bus freigeben
return byte;
}
int main(void)
{
unsigned int rled;
unsigned char lled;
Init();
InitI2C();
FrontLED(ON);
while(1)
{
rled = read_pcf8591_adc(0);
lled = read_pcf8591_adc(1);
SerPrint("\r\n Port 1: ");
PrintInt(rled);
SerPrint("\r\n Port 2: ");
PrintInt(lled);
Msleep(500);
}
return 0;
}
Lesezeichen