From f17410b685f6568513fb706ffed35ea75736ff48 Mon Sep 17 00:00:00 2001 From: Karol Bieniaszewski Date: Fri, 20 Jan 2017 09:48:24 +0100 Subject: [PATCH 1/6] Update onewire.py --- lib/onewire/onewire.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/onewire/onewire.py b/lib/onewire/onewire.py index 3b75f51..66ec714 100644 --- a/lib/onewire/onewire.py +++ b/lib/onewire/onewire.py @@ -213,6 +213,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 From ab88d7b264e749a5b6f3a56c0210ec6afa20d9fb Mon Sep 17 00:00:00 2001 From: Karol Bieniaszewski Date: Fri, 20 Jan 2017 09:55:47 +0100 Subject: [PATCH 2/6] Update onewire.py --- lib/onewire/onewire.py | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/lib/onewire/onewire.py b/lib/onewire/onewire.py index 66ec714..c02dc93 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 (self.length>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 (self.length>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): """ From 134fb97cd98b823ef9787eb6e24a737934e6c13b Mon Sep 17 00:00:00 2001 From: Karol Bieniaszewski Date: Fri, 20 Jan 2017 09:58:52 +0100 Subject: [PATCH 3/6] Update onewire.py --- lib/onewire/onewire.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/onewire/onewire.py b/lib/onewire/onewire.py index c02dc93..eeadbd7 100644 --- a/lib/onewire/onewire.py +++ b/lib/onewire/onewire.py @@ -174,7 +174,7 @@ 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. """ - if (rom==None) and (self.length>0): + if (rom==None) and (len(self.roms)>0): rom=self.roms[0] if rom!=None: rom = rom or self.roms[0] @@ -190,7 +190,7 @@ def read_temp_async(self, rom=None): """ if self.isbusy(): return None - if (rom==None) and (self.length>0): + if (rom==None) and (len(self.roms)>0): rom=self.roms[0] if rom==None: return None From 3283064b05b262e39a62098f8ca08c5f519100ae Mon Sep 17 00:00:00 2001 From: Karol Bieniaszewski Date: Mon, 13 Mar 2017 23:36:20 +0100 Subject: [PATCH 4/6] Create HMC5883L.py --- examples/HMC5883L/HMC5883L.py | 183 ++++++++++++++++++++++++++++++++++ 1 file changed, 183 insertions(+) create mode 100644 examples/HMC5883L/HMC5883L.py diff --git a/examples/HMC5883L/HMC5883L.py b/examples/HMC5883L/HMC5883L.py new file mode 100644 index 0000000..cee058e --- /dev/null +++ b/examples/HMC5883L/HMC5883L.py @@ -0,0 +1,183 @@ +''' +HMC5883L 3 Axis Digital Compass +datascheet: https://cdn-shop.adafruit.com/datasheets/HMC5883L_3-Axis_Digital_Compass_IC.pdf +autor: Karol Bieniaszewski +c: 2017 +The MIT License (MIT) +Copyright (c) 2017 Karol Bieniaszewski, liviuslivius at op dot pl +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +''' + +from machine import I2C +from array import array +import math +import gc +import time + +HMC5883L_sampling_mode_continous = bytes([0x00]) +HMC5883L_sampling_mode_single = bytes([0x01]) +HMC5883L_sampling_mode_idle = bytes([0x02]) + +HMC5883L_samples_1 = 0 +HMC5883L_samples_2 = 32 +HMC5883L_samples_4 = 64 +HMC5883L_samples_8 = 96 + +HMC5883L_rate_00_75 = 0 +HMC5883L_rate_01_50 = 4 +HMC5883L_rate_03_00 = 8 +HMC5883L_rate_07_50 = 12 +HMC5883L_rate_15_00 = 16 +HMC5883L_rate_75_00 = 20 + +HMC5883L_measurement_mode_bias_disabled = 0 +HMC5883L_measurement_mode_bias_positive = 1 +HMC5883L_measurement_mode_bias_negative = 2 + +HMC5883L_gauss_gain = { + "0.88": [0, 0.73], + "1.3": [32, 0.92], + "1.9": [64, 1.22], + "2.5": [96, 1.52], + "4.0": [128, 2.27], + "4.7": [160, 2.56], + "5.6": [192, 3.03], + "8.1": [224, 4.35] + } + +def complement2toInt(value, len): + if (value & (1 << len - 1)): + value = value - (1< 2 * math.pi: + headingRad -= 2 * math.pi + + self.headingDeg = headingRad * 180 / math.pi + + def __str__(self): + ''' + first call: + self.readAxes() + self.heading() + ''' + return "X: " + str(self.x) + ", Y: " + str(self.y) + ", Z: " + str(self.z) + " - Heading: " + str(self.headingDeg) + ", Declination: " + str((self.declDegrees,self.declMinutes)) + "\n" From 65537c9724f14a0d92155f4c0bbe09bebf66d2f3 Mon Sep 17 00:00:00 2001 From: Karol Bieniaszewski Date: Mon, 13 Mar 2017 23:37:11 +0100 Subject: [PATCH 5/6] Create testCompass.py --- examples/HMC5883L/testCompass.py | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 examples/HMC5883L/testCompass.py diff --git a/examples/HMC5883L/testCompass.py b/examples/HMC5883L/testCompass.py new file mode 100644 index 0000000..c400a49 --- /dev/null +++ b/examples/HMC5883L/testCompass.py @@ -0,0 +1,11 @@ +# execfile('testCompass.py') +import HMC5883L +import gc +import time +m = HMC5883L2.HMC5883L() +while True: + m.readAxes() + m.heading() + print(m) + time.sleep_ms(1000) + gc.collect() From a7faba661108b5eabce221f4c7b4d4444ae690d2 Mon Sep 17 00:00:00 2001 From: Karol Bieniaszewski Date: Wed, 15 Mar 2017 22:27:51 +0100 Subject: [PATCH 6/6] Update onewire.py --- lib/onewire/onewire.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/onewire/onewire.py b/lib/onewire/onewire.py index eeadbd7..1efcecc 100644 --- a/lib/onewire/onewire.py +++ b/lib/onewire/onewire.py @@ -157,9 +157,15 @@ def _search_rom(self, l_rom, diff): return rom, next_diff class DS18X20(object): - def __init__(self, onewire): + def __init__(self, onewire, useFloat=True): self.ow = onewire self.roms = [rom for rom in self.ow.scan() if rom[0] == 0x10 or rom[0] == 0x28] + self.fp = useFloat + try: + if useFloat: + 1/1 + except TypeError: + self.fp = False # floatingpoint not supported def isbusy(self): """