From: Martin Mares Date: Tue, 16 Jul 2019 19:24:27 +0000 (+0200) Subject: Aircon: Separate registers, temperatures in ddegC X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=0fab2dc8a2fc98b2829ae8ce2b66fc5cc4aab88a;p=home-hw.git Aircon: Separate registers, temperatures in ddegC --- diff --git a/aircon/firmware/main.c b/aircon/firmware/main.c index 89307b4..824ee7a 100644 --- a/aircon/firmware/main.c +++ b/aircon/firmware/main.c @@ -7,6 +7,7 @@ #include "util.h" #include "ds18b20.h" #include "modbus.h" +#include "registers.h" #include #include @@ -227,28 +228,6 @@ int main(void) /*** Modbus callbacks ***/ -enum aircon_coils { - AIRCON_COIL_EXCHANGER_BYPASS, - AIRCON_COIL_MAX, -}; - -enum aircon_input_registers { - AIRCON_IREG_TEMP_FROM_INSIDE, - AIRCON_IREG_TEMP_TO_INSIDE, - AIRCON_IREG_TEMP_FROM_OUTSIDE, - AIRCON_IREG_TEMP_TO_OUTSIDE, - AIRCON_IREG_TEMP_MIXED, - AIRCON_IREG_MAX, - AIRCON_IREG_DS_ID_BASE = 0x1000, - AIRCON_IREG_DS_ID_MAX = AIRCON_IREG_DS_ID_BASE + 3*DS_NUM_SENSORS, -}; - -enum aircon_holding_registers { - AIRCON_HREG_EXCHANGER_FAN, - AIRCON_HREG_REMOTE_CONTROL, - AIRCON_HREG_MAX, -}; - bool modbus_check_discrete_input(u16 addr UNUSED) { return false; @@ -315,7 +294,7 @@ u16 modbus_get_input_register(u16 addr) return 0x8000; if (ds_sensors[i].current_temp == DS_TEMP_UNKNOWN) return 0x8000; - return ds_sensors[i].current_temp & 0xffff; + return ((ds_sensors[i].current_temp + 5) / 10) & 0xffff; } else if (addr >= AIRCON_IREG_DS_ID_BASE && addr < AIRCON_IREG_DS_ID_MAX) { byte i = (addr - AIRCON_IREG_DS_ID_BASE) / 3; byte j = (addr - AIRCON_IREG_DS_ID_BASE) % 3; diff --git a/aircon/firmware/registers.h b/aircon/firmware/registers.h new file mode 100644 index 0000000..bf444cf --- /dev/null +++ b/aircon/firmware/registers.h @@ -0,0 +1,32 @@ +/* + * Air Conditioning Controller -- MODBUS Registers + * + * (c) 2019 Martin Mareš + */ + +#ifndef _AIRCON_REGISTERS_H +#define _AIRCON_REGISTERS_H + +enum aircon_coils { + AIRCON_COIL_EXCHANGER_BYPASS, + AIRCON_COIL_MAX, +}; + +enum aircon_input_registers { + AIRCON_IREG_TEMP_FROM_INSIDE, // s16 in 0.01 °C + AIRCON_IREG_TEMP_TO_INSIDE, + AIRCON_IREG_TEMP_FROM_OUTSIDE, + AIRCON_IREG_TEMP_TO_OUTSIDE, + AIRCON_IREG_TEMP_MIXED, + AIRCON_IREG_MAX, + AIRCON_IREG_DS_ID_BASE = 0x1000, + AIRCON_IREG_DS_ID_MAX = AIRCON_IREG_DS_ID_BASE + 3*DS_NUM_SENSORS, +}; + +enum aircon_holding_registers { + AIRCON_HREG_EXCHANGER_FAN, + AIRCON_HREG_REMOTE_CONTROL, + AIRCON_HREG_MAX, +}; + +#endif