Skip to content

Commit 5c86536

Browse files
committed
hts221: Auto-trigger one-shot conversion in power-down mode.
1 parent 2c1e7ab commit 5c86536

2 files changed

Lines changed: 54 additions & 1 deletion

File tree

lib/hts221/hts221/const.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,17 @@
2727
HTS221_T0_OUT_H = const(0x3D)
2828
HTS221_T1_OUT_L = const(0x3E)
2929
HTS221_T1_OUT_H = const(0x3F)
30+
31+
# CTRL_REG1 bits
32+
HTS221_CTRL1_PD = const(0x80)
33+
HTS221_CTRL1_BDU = const(0x04)
34+
HTS221_CTRL1_ODR_MASK = const(0x03)
35+
36+
# CTRL_REG2 bits
37+
HTS221_CTRL2_BOOT = const(0x80)
38+
HTS221_CTRL2_HEATER = const(0x02)
39+
HTS221_CTRL2_ONE_SHOT = const(0x01)
40+
41+
# STATUS_REG bits
42+
HTS221_STATUS_H_DA = const(0x02)
43+
HTS221_STATUS_T_DA = const(0x01)

lib/hts221/hts221/device.py

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from machine import I2C
2+
from time import sleep_ms
23

34
from hts221.const import *
45

@@ -84,20 +85,58 @@ def getAv(self):
8485
def setAv(self, av=0):
8586
self._write_reg(HTS221_AV_CONF, av)
8687

88+
# one-shot / auto-trigger helpers
89+
def _is_power_down(self):
90+
return (self._read_reg(HTS221_CTRL_REG1) & HTS221_CTRL1_PD) == 0
91+
92+
def _is_one_shot_mode(self):
93+
ctrl1 = self._read_reg(HTS221_CTRL_REG1)
94+
is_active = bool(ctrl1 & HTS221_CTRL1_PD)
95+
odr = ctrl1 & HTS221_CTRL1_ODR_MASK
96+
return is_active and odr == 0
97+
98+
def trigger_one_shot(self):
99+
ctrl1 = self._read_reg(HTS221_CTRL_REG1)
100+
ctrl1 |= HTS221_CTRL1_PD | HTS221_CTRL1_BDU
101+
ctrl1 &= ~HTS221_CTRL1_ODR_MASK
102+
self._write_reg(HTS221_CTRL_REG1, ctrl1)
103+
ctrl2 = self._read_reg(HTS221_CTRL_REG2)
104+
self._write_reg(HTS221_CTRL_REG2, ctrl2 | HTS221_CTRL2_ONE_SHOT)
105+
sleep_ms(15)
106+
107+
def _ensure_data(self):
108+
if self._is_power_down() or self._is_one_shot_mode():
109+
self.trigger_one_shot()
110+
87111
# calculate Temperature
88112
def temperature(self):
113+
self._ensure_data()
89114
t = self._read_reg16(HTS221_TEMP_OUT_L)
90115
return self.T0_degC + (self.T1_degC - self.T0_degC) * (t - self.T0_OUT) / (
91116
self.T1_OUT - self.T0_OUT
92117
)
93118

94119
# calculate Humidity
95120
def humidity(self):
121+
self._ensure_data()
96122
t = self._read_reg16(HTS221_HUMIDITY_OUT_L)
97123
return self.H0_rH + (self.H1_rH - self.H0_rH) * (t - self.H0_OUT) / (
98124
self.H1_OUT - self.H0_OUT
99125
)
100126

101127
# get Humidity and Temperature
128+
def read(self):
129+
self._ensure_data()
130+
h = self._read_reg16(HTS221_HUMIDITY_OUT_L)
131+
t = self._read_reg16(HTS221_TEMP_OUT_L)
132+
humidity = self.H0_rH + (self.H1_rH - self.H0_rH) * (h - self.H0_OUT) / (
133+
self.H1_OUT - self.H0_OUT
134+
)
135+
temperature = self.T0_degC + (self.T1_degC - self.T0_degC) * (t - self.T0_OUT) / (
136+
self.T1_OUT - self.T0_OUT
137+
)
138+
return humidity, temperature
139+
102140
def get(self):
103-
return [self.humidity(), self.temperature()]
141+
h, t = self.read()
142+
return [h, t]

0 commit comments

Comments
 (0)