Central Heating controller using the real time clock, PHY module for internet, 1-wire interface for temperature sensors, a system log and a configuration file
Dependencies: net 1-wire lpc1768 crypto clock web fram log
/media/uploads/andrewboyson/heating.sch
/media/uploads/andrewboyson/heating.brd
/media/uploads/andrewboyson/eagle.epf
Diff: heating/radiator.c
- Revision:
- 98:c75c959bcde3
- Parent:
- 97:84d58bf7a835
- Child:
- 99:84c3273dc77f
diff -r 84d58bf7a835 -r c75c959bcde3 heating/radiator.c --- a/heating/radiator.c Sun Oct 04 07:54:54 2020 +0000 +++ b/heating/radiator.c Sat Oct 10 14:12:46 2020 +0000 @@ -17,8 +17,8 @@ #define RADIATOR_PUMP_SET FIO2SET(03) #define RADIATOR_PUMP_CLR FIO2CLR(03) +static bool htgOverride = false; static char htgWinter; static int iWinter; -static char htgOverride; static int iOverride; static char* hallRom; static int iHallRom; static uint8_t overrideCancelHour; static int iOverrideCancelHour; static uint8_t overrideCancelMinute; static int iOverrideCancelMinute; @@ -26,7 +26,7 @@ static int16_t frostTemperature; static int iFrostTemperature; bool RadiatorGetWinter () { return (bool)htgWinter; } -bool RadiatorGetOverride () { return (bool)htgOverride; } +bool RadiatorGetOverride () { return htgOverride; } uint16_t RadiatorGetHallDS18B20Value () { return DS18B20ValueFromRom(hallRom); } int RadiatorGetOverrideCancelHour () { return (int)overrideCancelHour; } int RadiatorGetOverrideCancelMinute() { return (int)overrideCancelMinute; } @@ -34,7 +34,6 @@ int RadiatorGetFrostTemperature () { return (int)frostTemperature; } static void setWinter ( bool v) { htgWinter = (char)v; FramWrite(iWinter, 1, &htgWinter ); } -static void setOverride ( bool v) { htgOverride = (char)v; FramWrite(iOverride, 1, &htgOverride ); } static void setHallRom ( char* v) { memcpy(hallRom, v, 8); FramWrite(iHallRom, 8, hallRom ); } void RadiatorSetOverrideCancelHour ( int v) { if (v > 23 || v < 0) v = 0; overrideCancelHour = (uint8_t)v, FramWrite(iOverrideCancelHour, 1, &overrideCancelHour ); } void RadiatorSetOverrideCancelMinute( int v) { if (v > 59 || v < 0) v = 0; overrideCancelMinute = (uint8_t)v, FramWrite(iOverrideCancelMinute, 1, &overrideCancelMinute); } @@ -68,13 +67,13 @@ ClkNowTmLocal(&tm); static bool cancelWasDue = false; bool cancelIsDue = tm.tm_hour == overrideCancelHour && tm.tm_min == overrideCancelMinute; - if (cancelIsDue && !cancelWasDue && htgOverride) setOverride(false); + if (cancelIsDue && !cancelWasDue && htgOverride) htgOverride = false; cancelWasDue = cancelIsDue; } //Remove override if no longer required static bool previousOutput = false; - if (previousOutput != outputBeforeOverride && htgOverride) setOverride(false); + if (previousOutput != outputBeforeOverride && htgOverride) htgOverride = false; previousOutput = outputBeforeOverride; } bool RadiatorPump = false; @@ -95,11 +94,11 @@ { if (htgWinter) //Summer -> Winter { - if (outputBeforeOverride != prevOutputBeforeOverride) setOverride(0); //Adjust the override to leave the heat as it was - off or on. + if (outputBeforeOverride != prevOutputBeforeOverride) htgOverride = false; //Adjust the override to leave the heat as it was - off or on. } else //Winter -> Summer { - setOverride(0); //turn off the heat. + htgOverride = false; //turn off the heat. } } @@ -107,7 +106,7 @@ } void RadiatorSetOverride(bool value) { - setOverride(value); + htgOverride = value; makeOutputBeforeOverride(); makeOutputWithOverride(); } @@ -125,11 +124,11 @@ int8_t def1; int16_t def2; def1 = 0; address = FramLoad( 1, &htgWinter, &def1); if (address < 0) return -1; iWinter = address; - def1 = 0; address = FramLoad( 1, &htgOverride, &def1); if (address < 0) return -1; iOverride = address; + FramAllocate(1); //Spare byte address = FramLoad( 8, hallRom, 0); if (address < 0) return -1; iHallRom = address; def1 = 23; address = FramLoad( 1, &overrideCancelHour, &def1); if (address < 0) return -1; iOverrideCancelHour = address; def1 = 0; address = FramLoad( 1, &overrideCancelMinute, &def1); if (address < 0) return -1; iOverrideCancelMinute = address; - FramAllocate(2); //Spare two bytes + FramAllocate(2); //Spare two bytes def2 = 15; address = FramLoad( 2, &nightTemperature, &def2); if (address < 0) return -1; iNightTemperature = address; def2 = 8; address = FramLoad( 2, &frostTemperature, &def2); if (address < 0) return -1; iFrostTemperature = address;