Moin Moin,
da bin ich mal wieder..
Habe gerade einen neuen Temperatursensor vor mir liegen, den (STS3x)..
Der sendet mir seine Temperatur in 3 Bytes zurück.
Byte 1: Temperatur MSB
Byte 2: Temperatur LSB
Byte 3: CRC
Nun kommt es ab und zu mal vor, dass die Temperatur von gut und böse liegt.
Ich muss dazu sagen, dass ich jeweils den jeh kleinsten gemessenen Wert speichere sowie den jeh größte Wert.
Ab und zu sehe ich auf dem Display (7 Segment) das die Temperatur (die jeh größte) deutlich größer als 40° angeblich sein soll.. Und das mit CRC..
Mache ich was falsch?
Wie unterdrücke ich das am besten?
Hier mal meine Routine zum auslesen des Sensors mit CRC..
CodeBox C
da bin ich mal wieder..
Habe gerade einen neuen Temperatursensor vor mir liegen, den (STS3x)..
Der sendet mir seine Temperatur in 3 Bytes zurück.
Byte 1: Temperatur MSB
Byte 2: Temperatur LSB
Byte 3: CRC
Nun kommt es ab und zu mal vor, dass die Temperatur von gut und böse liegt.
Ich muss dazu sagen, dass ich jeweils den jeh kleinsten gemessenen Wert speichere sowie den jeh größte Wert.
Ab und zu sehe ich auf dem Display (7 Segment) das die Temperatur (die jeh größte) deutlich größer als 40° angeblich sein soll.. Und das mit CRC..
Mache ich was falsch?
Wie unterdrücke ich das am besten?
Hier mal meine Routine zum auslesen des Sensors mit CRC..
CodeBox C
uint8_t tmp[3]={0x00,0x00,0x00}; int16_t sts3x_read(void){ #define MSB 0 #define LSB 1 #define CRC 2 i2c_start_wait((0x4a<<1)+I2C_WRITE); i2c_write(0x20); i2c_write(0x2f); i2c_rep_start((0x4a<<1)+I2C_READ); tmp[MSB]=i2c_readAck(); tmp[LSB]=i2c_readAck(); tmp[CRC]=i2c_readNak(); i2c_stop(); crc_glob = tmp[CRC]; // only for debug (usart output) uint8_t crc=0xff; crc=_crc8_ccitt_update(crc,tmp[0]); crc=_crc8_ccitt_update(crc,tmp[1]); /* data correct received? */ if (crc==tmp[2]){ return (uint16_t)tmp[0]<<8|tmp[1]; } return -1; }