diff --git a/lib/onewire/onewire.py b/lib/onewire/onewire.py index 3b75f51..eeadbd7 100644 --- a/lib/onewire/onewire.py +++ b/lib/onewire/onewire.py @@ -174,11 +174,14 @@ def start_convertion(self, rom=None): Pass the 8-byte bytes object with the ROM of the specific device you want to read. If only one DS18x20 device is attached to the bus you may omit the rom parameter. """ - rom = rom or self.roms[0] - ow = self.ow - ow.reset() - ow.select_rom(rom) - ow.write_byte(0x44) # Convert Temp + if (rom==None) and (len(self.roms)>0): + rom=self.roms[0] + if rom!=None: + rom = rom or self.roms[0] + ow = self.ow + ow.reset() + ow.select_rom(rom) + ow.write_byte(0x44) # Convert Temp def read_temp_async(self, rom=None): """ @@ -187,13 +190,17 @@ def read_temp_async(self, rom=None): """ if self.isbusy(): return None - rom = rom or self.roms[0] - ow = self.ow - ow.reset() - ow.select_rom(rom) - ow.write_byte(0xbe) # Read scratch - data = ow.read_bytes(9) - return self.convert_temp(rom[0], data) + if (rom==None) and (len(self.roms)>0): + rom=self.roms[0] + if rom==None: + return None + else: + ow = self.ow + ow.reset() + ow.select_rom(rom) + ow.write_byte(0xbe) # Read scratch + data = ow.read_bytes(9) + return self.convert_temp(rom[0], data) def convert_temp(self, rom0, data): """ @@ -213,6 +220,9 @@ def convert_temp(self, rom0, data): temp = 100 * temp_read - 25 + (count_per_c - count_remain) // count_per_c return temp elif rom0 == 0x28: - return (temp_msb << 8 | temp_lsb) * 100 // 16 + temp = (temp_msb << 8 | temp_lsb) * 100 // 16 + if (temp_msb & 0xf8) == 0xf8: # for negative temperature + temp -= 0x1000 + return temp else: assert False