Hallo an alle
So es funktioniert jetzt so einigermaßen. Nur die Temperaturs stimmt noch nicht wirklich.
Hier nun die read Funktion:
Der Prototyp von i2cGetReceivedByte():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(); }
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??Code:inline u08 i2cGetReceivedByte(void) { // retieve received data byte from I2C TWDR return( inb(TWDR) ); }
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







Zitieren

Lesezeichen