diff --git a/avr/devices/0BUILD b/avr/devices/0BUILD
index 1b89129..6a380c1 100644
--- a/avr/devices/0BUILD
+++ b/avr/devices/0BUILD
@@ -26,6 +26,7 @@
all
c01
c02
+ n14
n16
n19
n20
@@ -34,6 +35,7 @@
n23
n24
n25
+ n26
t03
diff --git a/avr/devices/n14/0BUILD b/avr/devices/n14/0BUILD
index 4c1ca39..dfcf2a6 100644
--- a/avr/devices/n14/0BUILD
+++ b/avr/devices/n14/0BUILD
@@ -2,51 +2,21 @@
-
-
-
- -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
-
-
-
-
-
-
+ boot
+ main
+
+ aqua_n14.xml
+
+
+
- n14_defs.asm
+ defs.asm
+ README
-
diff --git a/avr/devices/n14/README b/avr/devices/n14/README
new file mode 100644
index 0000000..b7094ea
--- /dev/null
+++ b/avr/devices/n14/README
@@ -0,0 +1,14 @@
+
+N14
+===
+
+- Role: LED strip controller
+- MCU: AtTiny85
+- Connection: RJ45
+- UART: uart_bitbang2
+- Periphery:
+ - LED strip connection (SK6812)
+ - OWI interface
+ - DS18B20 temperature sensor
+- Modules:
+ - MA_LIGHT: motion activated light
diff --git a/avr/devices/n14/aqua_n14.xml b/avr/devices/n14/aqua_n14.xml
new file mode 100644
index 0000000..c74f8df
--- /dev/null
+++ b/avr/devices/n14/aqua_n14.xml
@@ -0,0 +1,29 @@
+
+
+ AQUA
+ N
+ 14
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/avr/devices/n14/boot/0BUILD b/avr/devices/n14/boot/0BUILD
new file mode 100644
index 0000000..de971dd
--- /dev/null
+++ b/avr/devices/n14/boot/0BUILD
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+ -I $(builddir)
+ -I $(srcdir)
+ -I $(topsrcdir)/avr
+ -I $(topbuilddir)/avr
+
+
+
+
+ boot.asm
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/avr/devices/n14/n14_boot.asm b/avr/devices/n14/boot/boot.asm
similarity index 64%
rename from avr/devices/n14/n14_boot.asm
rename to avr/devices/n14/boot/boot.asm
index fe7d310..2acc025 100644
--- a/avr/devices/n14/n14_boot.asm
+++ b/avr/devices/n14/boot/boot.asm
@@ -14,30 +14,19 @@
.include "include/tn85def.inc" ; Define device ATtiny85
.list
-.include "n14_defs.asm"
-.include "defs_all.asm"
-
-
-#define COM_ACCEPT_ALL_DEST
-
-
-; ***************************************************************************
-; defines
-
-; ---------------------------------------------------------------------------
-; generic
+.include "version.asm"
+.include "../defs.asm"
+.include "devices/all/defs.asm"
+.include "common/calls.asm"
.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
+; ***************************************************************************
+; defines
; ---------------------------------------------------------------------------
@@ -95,8 +84,7 @@ firmwareStart: rjmp main ; will be overwritten when flashing
main:
- rjmp bootLoader ; this routine is in modules/flash/proto.asm
-
+ rjmp bootLoader ; this routine is in modules/bootloader/main.asm
@@ -112,6 +100,7 @@ main:
.include "modules/flash/io.asm"
.include "modules/flash/io_attn.asm"
.include "modules/flash/io_bitbang.asm"
+.include "modules/flash/flashxp.asm"
.include "modules/flash/flash1p.asm"
.include "modules/flash/flashprocess.asm"
.include "modules/flash/wait.asm"
@@ -138,72 +127,3 @@ systemSetSpeed:
ret
-
-DEBUG1:
- ldi r19, 50
- ldi r20, 1
- ldi r21, 9
- rcall blinkLed
- rjmp DEBUG1
-
-
-DEBUG2:
- ldi r19, 50
- ldi r20, 1
- ldi r21, 1
- rcall blinkLed
- rjmp DEBUG2
-
-
-
-; @param r19 loop count
-; @param r20 on time
-; @param r21 off time
-; @clobbers (R16, R18, R22, R24, R25)
-
-blinkLed:
- cbi LED_SIMPLE_PORT, LED_SIMPLE_PINNUM ; on
- mov r22, r20
- rcall waitForMultiple100ms ; (R252
- sbi LED_SIMPLE_PORT, LED_SIMPLE_PINNUM ; off
- mov r22, r21
- rcall waitForMultiple100ms ; (R22)
- dec r19
- brne blinkLed
- ret
-
-
-; @param r22 number of 100ms periods to wait
-waitForMultiple100ms:
-waitForMultiple100ms_loop:
- push r22
- rcall waitFor100ms
- pop r22
- dec r22
- brne waitForMultiple100ms_loop
- ret
-
-
-waitFor100ms:
- ldi r22, 10
-waitFor100ms_loop:
- push r22
- rcall waitFor10ms
- pop r22
- dec r22
- brne waitFor100ms_loop
- ret
-
-waitFor10ms:
- ldi r22, 100
-waitFor10ms_loop:
- push r22
- rcall Utils_WaitFor100MicroSecs
- pop r22
- dec r22
- brne waitFor10ms_loop
- ret
-
-
-
-
diff --git a/avr/devices/n14/n14_defs.asm b/avr/devices/n14/defs.asm
similarity index 97%
rename from avr/devices/n14/n14_defs.asm
rename to avr/devices/n14/defs.asm
index 39a9b12..13d0245 100644
--- a/avr/devices/n14/n14_defs.asm
+++ b/avr/devices/n14/defs.asm
@@ -1,5 +1,5 @@
; ***************************************************************************
-; copyright : (C) 2024 by Martin Preuss
+; copyright : (C) 2025 by Martin Preuss
; email : martin@libchipcard.de
;
; ***************************************************************************
@@ -39,6 +39,7 @@
.equ LED_SIMPLE_OFFTIME = 30
.equ LED_SIMPLE_DDR = DDRB
.equ LED_SIMPLE_PORT = PORTB
+.equ LED_SIMPLE_PORTIN = PINB
.equ LED_SIMPLE_PINNUM = PORTB4
diff --git a/avr/devices/n14/main/0BUILD b/avr/devices/n14/main/0BUILD
new file mode 100644
index 0000000..47e39ec
--- /dev/null
+++ b/avr/devices/n14/main/0BUILD
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ -I $(builddir)
+ -I $(srcdir)
+ -I $(topsrcdir)/avr
+ -I $(topbuilddir)/avr
+
+
+
+
+ main.asm
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/avr/devices/n14/main/main.asm b/avr/devices/n14/main/main.asm
new file mode 100644
index 0000000..66496a1
--- /dev/null
+++ b/avr/devices/n14/main/main.asm
@@ -0,0 +1,208 @@
+; ***************************************************************************
+; 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 "version.asm"
+.include "../defs.asm"
+;.include "./data.asm"
+
+.include "devices/all/defs.asm"
+
+.include "common/calls.asm"
+.include "common/utils_wait.asm"
+
+
+
+; ***************************************************************************
+; defines
+
+; ---------------------------------------------------------------------------
+; generic
+
+.equ NET_BUFFERS_NUM = 6
+.equ NET_BUFFERS_SIZE = 32
+
+
+
+; ---------------------------------------------------------------------------
+; firmware settings including list of modules used
+
+#define MODULES_CLOCK
+#define MODULES_LED_SIMPLE
+#define MODULES_NETWORK
+#define MODULES_UART_BITBANG
+#define MODULES_OWI_MASTER
+#define MODULES_DS18B20
+#define MODULES_SK6812
+;#define MODULES_MOTION_LIGHT
+
+#define APPS_NETWORK
+#define APPS_REPORTSENSORS
+#define APPS_STATS
+#define APPS_MA_LIGHT
+
+
+
+; ---------------------------------------------------------------------------
+; 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_DS18B20_TEMP = 0x06
+
+;.equ VALUE_ID_REED_CONF = 0x81
+.equ VALUE_ID_LED_NUMLEDS = 0x82
+.equ VALUE_ID_LED_RGBW_VALUE = 0x83
+.equ VALUE_ID_MAL_RGBW_VALUE = 0x84
+.equ VALUE_ID_MAL_ONTIME = 0x85
+.equ VALUE_ID_MAL_SOURCE1 = 0x86
+.equ VALUE_ID_MAL_SOURCE2 = 0x87
+
+.equ VALUE_ID_LEDSIMPLE_TIMING = 0x88
+
+
+; ***************************************************************************
+; code segment
+
+.cseg
+.org 000000
+
+
+
+; ---------------------------------------------------------------------------
+; Reset and interrupt vectors
+
+ rjmp BOOTLOADER_ADDR ; Reset vector ; use this for flashed system
+ reti ; EXT_INT0
+ rjmp UART_BitBang_PcintIsr ; 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 DEVICEINFO_ID, 0
+devInfoVersion: .db DEVICEINFO_VERSION, DEVICEINFO_REVISION ; version, revision
+firmwareVersion: .db FIRMWARE_VARIANT_LEDSTRIPS, FIRMWARE_VERSION_MAJOR
+ .db FIRMWARE_VERSION_MINOR, FIRMWARE_VERSION_PATCHLEVEL
+
+; ---------------------------------------------------------------------------
+; @routine firmwareStart @global
+
+firmwareStart:
+ rjmp main
+; @end
+
+
+
+; ---------------------------------------------------------------------------
+; @routine onSystemStart
+
+onSystemStart:
+ ret
+; @end
+
+
+
+; ---------------------------------------------------------------------------
+; @routine onMessageReceived
+;
+; Called on every message received
+
+onMessageReceived:
+ clc
+ ret
+; @end
+
+
+
+; ---------------------------------------------------------------------------
+; @routine onEvery100ms
+;
+; Called every 100ms. Add your routine calls here. No arguments, no results.
+
+onEvery100ms:
+onEveryMinute:
+onEveryHour:
+onEveryDay:
+ ret
+; @end
+
+onEverySecond:
+ ret
+ ; debug
+ ldi r19, 0x00 ; G
+ ldi r18, 0xff ; R
+ ldi r20, 0x55 ; B
+ ldi r21, 0xaa ; W
+ rcall SK6812_SetAllColor ; r23 (r16, r17)
+ ret
+
+
+
+; ---------------------------------------------------------------------------
+; @routine onEveryLoop
+;
+; Called on every loop (i.e. after awakening from sleep).
+;
+onEveryLoop:
+ ret
+; @end
+
+
+
+
+
+; ***************************************************************************
+; includes
+
+.include "devices/all/hw_tn85.asm"
+.include "devices/all/includes.asm"
+.include "common/debug.asm"
+
+
+
+; ---------------------------------------------------------------------------
+; defines for network interface
+
+.equ netInterfaceData = uart_bitbang_iface
+
+
+
+
+
+
diff --git a/avr/devices/n14/n14_main.asm b/avr/devices/n14/n14_main.asm
deleted file mode 100644
index 08aad36..0000000
--- a/avr/devices/n14/n14_main.asm
+++ /dev/null
@@ -1,333 +0,0 @@
-; ***************************************************************************
-; 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_all.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_DS18B20
-#define MODULES_SK6812
-#define MODULES_MOTION_LIGHT
-
-; #define COM_ACCEPT_ALL_DEST
-
-
-
-; ---------------------------------------------------------------------------
-; 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_DS18B20_TEMP = 0x06
-
-;.equ VALUE_ID_REED_CONF = 0x81
-.equ VALUE_ID_LED_NUMLEDS = 0x82
-.equ VALUE_ID_LED_RGBW_VALUE = 0x83
-.equ VALUE_ID_MAL_RGBW_VALUE = 0x84
-.equ VALUE_ID_MAL_ONTIME = 0x85
-.equ VALUE_ID_MAL_SOURCE1 = 0x86
-.equ VALUE_ID_MAL_SOURCE2 = 0x87
-
-
-; ***************************************************************************
-; code segment
-
-.cseg
-.org 000000
-
-
-
-; ---------------------------------------------------------------------------
-; Reset and interrupt vectors
-
- rjmp BOOTLOADER_ADDR ; Reset vector ; use this for flashed system
- reti ; EXT_INT0
- rjmp uartBitbangIsrPcint0 ; 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 DEVICEINFO_ID, 0
-devInfoVersion: .db DEVICEINFO_VERSION, DEVICEINFO_REVISION ; 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"
- .include "modules/com2/buffer.asm"
- #ifdef MODULES_STATS
- .include "modules/comproto/msg_recvstats.asm"
- .include "modules/comproto/msg_sendstats.asm"
- .include "modules/comproto/msg_sysstats.asm"
- .include "modules/comproto/msg_memstats.asm"
- #endif
- .include "modules/comproto/msg_pong.asm"
- .include "modules/comproto/msg_value.asm"
- .include "modules/comproto/msg_device.asm"
- .include "modules/comproto/msg_reboot.asm"
- .include "modules/uart_bitbang/defs.asm"
- .include "modules/uart_bitbang/main.asm"
- .include "modules/uart_bitbang/bytelevel.asm"
- .include "modules/uart_bitbang/packetlevel.asm"
- #ifdef MODULES_COM_WITH_ADDR_PROTO
- .include "modules/comproto/defs.asm"
- .include "modules/comproto/main.asm"
- .include "modules/comproto/addr.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
-#ifdef MODULES_MOTION_LIGHT
- .include "modules/ma_light/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, 9000 ; every 15m
-#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_all.asm"
-
-
-; ---------------------------------------------------------------------------
-; Called early on system startup. No arguments, no results.
-
-systemSetSpeed:
-.if clock == 1000000
- ldi r16, (1<