From fb71edfb6bc0702aa2ee1cc73d0822bbc37674ad Mon Sep 17 00:00:00 2001 From: fishsoupisgood Date: Sun, 24 Jan 2021 09:23:12 +0000 Subject: working-ish sensor --- humidity_sensors/app/sht20.c | 121 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 humidity_sensors/app/sht20.c (limited to 'humidity_sensors/app/sht20.c') diff --git a/humidity_sensors/app/sht20.c b/humidity_sensors/app/sht20.c new file mode 100644 index 0000000..d6d648b --- /dev/null +++ b/humidity_sensors/app/sht20.c @@ -0,0 +1,121 @@ +#include "project.h" + +#define SHT20_ADDRESS 0x40 + +#define TRIGGER_TEMP_MEASURE_HOLD 0xE3 +#define TRIGGER_HUMD_MEASURE_HOLD 0xE5 +#define TRIGGER_TEMP_MEASURE_NOHOLD 0xF3 +#define TRIGGER_HUMD_MEASURE_NOHOLD 0xF5 +#define WRITE_USER_REG 0xE6 +#define READ_USER_REG 0xE7 +#define SOFT_RESET 0xFE + + +void +sht20_reset (void) +{ + + i2cb_start_transaction (SHT20_ADDRESS, I2C_WRITE); + i2cb_send_data (SOFT_RESET); + i2cb_stop(); + delay_ms (100); + printf ("$SNTHR\n"); +} + + +char * +sht20_temp_s (void) +{ + u8 h, l, c, s; + s32 t, tf; + float f; + static char ret[8]; + + i2cb_start_transaction (SHT20_ADDRESS, I2C_WRITE); + i2cb_send_data (TRIGGER_TEMP_MEASURE_NOHOLD); + delay_ms (100); + i2cb_start_transaction (SHT20_ADDRESS, I2C_READ); + + h = i2cb_read (0); + l = i2cb_read (0); + c = i2cb_read (1); + + i2cb_stop(); + + t = h; + t <<= 8; + t |= l & 0xfc; + + f = t; + f /= 65536.; + f *= 175.72; + f -= 46.85; + + f *= 100.; + + t = (s32) (f + .5); + + ret[0] = '-'; + + if (t >= 0) + s = 1; + else { + s = 0; + t = -t; + } + + tf = t % 100; + t = t / 100; + + sprintf (&ret[1], "%ld.%02ld", t, tf); + + return &ret[s]; + +} + +char * +sht20_humid_s (void) +{ + u8 h, l, c; + u32 t, tf; + float f; + static char ret[8]; + + i2cb_start_transaction (SHT20_ADDRESS, I2C_WRITE); + i2cb_send_data (TRIGGER_HUMD_MEASURE_NOHOLD); + delay_ms (100); + i2cb_start_transaction (SHT20_ADDRESS, I2C_READ); + + h = i2cb_read (0); + l = i2cb_read (0); + c = i2cb_read (1); + + i2cb_stop(); + + t = h; + t <<= 8; + t |= l & 0xfc; + + f = t; + f /= 65536.; + f *= 125.; + f -= 6.; + + if (f < 0) + f = 0; + + if (f > 100) + f = 100; + + f *= 100.; + + t = (u32) (f + .5); + tf = t % 100; + t = t / 100; + + sprintf (ret, "%ld.%02ld", t, tf); + + + return ret; + +} -- cgit v1.2.3