aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTimofey Titovets <nefelim4ag@gmail.com>2024-07-07 00:28:45 +0200
committerGitHub <noreply@github.com>2024-07-06 18:28:45 -0400
commit248d3dbf8bcda69a51e3a303862bbcc64a32119d (patch)
treef3273300228cc88e8ac474d41608f89a8f51bb8d
parent00cb683def53be4b437bfb3e3a637d2d5879946c (diff)
downloadkutter-248d3dbf8bcda69a51e3a303862bbcc64a32119d.tar.gz
kutter-248d3dbf8bcda69a51e3a303862bbcc64a32119d.tar.xz
kutter-248d3dbf8bcda69a51e3a303862bbcc64a32119d.zip
sht3x: use periodic report mode (#6634)
Signed-off-by: Timofey Titovets <nefelim4ag@gmail.com>
-rw-r--r--klippy/extras/bus.py3
-rw-r--r--klippy/extras/sht3x.py35
2 files changed, 25 insertions, 13 deletions
diff --git a/klippy/extras/bus.py b/klippy/extras/bus.py
index 9b2ec371..28bfcdf0 100644
--- a/klippy/extras/bus.py
+++ b/klippy/extras/bus.py
@@ -192,6 +192,9 @@ class MCU_I2C:
return
self.i2c_write_cmd.send([self.oid, data],
minclock=minclock, reqclock=reqclock)
+ def i2c_write_wait_ack(self, data, minclock=0, reqclock=0):
+ self.i2c_write_cmd.send_wait_ack([self.oid, data],
+ minclock=minclock, reqclock=reqclock)
def i2c_read(self, write, read_len):
return self.i2c_read_cmd.send([self.oid, write, read_len])
def i2c_modify_bits(self, reg, clear_bits, set_bits,
diff --git a/klippy/extras/sht3x.py b/klippy/extras/sht3x.py
index 699d3f20..5a8785e8 100644
--- a/klippy/extras/sht3x.py
+++ b/klippy/extras/sht3x.py
@@ -27,6 +27,13 @@ SHT3X_CMD = {
'LOW_REP': [0x24, 0x16],
},
},
+ 'PERIODIC': {
+ '2HZ': {
+ 'HIGH_REP': [0x22, 0x36],
+ 'MED_REP': [0x22, 0x20],
+ 'LOW_REP': [0x22, 0x2B],
+ },
+ },
'OTHER': {
'STATUS': {
'READ': [0xF3, 0x2D],
@@ -72,10 +79,12 @@ class SHT3X:
def _init_sht3x(self):
# Device Soft Reset
- self.i2c.i2c_write(SHT3X_CMD['OTHER']['SOFTRESET'])
-
- # Wait 2ms after reset
- self.reactor.pause(self.reactor.monotonic() + .02)
+ self.i2c.i2c_write_wait_ack(SHT3X_CMD['OTHER']['BREAK'])
+ # Break takes ~ 1ms
+ self.reactor.pause(self.reactor.monotonic() + .0015)
+ self.i2c.i2c_write_wait_ack(SHT3X_CMD['OTHER']['SOFTRESET'])
+ # Wait <=1.5ms after reset
+ self.reactor.pause(self.reactor.monotonic() + .0015)
status = self.i2c.i2c_read(SHT3X_CMD['OTHER']['STATUS']['READ'], 3)
response = bytearray(status['response'])
@@ -86,17 +95,17 @@ class SHT3X:
if self._crc8(status) != checksum:
logging.warning("sht3x: Reading status - checksum error!")
+ # Enable periodic mode
+ self.i2c.i2c_write_wait_ack(
+ SHT3X_CMD['PERIODIC']['2HZ']['HIGH_REP']
+ )
+ # Wait <=15.5ms for first measurment
+ self.reactor.pause(self.reactor.monotonic() + .0155)
+
def _sample_sht3x(self, eventtime):
try:
- # Read Temeprature
- params = self.i2c.i2c_write(
- SHT3X_CMD['MEASURE']['STRETCH_ENABLED']['HIGH_REP']
- )
- # Wait
- self.reactor.pause(self.reactor.monotonic()
- + .20)
-
- params = self.i2c.i2c_read([], 6)
+ # Read measurment
+ params = self.i2c.i2c_read(SHT3X_CMD['OTHER']['FETCH'], 6)
response = bytearray(params['response'])
rtemp = response[0] << 8