Hi, hab den DS1621 auch grad probiert, aber mir scheint daß die Temperatur irgendwie nich ganz stimmt. Wenn sonst keine äußeren Temperatureinflüsse da sind dann müßte er mir doch die Raumtemperatur anzeigen, er zeigt aber 255 an. Wenn ich jetzt den Finger draufdrücke, dann steigt die angezeigte Temperatur von 0 auf ca 30 an, wenn ich den Finger wieder weg nehme dann zeigts mir im Terminal wider 255 an. Kann es sein daß bei der Umrechnung etwas nich stimmt?
Code:$regfile = "m32def.dat" $crystal = 16000000 $baud = 9600 $hwstack = 32 $framesize = 32 $swstack = 32 $lib "i2c_twi.lbx" ' we do not use software emulated I2C but the TWI Config Scl = Portc.5 ' we need to provide the SCL pin name Config Sda = Portc.4 ' we need to provide the SDA pin name I2cinit ' we need to set the pins in the proper state Config Twi = 100000 ' wanted clock frequency 'will set TWBR and TWSR 'Twbr = 12 'bit rate register 'Twsr = 0 'pre scaler bits Dim T As Word Declare Sub Readtemp(byval Device As Byte) Do Call Readtemp(&H90) Wait 1 Loop End Sub Readtemp(byval Device As Byte) Local Deviceread As Byte Local Lowtemp As Byte Local Hightemp As Byte Local Value As Byte Deviceread = Device + 1 'I2csend , Device , &HEE 'kürzere Source, längerer Code I2cstart I2cwbyte Device I2cwbyte &HEE 'Temperaturmessung anstoßen I2cstop 'I2csend , Device , &HAA 'kürzere Source, längerer Code I2cstart I2cwbyte Device I2cwbyte &HAA 'Temperaturmessung Lesekommando I2cstop I2cstart I2cwbyte Deviceread I2crbyte Lowtemp , Ack 'LSByte holen I2crbyte Hightemp , Nack 'MSByte holen I2cstop Print "Lowtemp " ; Lowtemp Print "Hightemp " ; Hightemp Value = Lowtemp * 10 If Hightemp = 128 Then Value = Value + 5 End If Print Value End Sub







Zitieren

Lesezeichen