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<