Skip to content

Commit f14fa4a

Browse files
committed
added performance_mode and perf-mode sensitive data rates
1 parent c1d6450 commit f14fa4a

File tree

2 files changed

+36
-24
lines changed

2 files changed

+36
-24
lines changed

adafruit_lis3mdl.py

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -110,9 +110,9 @@ class PerformanceMode(CV):
110110

111111
PerformanceMode.add_values((
112112
('MODE_LOW_POWER', 0, 'Low Power', None),
113-
('MODE_MEDIUM', 1, 'Medium Power', None),
114-
('MODE_HIGH', 2, 'High Power', None),
115-
('MODE_ULTRA', 3, 'Ultra-high Power', None)
113+
('MODE_MEDIUM', 1, 'Medium Performance', None),
114+
('MODE_HIGH', 2, 'High Performance', None),
115+
('MODE_ULTRA', 3, 'Ultra-high Performance', None)
116116
))
117117
class Rate(CV):
118118
"""Options for `data_rate`"""
@@ -126,14 +126,18 @@ class Rate(CV):
126126
('RATE_10_HZ', 0b1000, 10.0, None),
127127
('RATE_20_HZ', 0b1010, 20.0, None),
128128
('RATE_40_HZ', 0b1100, 40.0, None),
129-
('RATE_80_HZ', 0b1110, 80.0, None)
129+
('RATE_80_HZ', 0b1110, 80.0, None),
130+
('RATE_155_HZ', 0b0001, 155.0, None),
131+
('RATE_300_HZ', 0b0011, 300.0, None),
132+
('RATE_560_HZ', 0b0101, 560.0, None),
133+
('RATE_1000_HZ', 0b0111, 1000.0, None),
130134
))
131135
# /** The magnetometer data rate, includes FAST_ODR bit */
132136

133-
# RATE_155_HZ = 0b0001, ///< 155 Hz (FAST_ODR + UHP)
134-
# RATE_300_HZ = 0b0011, ///< 300 Hz (FAST_ODR + HP)
135-
# RATE_560_HZ = 0b0101, ///< 560 Hz (FAST_ODR + MP)
136-
# RATE_1000_HZ = 0b0111, ///< 1000 Hz (FAST_ODR + LP)
137+
# = , ///< Hz (FAST_ODR + UHP)
138+
# = , ///< Hz (FAST_ODR + HP)
139+
# = , ///< Hz (FAST_ODR + MP)
140+
# = , ///< Hz (FAST_ODR + LP)
137141
# } lis3mdl_dataRate_t;
138142

139143
# /** The magnetometer operation mode */
@@ -222,16 +226,16 @@ def data_rate(self):
222226

223227
@data_rate.setter
224228
def data_rate(self, value):
225-
# if
226-
# if current_data_rate is Rate.RATE_155_HZ:
227-
# self.performance_mode = Mode.MODE_ULTRA
228-
# if current_data_rate is Rate.RATE_300_H:
229-
# self.performance_mode = Mode.MODE_HIGH
230-
# if current_data_rate is Rate.RATE_560_HZ:
231-
# self.performance_mode = Mode.MODE_MEDIUM
232-
# if current_data_rate is Rate.RATE_1000_HZ:
233-
# self.performance_mode = Mode.MODE_LOW_POWER
234-
# sleep(0.010)
229+
#pylint: disable=no-member
230+
if value is Rate.RATE_155_HZ:
231+
self.performance_mode = PerformanceMode.MODE_ULTRA
232+
if value is Rate.RATE_300_HZ:
233+
self.performance_mode = PerformanceMode.MODE_HIGH
234+
if value is Rate.RATE_560_HZ:
235+
self.performance_mode = PerformanceMode.MODE_MEDIUM
236+
if value is Rate.RATE_1000_HZ:
237+
self.performance_mode = PerformanceMode.MODE_LOW_POWER
238+
sleep(0.010)
235239
if not Rate.is_valid(value):
236240
raise AttributeError("`data_rate` must be a `Rate`")
237241
self._data_rate = value
@@ -242,10 +246,11 @@ def performance_mode(self):
242246
Note that `performance_mode` affects the available data rate and will be
243247
automatically changed by setting ``data_rate`` to certain values."""
244248

245-
return self._data_rate
249+
return self._perf_mode
246250

247251
@performance_mode.setter
248252
def performance_mode(self, value):
249-
#TODO: check value
253+
if not PerformanceMode.is_valid(value):
254+
raise AttributeError("`performance_mode` must be a `PerformanceMode`")
250255
self._perf_mode = value
251256
self._z_perf_mode = value

examples/lis3mdl_data_rate_test.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
""" Test Each Data Rate """
2+
3+
#pylint: disable=no-member
24
import time
35
import board
46
import busio
5-
from adafruit_lis3mdl import LIS3MDL, Rate
7+
from adafruit_lis3mdl import LIS3MDL, Rate, PerformanceMode
68

79
i2c = busio.I2C(board.SCL, board.SDA)
810
sensor = LIS3MDL(i2c)
911

10-
current_rate = Rate.RATE_2_5_HZ #pylint: disable=no-member
11-
12+
current_rate = Rate.RATE_155_HZ
1213
sensor.data_rate = current_rate
13-
14+
start_time = time.monotonic()
15+
print("data_rate is", Rate.string[sensor.data_rate], "HZ")
16+
print("performance_mode is", PerformanceMode.string[sensor.performance_mode])
1417
while True:
1518
mag_x, mag_y, mag_z = sensor.magnetic
1619

@@ -19,3 +22,7 @@
1922
# sleep for enough time so that we'll read the value twice per measurement
2023
sleep_time = (1/(Rate.string[current_rate]*2))
2124
time.sleep(sleep_time)
25+
26+
# exit loop after a second to prevent hard to stop loops with short delays
27+
if (time.monotonic() - start_time) >1:
28+
break

0 commit comments

Comments
 (0)