diff --git a/avr/apps/fan_control/README b/avr/apps/fan_control/README new file mode 100644 index 00000000..e040efdf --- /dev/null +++ b/avr/apps/fan_control/README @@ -0,0 +1,3 @@ + +# use MOTION (7) value from node 18 +aqhome-tool setdata -N nodes/a5502228/FANCTL_TRIGGER1_SOURCE -v 0:0:7:18 diff --git a/avr/apps/fan_control/defs.asm b/avr/apps/fan_control/defs.asm new file mode 100644 index 00000000..c8f46dfb --- /dev/null +++ b/avr/apps/fan_control/defs.asm @@ -0,0 +1,38 @@ +; *************************************************************************** +; copyright : (C) 2026 by Martin Preuss +; email : martin@libchipcard.de +; +; *************************************************************************** +; * This file is part of the project "AqHome". * +; * Please see toplevel file COPYING of that project for license details. * +; *************************************************************************** + +#ifndef AQH_AVR_APPS_FAN_CONTROL_DEFS_ASM +#define AQH_AVR_APPS_FAN_CONTROL_DEFS_ASM + + +.equ APP_FANCONTROL_STEPS = 5 + + +.equ APP_FANCONTROL_FLASH_OFFS_BEGIN = TCA_FLASH_SIZE +.equ APP_FANCONTROL_FLASH_OFFS_STEPTABLE = APP_FANCONTROL_FLASH_OFFS_BEGIN+0 +.equ APP_FANCONTROL_FLASH_SIZE = APP_FANCONTROL_FLASH_OFFS_STEPTABLE+(APP_FANCONTROL_STEPS*3) + + +.equ APP_FANCONTROL_RAM_OFFS_BEGIN = TCA_RAM_SIZE +.equ APP_FANCONTROL_RAM_OFFS_VALUE_LO = APP_FANCONTROL_RAM_OFFS_BEGIN+0 +.equ APP_FANCONTROL_RAM_OFFS_VALUE_HI = APP_FANCONTROL_RAM_OFFS_BEGIN+1 +.equ APP_FANCONTROL_RAM_SIZE = APP_FANCONTROL_RAM_OFFS_BEGIN+2 + + +.equ APP_FANCONTROL_EE_OFFS_BEGIN = TCA_EE_SIZE +.equ APP_FANCONTROL_EE_OFFS_VALUE_LO = APP_FANCONTROL_EE_OFFS_BEGIN+0 +.equ APP_FANCONTROL_EE_OFFS_VALUE_HI = APP_FANCONTROL_EE_OFFS_BEGIN+1 +.equ APP_FANCONTROL_EE_SIZE = APP_FANCONTROL_EE_OFFS_BEGIN+2 + + +.equ APP_FANCONTROL_FLAGBIT_UPDATED = 0 ; value updated (move to TCA!) + + +#endif + diff --git a/avr/apps/fan_control/main.asm b/avr/apps/fan_control/main.asm new file mode 100644 index 00000000..9ab92b89 --- /dev/null +++ b/avr/apps/fan_control/main.asm @@ -0,0 +1,279 @@ +; *************************************************************************** +; copyright : (C) 2026 by Martin Preuss +; email : martin@libchipcard.de +; +; *************************************************************************** +; * This file is part of the project "AqHome". * +; * Please see toplevel file COPYING of that project for license details. * +; *************************************************************************** + +#ifndef AQH_AVR_APPS_FAN_CONTROL_MAIN_ASM +#define AQH_AVR_APPS_FAN_CONTROL_MAIN_ASM + + +.equ APP_FANCONTROL_TEMP_LIMIT = 2400 + + +.cseg + + + +; --------------------------------------------------------------------------- +; @routine AppFanControl_Init + +AppFanControl_Init: + ldi zl, LOW(appFanControlObjectFlash*2) + ldi zh, HIGH(appFanControlObjectFlash*2) + + ; preset RAM + lpm xl, Z+ + lpm xh, Z + sbiw zh:zl, 1 + clr r16 + ldi r17,TCA_RAM_SIZE + bigcall Utils_FillSram + + ; init base class + bigcall TCA_Init + + ; preset source limits (low=1, high=65535) + lpm yl, Z+ + lpm yh, Z + sbiw zh:zl, 1 + ldi r16, 1 + std Y+(TCA_RAM_OFFS_TRIGGER_SOURCE1+TCA_SOURCE_OFFS_LOWLIM_LO), r16 + std Y+(TCA_RAM_OFFS_TRIGGER_SOURCE2+TCA_SOURCE_OFFS_LOWLIM_LO), r16 + ldi r16, 0xff + std Y+(TCA_RAM_OFFS_TRIGGER_SOURCE1+TCA_SOURCE_OFFS_HIGHLIM_LO), r16 + std Y+(TCA_RAM_OFFS_TRIGGER_SOURCE1+TCA_SOURCE_OFFS_HIGHLIM_HI), r16 + std Y+(TCA_RAM_OFFS_TRIGGER_SOURCE2+TCA_SOURCE_OFFS_HIGHLIM_LO), r16 + std Y+(TCA_RAM_OFFS_TRIGGER_SOURCE2+TCA_SOURCE_OFFS_HIGHLIM_HI), r16 + + ; preset guard limits (low=24.0 Grad, high=65535) + ldi r16, LOW(APP_FANCONTROL_TEMP_LIMIT) + ldi r17, HIGH(APP_FANCONTROL_TEMP_LIMIT) + std Y+(TCA_RAM_OFFS_GUARD_SOURCE+TCA_SOURCE_OFFS_LOWLIM_LO), r16 + std Y+(TCA_RAM_OFFS_GUARD_SOURCE+TCA_SOURCE_OFFS_LOWLIM_HI), r17 + ldi r16, 0xff + std Y+(TCA_RAM_OFFS_GUARD_SOURCE+TCA_SOURCE_OFFS_HIGHLIM_LO), r16 + std Y+(TCA_RAM_OFFS_GUARD_SOURCE+TCA_SOURCE_OFFS_HIGHLIM_HI), r16 + +; ldi r16, 2 + ldi r16, 1 + std Y+HTIM_EE_OFFS_MODE, r16 + + ; setup from eeprom + push yl + push yh + rcall appFanControlReadEeprom + pop yh + pop yl + + ; start in given mode + rcall appFanControlUpdate + ret +; @end + + + +; --------------------------------------------------------------------------- +; @routine AppFanControl_OnEveryTick @global + +AppFanControl_OnEveryTick: + ldi zl, LOW(appFanControlObjectFlash*2) + ldi zh, HIGH(appFanControlObjectFlash*2) + + lpm yl, Z+ + lpm yh, Z + sbiw zh:zl, 1 + + bigcall TCA_OnEveryTick + + ; check update flag + ldd r16, Y+HTIM_RAM_OFFS_FLAGS + sbrs r16, APP_FANCONTROL_FLAGBIT_UPDATED + rjmp AppFanControl_OnEveryTick_ret ; jump if clear (value unchanged) + ; value updated + cbr r16, (1< + + + + + defs.asm + main.asm + recv.asm + + + + + + diff --git a/avr/modules/triggeractor/README b/avr/modules/triggeractor/README new file mode 100644 index 00000000..272cab63 --- /dev/null +++ b/avr/modules/triggeractor/README @@ -0,0 +1,85 @@ + +This module extends the hold timer to keep an actor ON as long as +positive messages are received from either of two TRIGGER sources +(e.g. from motion sensors). +Matching messages from GUARD sources can prohibit actors from being +switched on. + +Example: Motion activated light + +- trigger + - source: motion sensors + - matching values: >0 +- guard: + - source: light sensor + - matching values: 0-XX (XX being the value below which light + is to be switched on) + + +FLASH: +- HTIM_FLASH_OFFS_RAMPTR_LO 0 +- HTIM_FLASH_OFFS_RAMPTR_HI 1 +- HTIM_FLASH_OFFS_ON_PTR_LO 2 +- HTIM_FLASH_OFFS_ON_PTR_HI 3 +- HTIM_FLASH_OFFS_OFF_PTR_LO 4 +- HTIM_FLASH_OFFS_OFF_PTR_HI 5 +- HTIM_FLASH_OFFS_RELOADVAL_LO 6 +- HTIM_FLASH_OFFS_RELOADVAL_HI 7 + + +RAM: +- HTIM_RAM_OFFS_FLAGS 0 +- HTIM_RAM_OFFS_CURRVAL_LO 1 +- HTIM_RAM_OFFS_CURRVAL_HI 2 +- HTIM_RAM_OFFS_RELOAD_LO 3 +- HTIM_RAM_OFFS_RELOAD_HI 4 +- TCA_RAM_OFFS_GUARD_SOURCE + - ADDR 5 + - VALUEID 6 + - LOWER LIMIT lo 7 + - LOWER LIMIT hi 8 + - UPPER LIMIT lo 9 + - UPPER LIMIT hi 10 +- TCA_RAM_OFFS_TRIGGER_SOURCE1 + - ADDR 11 + - VALUEID 12 + - LOWER LIMIT lo 13 + - LOWER LIMIT hi 14 + - UPPER LIMIT lo 15 + - UPPER LIMIT hi 16 +- TCA_RAM_OFFS_TRIGGER_SOURCE2 + - ADDR 17 + - VALUEID 18 + - LOWER LIMIT lo 10 + - LOWER LIMIT hi 20 + - UPPER LIMIT lo 21 + - UPPER LIMIT hi 22 + + + +EEPROM: +- HTIM_RAM_OFFS_RELOAD_LO 0 +- HTIM_RAM_OFFS_RELOAD_HI 1 +- TCA_RAM_OFFS_GUARD_SOURCE + - ADDR 2 + - VALUEID 3 + - LOWER LIMIT lo 4 + - LOWER LIMIT hi 5 + - UPPER LIMIT lo 6 + - UPPER LIMIT hi 7 +- TCA_RAM_OFFS_TRIGGER_SOURCE1 + - ADDR 8 + - VALUEID 9 + - LOWER LIMIT lo 10 + - LOWER LIMIT hi 11 + - UPPER LIMIT lo 12 + - UPPER LIMIT hi 13 +- TCA_RAM_OFFS_TRIGGER_SOURCE2 + - ADDR 14 + - VALUEID 15 + - LOWER LIMIT lo 16 + - LOWER LIMIT hi 17 + - UPPER LIMIT lo 18 + - UPPER LIMIT hi 19 + + diff --git a/avr/modules/triggeractor/defs.asm b/avr/modules/triggeractor/defs.asm new file mode 100644 index 00000000..538d3c5d --- /dev/null +++ b/avr/modules/triggeractor/defs.asm @@ -0,0 +1,47 @@ +; *************************************************************************** +; copyright : (C) 2026 by Martin Preuss +; email : martin@libchipcard.de +; +; *************************************************************************** +; * This file is part of the project "AqHome". * +; * Please see toplevel file COPYING of that project for license details. * +; *************************************************************************** + +#ifndef AQH_AVR_MODULES_TRIGGERACTOR_DEFS_ASM +#define AQH_AVR_MODULES_TRIGGERACTOR_DEFS_ASM + + +.equ TCA_SOURCE_OFFS_ADDR = 0 +.equ TCA_SOURCE_OFFS_VALUEID = 1 +.equ TCA_SOURCE_OFFS_LOWLIM_LO = 2 +.equ TCA_SOURCE_OFFS_LOWLIM_HI = 3 +.equ TCA_SOURCE_OFFS_HIGHLIM_LO = 4 +.equ TCA_SOURCE_OFFS_HIGHLIM_HI = 5 +.equ TCA_SOURCE_SIZE = 6 + + +.equ TCA_FLASH_OFFS_BEGIN = HTIM_FLASH_SIZE +.equ TCA_FLASH_SIZE = TCA_FLASH_OFFS_BEGIN+0 + + +.equ TCA_RAM_OFFS_BEGIN = HTIM_RAM_SIZE +.equ TCA_RAM_OFFS_GUARD_SOURCE = TCA_RAM_OFFS_BEGIN+0 +.equ TCA_RAM_OFFS_TRIGGER_SOURCE1 = TCA_RAM_OFFS_BEGIN+TCA_SOURCE_SIZE +.equ TCA_RAM_OFFS_TRIGGER_SOURCE2 = TCA_RAM_OFFS_TRIGGER_SOURCE1+TCA_SOURCE_SIZE +.equ TCA_RAM_SIZE = TCA_RAM_OFFS_TRIGGER_SOURCE2+TCA_SOURCE_SIZE + + +.equ TCA_EE_OFFS_BEGIN = HTIM_EE_SIZE +.equ TCA_EE_OFFS_GUARD_SOURCE = TCA_EE_OFFS_BEGIN +.equ TCA_EE_OFFS_TRIGGER_SOURCE1 = TCA_EE_OFFS_BEGIN+TCA_SOURCE_SIZE +.equ TCA_EE_OFFS_TRIGGER_SOURCE2 = TCA_EE_OFFS_TRIGGER_SOURCE1+TCA_SOURCE_SIZE +.equ TCA_EE_SIZE = TCA_EE_OFFS_TRIGGER_SOURCE2+TCA_SOURCE_SIZE + + +.equ TCA_FLAGBITS_NEED_TRIGGER = 1 +.equ TCA_FLAGBITS_NEED_DISABLE = 2 +.equ TCA_FLAGBITS_NEED_ENABLE = 3 + + +#endif + diff --git a/avr/modules/triggeractor/main.asm b/avr/modules/triggeractor/main.asm new file mode 100644 index 00000000..55ce3549 --- /dev/null +++ b/avr/modules/triggeractor/main.asm @@ -0,0 +1,115 @@ +; *************************************************************************** +; copyright : (C) 2026 by Martin Preuss +; email : martin@libchipcard.de +; +; *************************************************************************** +; * This file is part of the project "AqHome". * +; * Please see toplevel file COPYING of that project for license details. * +; *************************************************************************** + +#ifndef AQH_AVR_MODULES_TRIGGERACTOR_MAIN_ASM +#define AQH_AVR_MODULES_TRIGGERACTOR_MAIN_ASM + + + +; --------------------------------------------------------------------------- +; @routine TCA_Init @global +; +; @param Z pointer to data in FLASH (byte address for lpm!) + +TCA_Init: + ; let base class init + bigcall HTIM_Init ; (any, !Z) + bigcall HTIM_Start + bigcall HTIM_EnableActor + ret +; @end + + + +; --------------------------------------------------------------------------- +; @routine TCA_OnEveryTick +; +; @param Z pointer to data in FLASH (byte address for lpm!) +; @param Y pointer to data in RAM + +TCA_OnEveryTick: + ldd r17, Y+HTIM_RAM_OFFS_FLAGS + mov r16, r17 + cbr r17, (1<