diff --git a/avr/devices/0BUILD b/avr/devices/0BUILD
index 9d5e1b5..88c2402 100644
--- a/avr/devices/0BUILD
+++ b/avr/devices/0BUILD
@@ -7,6 +7,7 @@
n06
n11
n12
+ n14
diff --git a/avr/devices/n14/.gitignore b/avr/devices/n14/.gitignore
new file mode 100644
index 0000000..8e0618c
--- /dev/null
+++ b/avr/devices/n14/.gitignore
@@ -0,0 +1,2 @@
+*.eep.hex
+*.obj
diff --git a/avr/devices/n14/0BUILD b/avr/devices/n14/0BUILD
new file mode 100644
index 0000000..4c1ca39
--- /dev/null
+++ b/avr/devices/n14/0BUILD
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+ -I $(builddir)
+ -I $(srcdir)
+ -I $(topsrcdir)/avr
+ -I $(topbuilddir)/avr
+
+
+
+
+ n14_main.asm
+
+
+
+
+
+
+
+
+
+
+ -I $(builddir)
+ -I $(srcdir)
+ -I $(topsrcdir)/avr
+ -I $(topbuilddir)/avr
+
+
+
+
+ n14_boot.asm
+
+
+
+
+
+
+
+
+
+
+ n14_defs.asm
+
+
+
+
+
+
diff --git a/avr/devices/n14/n14_boot.asm b/avr/devices/n14/n14_boot.asm
new file mode 100644
index 0000000..a098163
--- /dev/null
+++ b/avr/devices/n14/n14_boot.asm
@@ -0,0 +1,124 @@
+; ***************************************************************************
+; Source file for base system node on AtTiny 85
+;
+; This is for the maintenance system (i.e. the flash loader).
+;
+; All definitions and changes should go into this file.
+;
+;
+; ***************************************************************************
+
+.equ clock=1000000 ; Define the clock frequency
+
+.nolist
+.include "include/tn85def.inc" ; Define device ATtiny85
+.list
+
+.include "n14_defs.asm"
+.include "defs.asm"
+
+
+
+; ***************************************************************************
+; defines
+
+; ---------------------------------------------------------------------------
+; generic
+
+.include "common/utils_wait.asm"
+.include "modules/com2/defs.asm"
+.include "modules/comproto/defs.asm"
+
+
+; ---------------------------------------------------------------------------
+; firmware settings
+
+.equ FIRMWARE_VERSION_MAJOR = 0
+.equ FIRMWARE_VERSION_MINOR = 0
+.equ FIRMWARE_VERSION_PATCHLEVEL = 1
+
+
+; ---------------------------------------------------------------------------
+; LED
+
+.equ LED_DDR = DDRB
+.equ LED_PORT = PORTB
+.equ LED_PIN = PINB
+.equ LED_PINNUM = PORTB4
+
+
+
+; ***************************************************************************
+; code segment
+
+.cseg
+.org 0x0000
+
+
+
+; ---------------------------------------------------------------------------
+; Reset and interrupt vectors
+ rjmp main ; Reset vector
+ reti ; EXT_INT0
+ reti ; PCI0
+ reti ; OC1A
+ reti ; OVF1
+ reti ; OVF0
+ reti ; ERDY
+ reti ; ACI
+ reti ; ADCC
+ reti ; OC1B
+ reti ; OC0A
+ reti ; OC0B
+ reti ; WATCHDOG
+ reti ; USI_STR
+ reti ; USI_OVF
+
+devInfoBlock: ; 12 bytes
+devInfoManufacturer: .db 'A', 'Q', 'U', 'A'
+devInfoId: .db 'N', 0
+devInfoVersion: .db 14, 0 ; version, revision
+firmwareVersion: .db FIRMWARE_VARIANT_BOOT, FIRMWARE_VERSION_MAJOR
+ .db FIRMWARE_VERSION_MINOR, FIRMWARE_VERSION_PATCHLEVEL
+
+firmwareStart: rjmp main ; will be overwritten when flashing
+
+
+
+; ***************************************************************************
+; main code
+
+
+.org BOOTLOADER_ADDR
+
+
+main:
+ rjmp bootLoader ; this routine is in modules/flash/proto.asm
+
+
+
+
+; ***************************************************************************
+; includes
+
+.include "modules/com2/lowlevel.asm"
+.include "modules/com2/crc.asm"
+.include "modules/com2/packets.asm"
+.include "common/crc8.asm"
+.include "common/utils_wait_fixed.asm"
+.include "common/utils_copy_from_flash.asm"
+.include "common/utils_copy_sdram.asm"
+.include "modules/flash/bootloader.asm"
+.include "modules/flash/flash.asm"
+.include "modules/flash/recv.asm"
+.include "modules/flash/send.asm"
+.include "modules/flash/wait.asm"
+.include "modules/flash/hdl_flash_start.asm"
+.include "modules/flash/hdl_flash_data.asm"
+.include "modules/flash/hdl_flash_end.asm"
+.include "modules/flash/flash_rsp.asm"
+.include "modules/flash/flash_ready.asm"
+
+
+
+
diff --git a/avr/devices/n14/n14_defs.asm b/avr/devices/n14/n14_defs.asm
new file mode 100644
index 0000000..b3bea1e
--- /dev/null
+++ b/avr/devices/n14/n14_defs.asm
@@ -0,0 +1,81 @@
+; ***************************************************************************
+; copyright : (C) 2024 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. *
+; ***************************************************************************
+
+; ***************************************************************************
+;
+; AtTiny85
+; --------
+; /RESET PB5 1 8 VCC
+; OWI PB3 2 7 PB2 COM-ATTN
+; LED PB4 3 6 PB1 COM-DATA
+; GND 4 5 PB0 LEDSTRIP
+; --------
+;
+; ***************************************************************************
+
+
+
+.equ BOOTLOADER_ADDR = 0xd00
+
+
+.equ FIRMWARE_VARIANT_BOOT = 0
+.equ FIRMWARE_VARIANT_LEDSTRIPS = 1
+
+
+; ---------------------------------------------------------------------------
+; LED module
+
+.equ LED_SIMPLE_ONTIME = 3
+.equ LED_SIMPLE_OFFTIME = 30
+.equ LED_SIMPLE_DDR = DDRB
+.equ LED_SIMPLE_PORT = PORTB
+.equ LED_SIMPLE_PINNUM = PORTB4
+
+
+
+; ---------------------------------------------------------------------------
+; COM module
+
+.equ COM_BIT_LENGTH = 52000 ; 104000=9600, 52000=19200, 26000=38400
+
+.equ COM_DDR_DATA = DDRB
+.equ COM_PORT_DATA = PORTB
+.equ COM_PIN_DATA = PINB
+.equ COM_PINNUM_DATA = PORTB1
+
+.equ COM_DDR_ATTN = DDRB
+.equ COM_PORT_ATTN = PORTB
+.equ COM_PIN_ATTN = PINB
+.equ COM_PINNUM_ATTN = PORTB2
+
+.equ COM_IRQ_ADDR_ATTN = PCMSK
+.equ COM_IRQ_BIT_ATTN = PCINT2 ; bit 2 in PCMSK0 (PCINT2)
+.equ COM_IRQ_GIFR_ATTN = PCIF
+.equ COM_IRQ_GIMSK_ATTN = PCIE
+
+
+; ---------------------------------------------------------------------------
+; 1-Wire Master
+;
+
+.equ OWI_DDR = DDRB
+.equ OWI_PORTOUT = PORTB
+.equ OWI_PORTIN = PINB
+.equ OWI_PINNUM = PORTB3
+
+
+; ---------------------------------------------------------------------------
+; SK6812
+
+.equ SK6812_DDR = DDRB
+.equ SK6812_PORT = PORTB
+.equ SK6812_PINNUM = PORTB0
+
+
+
diff --git a/avr/devices/n14/n14_main.asm b/avr/devices/n14/n14_main.asm
new file mode 100644
index 0000000..5059e7e
--- /dev/null
+++ b/avr/devices/n14/n14_main.asm
@@ -0,0 +1,347 @@
+; ***************************************************************************
+; copyright : (C) 2024 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. *
+; ***************************************************************************
+
+
+; ***************************************************************************
+; Source file for LED controller node on AtTiny 85
+;
+; This is for the full system (i.e. not the boot loader).
+; ***************************************************************************
+
+.equ clock=8000000 ; Define the clock frequency
+
+
+
+.nolist
+.include "include/tn85def.inc" ; Define device ATtiny85
+.list
+
+.include "n14_defs.asm"
+.include "defs.asm"
+.include "common/utils_wait.asm" ; wait macro
+
+
+
+; ***************************************************************************
+; defines
+
+; ---------------------------------------------------------------------------
+; firmware settings including list of modules used
+
+.equ FIRMWARE_VERSION_MAJOR = 0
+.equ FIRMWARE_VERSION_MINOR = 0
+.equ FIRMWARE_VERSION_PATCHLEVEL = 1
+
+
+#define MODULES_TIMER
+#define MODULES_COM
+#define MODULES_COM_WITH_ADDR_PROTO
+#define MODULES_LED_SIMPLE
+#define MODULES_STATS
+;#define MODULES_OWI_MASTER
+#define MODULES_SK6812
+
+
+
+; ---------------------------------------------------------------------------
+; defines for modules
+
+;.equ VALUE_ID_SI7021_TEMP = 0x01
+;.equ VALUE_ID_SI7021_HUM = 0x02
+
+;.equ VALUE_ID_ADC = 0x03
+;.equ VALUE_ID_REED1 = 0x04
+;.equ VALUE_ID_REED2 = 0x05
+
+;.equ VALUE_ID_REED_CONF = 0x81
+.equ VALUE_ID_LED_NUMLEDS = 0x82
+.equ VALUE_ID_LED_RGBW_VALUE = 0x83
+
+
+
+; ***************************************************************************
+; code segment
+
+.cseg
+.org 000000
+
+
+
+; ---------------------------------------------------------------------------
+; Reset and interrupt vectors
+
+ rjmp BOOTLOADER_ADDR ; Reset vector ; use this for flashed system
+ reti ; EXT_INT0
+ rjmp com2IsrPcint0 ; PCI0
+ reti ; OC1A
+ reti ; OVF1
+ reti ; OVF0
+ reti ; ERDY
+ reti ; ACI
+ reti ; ADCC
+ reti ; OC1B
+ rjmp baseTimerIrqOC0A ; OC0A
+ reti ; OC0B
+ reti ; WATCHDOG
+ reti ; USI_STR
+ reti ; USI_OVF
+
+
+devInfoBlock: ; 12 bytes
+devInfoManufacturer: .db 'A', 'Q', 'U', 'A'
+devInfoId: .db 'N', 0
+devInfoVersion: .db 14, 0 ; version, revision
+firmwareVersion: .db FIRMWARE_VARIANT_LEDSTRIPS, FIRMWARE_VERSION_MAJOR
+ .db FIRMWARE_VERSION_MINOR, FIRMWARE_VERSION_PATCHLEVEL
+
+firmwareStart: rjmp main
+
+
+; ***************************************************************************
+; includes
+
+.include "common/utils.asm"
+.include "common/utils_wait_fixed.asm"
+.include "common/utils_copy_from_flash.asm"
+.include "common/utils_copy_sdram.asm"
+.include "common/crc8.asm"
+
+.include "modules/basetimer/main.asm"
+
+#ifdef MODULES_TIMER
+ .include "modules/timer/main.asm"
+#endif
+#ifdef MODULES_LED_SIMPLE
+.include "modules/led_simple/main.asm"
+#endif
+#ifdef MODULES_COM
+ .include "modules/com2/defs.asm"
+ .include "modules/com2/main.asm"
+ #ifdef MODULES_COM_WITH_ADDR_PROTO
+ .include "modules/comproto/defs.asm"
+ .include "modules/comproto/main.asm"
+ .include "modules/comproto/addr.asm"
+ .include "modules/comproto/msg_recvstats.asm"
+ .include "modules/comproto/msg_sendstats.asm"
+ .include "modules/comproto/msg_sysstats.asm"
+ .include "modules/comproto/msg_memstats.asm"
+ .include "modules/comproto/msg_pong.asm"
+ .include "modules/comproto/msg_value.asm"
+ .include "modules/comproto/msg_device.asm"
+ .include "modules/comproto/msg_reboot.asm"
+ #endif
+#endif
+#ifdef MODULES_STATS
+ .include "modules/stats/main.asm"
+#endif
+#ifdef MODULES_OWI_MASTER
+ .include "modules/owimaster/main.asm"
+#endif
+#ifdef MODULES_DS18B20
+ .include "modules/ds18b20/main.asm"
+#endif
+#ifdef MODULES_SK6812
+ .include "modules/sk6812/main.asm"
+#endif
+
+
+; ***************************************************************************
+; data in SRAM
+
+.dseg
+
+
+#ifdef MODULES_DS18B20
+ sramDs18b20Timer: .byte 2
+ sramSendDs18b20TempTimer: .byte 2
+#endif
+
+
+; ***************************************************************************
+; data in FLASH
+
+.cseg
+
+
+
+; ---------------------------------------------------------------------------
+; timer list
+
+
+timerList:
+; SRAM variable/counter routine flags secs (0=don't start or restart)
+#ifdef MODULES_COM_WITH_ADDR_PROTO
+ .dw cproAddresModeTimer, CPRO_Address_OnTimer, 0, 0 ; (no restart)
+#endif
+#ifdef MODULES_STATS
+ .dw statsSendTimer, Stats_Timer, TIMER_FLAGS_IF_ADDR, 3000 ; every 5m
+#endif
+#ifdef MODULES_DS18B20
+ .dw sramDs18b20Timer, Ds18b20_OnTimer, 0, 300 ; every 30s
+ .dw sramSendDs18b20TempTimer, sendDs18b20Temp, TIMER_FLAGS_IF_ADDR, 600 ; every 60s
+#endif
+ .dw 0 ; end of list
+
+
+
+
+
+.include "main.asm"
+
+
+; ---------------------------------------------------------------------------
+; Called early on system startup. No arguments, no results.
+
+systemSetSpeed:
+.if clock == 1000000
+ ldi r16, (1<