From 611b75dee3a4ed18aa5c3fdd23f4050370d96890 Mon Sep 17 00:00:00 2001 From: agsler Date: Tue, 20 Dec 2022 13:00:46 +0100 Subject: [PATCH] add temperature regulator --- gefran_gtf.c | 13 +++++++++---- gefran_gtf.h | 3 +++ heizung.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ heizung.h | 2 ++ main.c | 15 +++++++++------ 5 files changed, 67 insertions(+), 10 deletions(-) create mode 100644 heizung.c create mode 100644 heizung.h diff --git a/gefran_gtf.c b/gefran_gtf.c index 51eadba..fb80ad6 100644 --- a/gefran_gtf.c +++ b/gefran_gtf.c @@ -6,10 +6,15 @@ uint16_t gtf_firmware_version(uint8_t address){ return gtf_read_register(address, GTF_FIRMWARE_VERSION); } +void gtf_init(uint8_t addr){ + gtf_write_register(addr, 55, 1<<4); + gtf_write_register(addr, 56, 0); +} + uint16_t gtf_read_register(uint8_t address, uint8_t reg){ uint16_t val = 0; readReg(address, reg, 1); - int8_t res = wait_receive(1, &val, 250); + int8_t res = wait_receive(1, &val, 50); if(!res) return val; @@ -19,13 +24,13 @@ uint16_t gtf_read_register(uint8_t address, uint8_t reg){ int8_t gtf_write_register(uint8_t address, uint8_t reg, uint16_t value){ writeReg(address, reg, value); - return wait_write(100); + return wait_write(50); } int8_t gtf_read_coil(uint8_t address, uint8_t coil){ uint16_t val=0; readCoil(address, coil); - uint8_t res = wait_receive_coil(100); + uint8_t res = wait_receive_coil(20); if(res) return -1; return val; @@ -33,7 +38,7 @@ int8_t gtf_read_coil(uint8_t address, uint8_t coil){ int8_t gtf_write_coil(uint8_t address, uint8_t coil, uint8_t val){ writeCoil(address, coil, val); - uint8_t res = wait_write(100); + uint8_t res = wait_write(20); if(res) return -1; return val; diff --git a/gefran_gtf.h b/gefran_gtf.h index 5edac1d..1c81028 100644 --- a/gefran_gtf.h +++ b/gefran_gtf.h @@ -1,5 +1,7 @@ #include +#define GTF_PV 0 +#define GTF_OuP 2 #define GTF_FIRMWARE_VERSION 122 #define GTF_OPERATING_HOURS 161 #define GTF_BAUDRATE 24 @@ -7,6 +9,7 @@ #define GTF_POWER 106 uint16_t gtf_firmware_version(uint8_t address); +void gtf_init(uint8_t addr); uint16_t gtf_read_register(uint8_t address, uint8_t reg); int8_t gtf_write_register(uint8_t address, uint8_t reg, uint16_t value); int8_t gtf_read_coil(uint8_t address, uint8_t coil); diff --git a/heizung.c b/heizung.c new file mode 100644 index 0000000..8aa5902 --- /dev/null +++ b/heizung.c @@ -0,0 +1,44 @@ +#include "gefran_gtf.h" +#include "avrIOhelper/io-helper.h" +#include "temperature.h" +#include +#include + +uint8_t heizung_state = 0; +uint8_t heizung_ontemp = 0; + +void do_heizung(){ + + if(ADC_reading[1] > 69) + heizung_ontemp = 1; + if(ADC_reading[1] < 66) + heizung_ontemp = 0; + + if(heizung_state && !heizung_ontemp){ + gtf_write_register(5, 56, 500); + gtf_write_register(6, 56, 500); + gtf_write_register(7, 56, 500); + set_Output(LED_HEIZUNG, BLINK); + } + else if(heizung_state && heizung_ontemp){ + gtf_write_register(5, 56, 0); + gtf_write_register(6, 56, 0); + gtf_write_register(7, 56, 0); + set_Output(LED_HEIZUNG, ON); + } + else{ + gtf_write_register(5, 56, 0); + gtf_write_register(6, 56, 0); + gtf_write_register(7, 56, 0); + set_Output(LED_HEIZUNG, OFF); + } + + if(read_Input(BTN_HEIZEN_AN, LEVEL)){ + heizung_state = 1; + } + + if(read_Input(BTN_HEIZEN_AUS, LEVEL)){ + heizung_state = 0; + } + +} diff --git a/heizung.h b/heizung.h new file mode 100644 index 0000000..fec0b07 --- /dev/null +++ b/heizung.h @@ -0,0 +1,2 @@ + +void do_heizung(void); diff --git a/main.c b/main.c index e451ac8..2488e0e 100644 --- a/main.c +++ b/main.c @@ -19,6 +19,7 @@ #include "modbus-master.h" #include "gefran_gtf.h" #include "pumpe.h" +#include "heizung.h" #include "util/delay.h" @@ -168,11 +169,10 @@ int main() send_value(&mqtt_client, "/Filamentanlage/02_Wasserbecken/connected", 1); send_value(&mqtt_client, "/Filamentanlage/02_Wasserbecken/state/pumpe_warm", -1); - //gtf_write_coil(5, 0, 1); - //gtf_write_coil(5, 1, 1); - //gtf_write_register(5, 54, 6); - //gtf_write_register(5, 56, 100); + gtf_init(5); + gtf_init(6); + gtf_init(7); while(1) { @@ -191,11 +191,13 @@ int main() outStates[3] ^= outStatesBlinking[3]; } - if(millis() - timer_send_temps > 500){ + if(millis() - timer_send_temps > 5000){ timer_send_temps = millis(); send_temperatures(); //printf("gefran firm: 0x%02X\n", gtf_firmware_version(5)); - //printf("gefran stat2: 0x%02X\n", gtf_read_register(5, 102)); + printf("gefran 5 OuP: 0x%02X\n", gtf_read_register(5, GTF_OuP)); + printf("gefran 6 OuP: 0x%02X\n", gtf_read_register(6, GTF_OuP)); + printf("gefran 7 OuP: 0x%02X\n", gtf_read_register(7, GTF_OuP)); //printf("gefran stat3: 0x%02X\n", gtf_read_register(5, 117)); ////printf("gefran stell: 0x%02X\n", gtf_read_register(5, 56)); ////printf("gefran disp: 0x%02X\n", gtf_read_register(5, 0)); @@ -223,6 +225,7 @@ int main() do_pumpe(); do_notaus(); + do_heizung(); #if PLC_MQTT_ENABLED ioHelperSetBit(outStates, LED_BUS_OK, 1);