avr: added initial module to handle reed contacts.

Detects and reports opening and closing of a window/door.
Nexts step is to allow for external configuration (e.g. standard mode
with one reed contact versus multi-contact mode to detect tilting of a
window/door).
This commit is contained in:
Martin Preuss
2023-05-12 21:41:39 +02:00
parent c6e013fdcf
commit 84403d07f6
6 changed files with 424 additions and 4 deletions

View File

@@ -68,6 +68,7 @@
#define MODULES_SI7021
#define MODULES_STATS
;#define MODULES_CNY70
#define MODULES_REED
.set MODULES_MASK = 0
@@ -95,6 +96,9 @@
#ifdef MODULES_CNY70
.set MODULES_MASK = MODULES_MASK | (1<<AQHOME_FW_MODULE_CNY70)
#endif
#ifdef MODULES_REED
.set MODULES_MASK = MODULES_MASK | (1<<AQHOME_FW_MODULE_REED)
#endif
@@ -108,6 +112,8 @@
.equ VALUE_ID_HUM1 = 0x02
.equ VALUE_ID_ADC = 0x03
.equ VALUE_ID_REED1 = 0x04
.equ VALUE_ID_REED2 = 0x05
; ---------------------------------------------------------------------------
@@ -185,6 +191,28 @@
; ---------------------------------------------------------------------------
; Reed
;
.equ REEDOUT_DDR = DDRA
.equ REEDOUT_PORT = PORTA
.equ REEDOUT_PIN = PINA
.equ REEDOUT_PINNUM = PORTA0
.equ REED1_DDR = DDRA
.equ REED1_PORT = PORTA
.equ REED1_PIN = PINA
.equ REED1_PINNUM = PORTA2
.equ REED2_DDR = DDRA
.equ REED2_PORT = PORTA
.equ REED2_PIN = PINA
.equ REED2_PINNUM = PORTA5
; ***************************************************************************
; code segment
@@ -270,6 +298,9 @@ firmwareStart: rjmp main
#ifdef MODULES_CNY70
.include "modules/cny70/main.asm"
#endif
#ifdef MODULES_REED
.include "modules/reed/main.asm"
#endif
@@ -292,7 +323,10 @@ sramTimerEnqueueValues: .byte 2
sramTimerCny70SendAdc: .byte 2
#endif
#ifdef MODULES_LCD
sramPeriodicalLcdMark: .byte 2
sramPeriodicalLcdMark: .byte 2
#endif
#ifdef MODULES_REED
sramTimerReedCheck: .byte 2
#endif
@@ -331,6 +365,9 @@ timerList:
#endif
#ifdef MODULES_CNY70
.dw sramTimerCny70SendAdc, sendAdc, TIMER_FLAGS_IF_ADDR, 30 ; every 30s
#endif
#ifdef MODULES_REED
.dw sramTimerReedCheck, REED_Timer, TIMER_FLAGS_IF_ADDR, 1 ; every 1s
#endif
.dw 0 ; end of list
@@ -419,6 +456,10 @@ onEvery100ms:
rcall CNY70_Every100ms
#endif
#ifdef MODULES_REED
rcall REED_Every100ms
#endif
ret