From ea2162e8f4a41178b3518b08cf5b0fa568e04a36 Mon Sep 17 00:00:00 2001 From: Martin Preuss Date: Mon, 21 Apr 2025 00:44:04 +0200 Subject: [PATCH] added filter. --- avr/modules/uart_hw/comonuart0.asm | 13 +- avr/modules/valsched/0BUILD | 11 ++ avr/modules/valsched/main.asm | 204 +++++++++++++++++++++++++++++ 3 files changed, 216 insertions(+), 12 deletions(-) create mode 100644 avr/modules/valsched/0BUILD create mode 100644 avr/modules/valsched/main.asm diff --git a/avr/modules/uart_hw/comonuart0.asm b/avr/modules/uart_hw/comonuart0.asm index d77c796..60ebe7b 100644 --- a/avr/modules/uart_hw/comonuart0.asm +++ b/avr/modules/uart_hw/comonuart0.asm @@ -57,18 +57,7 @@ ComOnUart0_Init: ComOnUart0_Periodically: ldi yl, LOW(comOnUart0_iface) ldi yh, HIGH(comOnUart0_iface) - - ldd r16, Y+NET_IFACE_OFFS_READTIMER - inc r16 - breq ComOnUart0_Periodically_l1 - std Y+NET_IFACE_OFFS_READTIMER, r16 -ComOnUart0_Periodically_l1: - ldd r16, Y+NET_IFACE_OFFS_WRITETIMER - inc r16 - breq ComOnUart0_Periodically_l2 - std Y+NET_IFACE_OFFS_WRITETIMER, r16 -ComOnUart0_Periodically_l2: - ret + rjmp NET_Interface_Periodically ; @end diff --git a/avr/modules/valsched/0BUILD b/avr/modules/valsched/0BUILD new file mode 100644 index 0000000..febd367 --- /dev/null +++ b/avr/modules/valsched/0BUILD @@ -0,0 +1,11 @@ + + + + + + main.asm + + + + + diff --git a/avr/modules/valsched/main.asm b/avr/modules/valsched/main.asm new file mode 100644 index 0000000..175ad4a --- /dev/null +++ b/avr/modules/valsched/main.asm @@ -0,0 +1,204 @@ +; *************************************************************************** +; copyright : (C) 2025 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. * +; *************************************************************************** + + +; *************************************************************************** +; defines + +.equ VALSCHED_OFFS_TIMER = 0 +.equ VALSCHED_OFFS_FLAGS = 1 +.equ VALSCHED_DATA_SIZE = 2 + +.equ VALSCHED_FLAGS_VALUE_BIT = 0 +.equ VALSCHED_FLAGS_TOSEND_BIT = 1 +.equ VALSCHED_FLAGS_REPEAT_BIT = 2 +.equ VALSCHED_FLAGS_REPEAT0_BIT = 6 +.equ VALSCHED_FLAGS_REPEAT1_BIT = 7 + +.equ VALSCHED_REPORTTIME1 = 1 ; report after 100ms +.equ VALSCHED_REPORTTIME2 = 11 ; report after 1100ms +.equ VALSCHED_REPORTTIME3 = 22 ; report after 2200ms + +.equ VALSCHED_INTERVAL = 200 ; 20s interval + + + +; *************************************************************************** +; code + +.cseg + + + +; --------------------------------------------------------------------------- +; @routine ValueScheduler_Init @global +; +; @param Y pointer to instance data + +ValueScheduler_Init: + clr r16 + std Y+VALSCHED_OFFS_FLAGS, r16 + dec r16 + std Y+VALSCHED_OFFS_TIMER, r16 ; init timer in hold state + ret +; @end + + + +; --------------------------------------------------------------------------- +; @routine ValueScheduler_Fini @global +; +; @param Y pointer to instance data + +ValueScheduler_Fini: + ldi r16, 0xff + std Y+VALSCHED_OFFS_TIMER, r16 + ret +; @end + + + +; --------------------------------------------------------------------------- +; @routine ValueScheduler_Every100ms @global +; +; @param Y pointer to instance data +; @clobbers r16, r17 + +ValueScheduler_Every100ms: + ldd r16, Y+VALSCHED_OFFS_TIMER + inc r16 + breq ValueScheduler_Every100ms_end ; timer on hold + std Y+VALSCHED_OFFS_TIMER, r16 + cpi r16, VALSCHED_REPORTTIME1 + breq ValueScheduler_Every100ms_setSendFlag + cpi r16, VALSCHED_REPORTTIME2 + breq ValueScheduler_Every100ms_setSendFlag + cpi r16, VALSCHED_REPORTTIME3 + breq ValueScheduler_Every100ms_setSendFlag + cpi r16, VALSCHED_INTERVAL + brne ValueScheduler_Every100ms_end + ; interval finished, check for repeat + ldd r17, Y+VALSCHED_OFFS_FLAGS + clr r16 + sbrs r16, VALSCHED_FLAGS_REPEAT_BIT + dec r17 ; bit not set, stop counter after this interval + std Y+VALSCHED_OFFS_TIMER, r17 + rjmp ValueScheduler_Every100ms_end +ValueScheduler_Every100ms_setSendFlag: + ldd r16, Y+VALSCHED_OFFS_FLAGS + ori r16, (1<