Ik zit al een paar uren letterlijk te prutsen met een LM76 sensor.
Volgens de datasheet kan ik de volgende temperaturen verwachten:
Mijn arduino test sketch laat dit zien:
19:32:57.923 -> 0BF0
19:32:59.920 -> 0BE8
19:33:01.916 -> 0BF0
19:33:03.912 -> 0BF0
19:33:05.908 -> 0BE8
19:33:07.902 -> 0BE8
19:33:09.898 -> 0BF0
19:33:11.893 -> 0BE8
19:33:13.888 -> 0BF0
19:33:15.883 -> 0BF0
19:33:17.881 -> 0BF0
19:33:19.875 -> 0BF0
Dat zou dus een temperatuur boven de 130 graden zijn (en ik meet bij kamertemperatuur).
Ik ben volledig blind gestaard op deze code maar zie niet waar het probleem zit. Vaak kijkt iemand anders er naar en zegt binnen een minuut wat je fout doet.
Wie ziet mijn stommiteit in een oogopslag
Hieronder de code:
code:
#include <Wire.h>
#define LM76_REGISTER_TEMP 0
#define LM76_BASE_ADDRESS 0x48
uint8_t _LM76_address;
void setAddress( uint8_t bit_A0, uint8_t bit_A1 ) {
// Change address according to A0-A1
_LM76_address = LM76_BASE_ADDRESS | ( ( bit_A0 & 0b00000001 ) << 0 )
| ( ( bit_A1 & 0b00000001 ) << 1 );
}
uint16_t getTemp16() {
// get the temperature from the device
return read16bit( LM76_REGISTER_TEMP );
}
uint16_t read16bit( uint8_t address ) {
Wire.beginTransmission( _LM76_address );
Wire.write( address );
Wire.endTransmission();
Wire.requestFrom( _LM76_address, (uint8_t)2 );
uint16_t t = Wire.read() << 8;
t |= Wire.read();
return t;
}
void setup() {
Serial.begin( 115200 );
Wire.begin();
setAddress( 1, 1 );
}
void loop() {
char buf[16];
sprintf( buf, "%04X", getTemp16() );
Serial.println( buf );
delay( 2000 );
}