Hallo an alle
So es funktioniert jetzt so einigermaßen. Nur die Temperaturs stimmt noch nicht wirklich.
Hier nun die read Funktion:
Code:
int lm75_read(void)
{
i2cSendStart();
i2cSendByte(LM75_ADRESS | 1); //Sende Adresse mit read Bit
i2cSendStart();
i2cReceiveByte(FALSE);
temp.high = i2cGetReceivedByte();
i2cReceiveByte(FALSE);
temp.low = i2cGetReceivedByte();
i2cSendStop();
}
Der Prototyp von i2cGetReceivedByte():
Code:
inline u08 i2cGetReceivedByte(void)
{
// retieve received data byte from I2C TWDR
return( inb(TWDR) );
}
temp.low ist ja die Kommastelle. Sie steht linksbündig in der Variable temp.low. Wenn ich sie nach Rechts verschiebe und mit 5 Multipliziere, hab ich die Kommastelle oder??
temp.low = (temp.low>>=7)*5;
Soe meine ich das.
Die High Variable macht mir jedoch noch mehr Sorgen. Ich bekomm immer 0xFF (255) empfangen. Den empfangenen Wert muss ich ja durch 2 Teilen, oder??
125°C entspricht 1111 1010 = 0xFA = 250
25°C enspricht 110010 = 32 = 50
Daraus schleiße ich, dass ich den Wert durch 2 dividieren muss, oder?? Muss ich sonst noch etwas mit der Zahl machen??
Danke im Voraus
Gruß Robert
Lesezeichen