avr: added new version of tcrt1000.
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
; ***************************************************************************
|
||||
; copyright : (C) 2023 by Martin Preuss
|
||||
; copyright : (C) 2025 by Martin Preuss
|
||||
; email : martin@libchipcard.de
|
||||
;
|
||||
; ***************************************************************************
|
||||
@@ -12,10 +12,8 @@
|
||||
.equ TCRT1K_INTERVAL = 7
|
||||
.equ TCRT1K_LIMIT = 170
|
||||
|
||||
.equ TCRT1K_STATE_OPEN = 255
|
||||
.equ TCRT1K_STATE_CLOSED = 0
|
||||
|
||||
.equ TCRT1K_FLAGS_REPORT_CHANGE_BIT = 0
|
||||
.equ TCRT1K_FLAGS_VALID_BIT = 7
|
||||
.equ TCRT1K_FLAGS_VALUE_BIT = 0
|
||||
|
||||
|
||||
; ***************************************************************************
|
||||
@@ -25,9 +23,6 @@
|
||||
|
||||
tcrt1kDataBegin:
|
||||
tcrt1kTimer: .byte 1
|
||||
tcrt1kLastState: .byte 1
|
||||
tcrt1kLastValue: .byte 1
|
||||
tcrt1kStateCounter: .byte 1
|
||||
tcrt1kFlags: .byte 1
|
||||
tcrt1kDataEnd:
|
||||
|
||||
@@ -83,15 +78,19 @@ TCRT1K_Fini:
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine TCRT1K_Every100ms @global
|
||||
;
|
||||
|
||||
TCRT1K_Every100ms:
|
||||
lds r16, tcrt1kTimer
|
||||
dec r16
|
||||
breq TCRT1K_Every100ms_readValue
|
||||
sts tcrt1kTimer, r16
|
||||
cpi r16, 2
|
||||
breq TCRT1K_Every100ms_ledOn
|
||||
cpi r16, 1
|
||||
breq TCRT1K_Every100ms_startMeasure
|
||||
cpi r16, 2
|
||||
breq TCRT1K_Every100ms_ledOn
|
||||
ret
|
||||
TCRT1K_Every100ms_ledOn:
|
||||
sbi TCRT1K_LED_PORT, TCRT1K_LED_PIN ; LED on
|
||||
@@ -107,83 +106,38 @@ TCRT1K_Every100ms_readValue:
|
||||
sts tcrt1kTimer, r16
|
||||
in r16, ADCH ; read value from ADC
|
||||
cbi TCRT1K_LED_PORT, TCRT1K_LED_PIN ; LED off
|
||||
sts tcrt1kLastValue, r16
|
||||
|
||||
; convert to 1/0
|
||||
lds r17, tcrt1kFlags
|
||||
cbr r17, (1<<TCRT1K_FLAGS_VALUE_BIT)
|
||||
cpi r16, TCRT1K_LIMIT
|
||||
ldi r16, TCRT1K_STATE_CLOSED
|
||||
brcs TCRT1K_Every100ms_checkChange
|
||||
ldi r16, TCRT1K_STATE_OPEN
|
||||
TCRT1K_Every100ms_checkChange:
|
||||
lds r17, tcrt1kLastState
|
||||
cp r16, r17
|
||||
brne TCRT1K_Every100ms_stateChanged
|
||||
lds r16, tcrt1kStateCounter
|
||||
inc r16
|
||||
brne TCRT1K_Every100ms_incStateCounter
|
||||
ret
|
||||
TCRT1K_Every100ms_incStateCounter:
|
||||
sts tcrt1kStateCounter, r16
|
||||
cpi r16, 1 ; report change after one interval
|
||||
breq TCRT1K_Every100ms_reportChange
|
||||
cpi r16, 2 ; report change after two intervals
|
||||
breq TCRT1K_Every100ms_reportChange
|
||||
cpi r16, 10 ; report change after ten intervals
|
||||
breq TCRT1K_Every100ms_reportChange
|
||||
ret
|
||||
TCRT1K_Every100ms_reportChange:
|
||||
lds r16, tcrt1kFlags
|
||||
ori r16, (1<<TCRT1K_FLAGS_REPORT_CHANGE_BIT)
|
||||
sts tcrt1kFlags, r16
|
||||
ret
|
||||
TCRT1K_Every100ms_stateChanged:
|
||||
sts tcrt1kLastState, r16 ; store new state
|
||||
clr r16
|
||||
sts tcrt1kStateCounter, r16
|
||||
TCRT1K_Every100ms_end:
|
||||
brcs TCRT1K_Every100ms_valueSet
|
||||
sbr r17, (1<<TCRT1K_FLAGS_VALUE_BIT)
|
||||
TCRT1K_Every100ms_valueSet:
|
||||
sbr r17, (1<<TCRT1K_FLAGS_VALID_BIT)
|
||||
sts tcrt1kFlags, r17
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
TCRT1K_Run:
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine TCRT1K_GetValue @global
|
||||
;
|
||||
; @return CFLAG set if there is a value, cleared otherwise (standard api)
|
||||
; @return R16 value (0=door closed, 1=door open)
|
||||
; @clobbers R16
|
||||
|
||||
TCRT1K_GetValue:
|
||||
lds r16, tcrt1kFlags
|
||||
andi r16, (1<<TCRT1K_FLAGS_REPORT_CHANGE_BIT)
|
||||
breq TCRT1K_Run_retnc
|
||||
rcall TCRT1K_SendState
|
||||
brcc TCRT1K_Run_retnc
|
||||
lds r16, tcrt1kFlags
|
||||
andi r16, ~(1<<TCRT1K_FLAGS_REPORT_CHANGE_BIT)
|
||||
sts tcrt1kFlags, r16
|
||||
sbrs r16, TCRT1K_FLAGS_VALID_BIT
|
||||
rjmp TCRT1K_GetValue_retNc
|
||||
andi r16, (1<<TCRT1K_FLAGS_VALUE_BIT)
|
||||
sec
|
||||
ret
|
||||
TCRT1K_Run_retnc:
|
||||
TCRT1K_GetValue_retNc:
|
||||
clc
|
||||
ret
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
TCRT1K_SendState:
|
||||
lds r16, com2Address
|
||||
tst r16
|
||||
brne TCRT1K_SendState_haveAddress
|
||||
clc
|
||||
ret
|
||||
TCRT1K_SendState_haveAddress:
|
||||
ldi r16, 0xff ; destination address
|
||||
ldi r17, VALUE_ID_TCRT1K ; value id
|
||||
ldi r22, AQHOME_VALUETYPE_DOOR
|
||||
lds r18, tcrt1kLastState ; value
|
||||
clr r19
|
||||
ldi r20, 1 ; denominator
|
||||
; lds r20, tcrt1kLastValue
|
||||
clr r21
|
||||
ldi xl, LOW(com2SendBuffer)
|
||||
ldi xh, HIGH(com2SendBuffer)
|
||||
rcall CPRO_WriteReportValue
|
||||
rjmp COM2_SendPacket
|
||||
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user