diff --git a/avr/modules/0BUILD b/avr/modules/0BUILD
index 781cd54..7c9081f 100644
--- a/avr/modules/0BUILD
+++ b/avr/modules/0BUILD
@@ -14,7 +14,9 @@
flash
lcd
led
+ led_activity
led_simple
+ led_signal
ma_light
motion
owimaster
diff --git a/avr/modules/led_activity/0BUILD b/avr/modules/led_activity/0BUILD
new file mode 100644
index 0000000..febd367
--- /dev/null
+++ b/avr/modules/led_activity/0BUILD
@@ -0,0 +1,11 @@
+
+
+
+
+
+ main.asm
+
+
+
+
+
diff --git a/avr/modules/led_activity/main.asm b/avr/modules/led_activity/main.asm
new file mode 100644
index 0000000..091e079
--- /dev/null
+++ b/avr/modules/led_activity/main.asm
@@ -0,0 +1,90 @@
+; ***************************************************************************
+; 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. *
+; ***************************************************************************
+
+
+.equ LED_ACTIVITY_TIME = 2
+
+
+
+; ***************************************************************************
+; data
+
+.dseg
+
+ledActivityTimer: .byte 1
+
+
+; ***************************************************************************
+; code
+
+.cseg
+
+
+LED_ACTIVITY_BEGIN:
+
+
+
+; ---------------------------------------------------------------------------
+; LedActivity_Init
+;
+; @return CFLAG: set if okay, clear on error
+; USED: R1, R2, R3, R4, R16, R17, X
+
+LedActivity_Init:
+ sbi LED_ACTIVITY_DDR, LED_ACTIVITY_PINNUM ; out
+ ldi r16, 50
+ sts ledActivityTimer, r16 ; keep on for 5s at the beginning
+ sec
+ ret
+
+
+
+; ---------------------------------------------------------------------------
+; @routine LedActivity_Every100ms @global
+;
+; @clobbers r16, r17
+
+LedActivity_Every100ms:
+ lds r16, ledActivityTimer
+ tst r16
+ breq LedActivity_Every100ms_ret
+ dec r16
+ sts ledActivityTimer, r16
+ brne LedActivity_Every100ms_ret
+ sbi LED_ACTIVITY_PORT, LED_ACTIVITY_PINNUM ; turn LED off
+LedActivity_Every100ms_ret:
+ ret
+; @end
+
+
+
+; ---------------------------------------------------------------------------
+; @routine LedActivity_Restart @global
+;
+; @clobbers r16
+
+LedActivity_Trigger:
+ lds r16, ledActivityTimer
+ tst r16
+ brne LedActivity_Trigger_ledIsOn
+ cbi LED_ACTIVITY_PORT, LED_ACTIVITY_PINNUM ; turn LED on
+LedActivity_Trigger_ledIsOn:
+ ldi r16, LED_ACTIVITY_TIME
+ sts ledActivityTimer, r16
+ ret
+; @end
+
+
+
+
+LED_ACTIVITY_END:
+.equ MODULE_SIZE_LED_ACTIVITY = LED_ACTIVITY_END-LED_ACTIVITY_BEGIN
+
+
+
diff --git a/avr/modules/led_signal/0BUILD b/avr/modules/led_signal/0BUILD
new file mode 100644
index 0000000..febd367
--- /dev/null
+++ b/avr/modules/led_signal/0BUILD
@@ -0,0 +1,11 @@
+
+
+
+
+
+ main.asm
+
+
+
+
+
diff --git a/avr/modules/led_signal/main.asm b/avr/modules/led_signal/main.asm
new file mode 100644
index 0000000..8475d01
--- /dev/null
+++ b/avr/modules/led_signal/main.asm
@@ -0,0 +1,156 @@
+; ***************************************************************************
+; 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. *
+; ***************************************************************************
+
+
+
+; ***************************************************************************
+; data
+
+.dseg
+
+ledSignalTimer: .byte 1
+ledSignalFlags: .byte 1
+ledSignalRunFlags: .byte 1
+ledSignalBitCounter: .byte 1
+
+
+; ***************************************************************************
+; code
+
+.cseg
+
+
+LED_SIGNAL_BEGIN:
+
+
+
+; ---------------------------------------------------------------------------
+; LedSignal_Init
+;
+; @return CFLAG: set if okay, clear on error
+; USED: R1, R2, R3, R4, R16, R17, X
+
+LedSignal_Init:
+ sbi LED_SIGNAL_DDR, LED_SIGNAL_PINNUM ; out
+ clr r16
+ sts ledSignalFlags, r16
+ ldi r16, 100
+ sts ledSignalTimer, r16
+ sec
+ ret
+
+
+
+; ---------------------------------------------------------------------------
+; @routine LedSignal_Every100ms @global
+;
+; @clobbers r16, r17
+
+LedSignal_Every100ms:
+ lds r16, ledSignalTimer
+ dec r16
+ breq LedSignal_Every100ms_timer0
+ sts ledSignalTimer, r16
+ cpi r16, 80
+ brcs LedSignal_Every100ms_checkBit
+ brne LedSignal_Every100ms_ret
+ rcall LedSignal_Restart ; (r16, r17)
+ rjmp LedSignal_Every100ms_ret
+LedSignal_Every100ms_checkBit:
+ lds r17, ledSignalRunFlags
+ andi r17, 1
+ brne LedSignal_Every100ms_bit1
+LedSignal_Every100ms_bit0:
+ cpi r16, 8
+ breq LedSignal_Every100ms_ledOff
+ rjmp LedSignal_Every100ms_ret
+LedSignal_Every100ms_bit1:
+ cpi r16, 3
+ breq LedSignal_Every100ms_ledOff
+ rjmp LedSignal_Every100ms_ret
+LedSignal_Every100ms_ledOff:
+ sbi LED_SIGNAL_PORT, LED_SIGNAL_PINNUM ; off
+ rjmp LedSignal_Every100ms_ret
+LedSignal_Every100ms_timer0:
+ lds r17, ledSignalBitCounter
+ dec r17
+ brne LedSignal_Every100ms_nextBit
+ ldi r17, 100
+ sts ledSignalTimer, r17
+ rjmp LedSignal_Every100ms_ret
+LedSignal_Every100ms_nextBit:
+ sts ledSignalBitCounter, r17
+ lds r16, ledSignalRunFlags
+ lsr r16
+ sts ledSignalRunFlags, r16
+ ldi r16, 10
+ sts ledSignalTimer, r16
+ cbi LED_SIGNAL_PORT, LED_SIGNAL_PINNUM ; on
+LedSignal_Every100ms_ret:
+ ret
+; @end
+
+
+
+; ---------------------------------------------------------------------------
+; @routine LedSignal_Restart @global
+;
+; @clobbers r16, r17
+
+LedSignal_Restart:
+ ldi r16, 8
+ sts ledSignalBitCounter, r16
+ ldi r16, 10
+ sts ledSignalTimer, r16
+ lds r16, ledSignalFlags
+ sts ledSignalRunFlags, r16
+ cbi LED_SIGNAL_PORT, LED_SIGNAL_PINNUM ; on
+ ret
+; @end
+
+
+
+; ---------------------------------------------------------------------------
+; @routine LedSignal_SetFlag @global
+;
+; @param r16 flag mask
+; @clobbers r17
+
+LedSignal_SetFlag:
+ lds r17, ledSignalFlags
+ or r17, r16
+ sts ledSignalFlags, r17
+ ret
+; @end
+
+
+
+; ---------------------------------------------------------------------------
+; @routine LedSignal_ClrFlag @global
+;
+; @param r16 flag mask
+; @clobbers r17
+
+LedSignal_ClrFlag:
+ lds r17, ledSignalFlags
+ com r16
+ and r17, r16
+ com r16
+ sts ledSignalFlags, r17
+ ret
+; @end
+
+
+
+
+LED_SIGNAL_END:
+.equ MODULE_SIZE_LED_SIGNAL = LED_SIGNAL_END-LED_SIGNAL_BEGIN
+
+
+