re-enabled CCS811 module, adapted to latest changes.
This commit is contained in:
@@ -144,6 +144,9 @@
|
||||
|
||||
#ifdef MODULES_CCS811
|
||||
.include "modules/ccs811/main.asm"
|
||||
#ifdef MODULES_NETWORK
|
||||
.include "modules/ccs811/send.asm"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef MODULES_TCRT1000
|
||||
|
||||
@@ -154,6 +154,10 @@ sysOnEveryMinute:
|
||||
bigcall AppStats_OnEveryMinute
|
||||
#endif
|
||||
|
||||
#ifdef MODULES_CCS811
|
||||
bigcall CCS811_OnEveryMinute
|
||||
#endif
|
||||
|
||||
bigjmp onEveryMinute
|
||||
; @end
|
||||
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
.equ CCS811_FLAGS_RESETTED = 0x40
|
||||
.equ CCS811_FLAGS_VALIDDATA = 0x20
|
||||
|
||||
.equ CCS811_VALUE_TVOC = 0x01
|
||||
.equ CCS811_VALUE_CO2 = 0x02
|
||||
|
||||
.equ CCS811_WAITMS_AFTER_RESET = 50
|
||||
.equ CCS811_WAITMS_AFTER_START = 50
|
||||
@@ -38,7 +40,6 @@
|
||||
.equ CCS811_MEASUREMODE = (0<<CCS811_MEASUREMODE_DM2_BIT) | (1<<CCS811_MEASUREMODE_DM1_BIT) | (1<<CCS811_MEASUREMODE_DM0_BIT)
|
||||
;.equ CCS811_MEASUREMODE = (0<<CCS811_MEASUREMODE_DM2_BIT) | (1<<CCS811_MEASUREMODE_DM1_BIT) | (0<<CCS811_MEASUREMODE_DM0_BIT)
|
||||
|
||||
.equ CCS811_INTERVAL = 60
|
||||
|
||||
|
||||
; ***************************************************************************
|
||||
@@ -48,7 +49,6 @@
|
||||
|
||||
ccs811DataBegin:
|
||||
ccs811Flags: .byte 1
|
||||
ccs811Timer: .byte 1
|
||||
ccs811ResponseData: .byte 5
|
||||
ccs811DataEnd:
|
||||
|
||||
@@ -80,9 +80,6 @@ CCS811_Init:
|
||||
ldi r17, (ccs811DataEnd-ccs811DataBegin)
|
||||
rcall Utils_FillSram
|
||||
|
||||
ldi r16, CCS811_INTERVAL
|
||||
sts ccs811Timer, r16
|
||||
|
||||
; check for fw mode, valid app
|
||||
rcall ccs811ReadStatus
|
||||
brcc CCS811_Init_error
|
||||
@@ -160,66 +157,28 @@ CCS811_Fini:
|
||||
; - CFLAG: set if okay, clear on error
|
||||
; USED:
|
||||
|
||||
CCS811_OnTimer:
|
||||
CCS811_OnEveryMinute:
|
||||
in r15, SREG
|
||||
push r15
|
||||
cli
|
||||
|
||||
lds r16, ccs811Flags
|
||||
andi r16, CCS811_FLAGS_ACTIVATED
|
||||
breq CCS811_OnTimer_ret
|
||||
|
||||
lds r16, ccs811Timer
|
||||
dec r16
|
||||
cpi r16, 2
|
||||
breq CCS811_OnTimer_measure
|
||||
cpi r16, 1
|
||||
breq CCS811_OnTimer_sendCO2
|
||||
tst r16
|
||||
breq CCS811_OnTimer_sendTVOC
|
||||
sts ccs811Timer, r16
|
||||
rjmp CCS811_OnTimer_ret
|
||||
CCS811_OnTimer_measure:
|
||||
lds r16, ccs811Flags
|
||||
andi r16, ~CCS811_FLAGS_VALIDDATA
|
||||
sts ccs811Flags, r16
|
||||
rcall ccs811ReadMeasurement
|
||||
; brcc CCS811_OnTimer_ret
|
||||
brcc CCS811_OnTimer_storetimerret
|
||||
; rcall ccs811SendDebug ; debug
|
||||
brcc CCS811_OnTimer_ret
|
||||
lds r16, ccs811ResponseData+4
|
||||
andi r16, (1<<CCS811_STATUS_DATAREADY_BIT)
|
||||
; breq CCS811_OnTimer_ret
|
||||
breq CCS811_OnTimer_storetimerret ; jmp if data not ready
|
||||
breq CCS811_OnTimer_ret ; jmp if data not ready
|
||||
lds r16, ccs811Flags
|
||||
ori r16, CCS811_FLAGS_VALIDDATA
|
||||
sts ccs811Flags, r16
|
||||
rjmp CCS811_OnTimer_storetimerret
|
||||
CCS811_OnTimer_sendCO2:
|
||||
lds r16, ccs811Flags
|
||||
andi r16, CCS811_FLAGS_VALIDDATA
|
||||
; breq CCS811_OnTimer_ret
|
||||
breq CCS811_OnTimer_storetimerret
|
||||
rcall ccs811SendCo2
|
||||
rjmp CCS811_OnTimer_storetimerret
|
||||
CCS811_OnTimer_sendTVOC:
|
||||
lds r16, ccs811Flags
|
||||
andi r16, CCS811_FLAGS_VALIDDATA
|
||||
; breq CCS811_OnTimer_ret
|
||||
breq CCS811_OnTimer_storetimerret
|
||||
rcall ccs811SendTvoc
|
||||
; rjmp CCS811_OnTimer_storetimerret
|
||||
CCS811_OnTimer_storetimerret:
|
||||
lds r16, ccs811Timer
|
||||
dec r16
|
||||
brne CCS811_OnTimer_storetimer
|
||||
ldi r16, CCS811_INTERVAL
|
||||
CCS811_OnTimer_storetimer:
|
||||
sts ccs811Timer, r16
|
||||
CCS811_OnTimer_ret:
|
||||
pop r15
|
||||
out SREG, r15
|
||||
clc
|
||||
ret
|
||||
|
||||
|
||||
@@ -405,54 +364,43 @@ ccs811ReadData_error:
|
||||
; @end
|
||||
|
||||
|
||||
ccs811SendDebug:
|
||||
ldi r16, 0xff ; destination address
|
||||
ldi r17, VALUE_ID_DEBUG ; value id
|
||||
ldi r22, 0
|
||||
lds r18, ccs811ResponseData ; value
|
||||
lds r19, ccs811ResponseData+1
|
||||
lds r20, ccs811ResponseData+2
|
||||
lds r21, ccs811ResponseData+3
|
||||
ldi xl, LOW(com2SendBuffer)
|
||||
ldi xh, HIGH(com2SendBuffer)
|
||||
rcall CPRO_WriteReportValue
|
||||
rjmp COM2_SendPacket
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine CCS811_GetValue @global
|
||||
;
|
||||
; @param R16 value to get (CCS811_VALUE_TVOC, CCS811_VALUE_CO2)
|
||||
; @return CFLAG set if value available, cleared otherwise
|
||||
; @return R19:R18 value
|
||||
; @return R21:R20 denom (e.g. 100, meaning value must be divided by 100)
|
||||
; @clobbers
|
||||
|
||||
|
||||
ccs811SendCo2:
|
||||
ldi r17, VALUE_ID_CO2 ; value id
|
||||
ldi r22, AQHOME_VALUETYPE_CO2
|
||||
lds r18, ccs811ResponseData+1 ; value
|
||||
lds r19, ccs811ResponseData
|
||||
rjmp ccs811SendAny
|
||||
|
||||
|
||||
|
||||
ccs811SendTvoc:
|
||||
ldi r17, VALUE_ID_TVOC ; value id
|
||||
ldi r22, AQHOME_VALUETYPE_TVOC
|
||||
lds r18, ccs811ResponseData+3 ; value
|
||||
lds r19, ccs811ResponseData+2
|
||||
rjmp ccs811SendAny
|
||||
|
||||
|
||||
|
||||
ccs811SendAny:
|
||||
mov r16, r18 ; check for FF FF
|
||||
and r16, r19
|
||||
inc r16
|
||||
brne ccs811SendAny_send ; send only if data is not FFFF
|
||||
CCS811_GetValue:
|
||||
lds r17, ccs811Flags
|
||||
andi r17, CCS811_FLAGS_VALIDDATA
|
||||
breq CCS811_GetValue_noData
|
||||
cpi r16, CCS811_VALUE_TVOC
|
||||
breq CCS811_GetValue_retTvoc
|
||||
cpi r16, CCS811_VALUE_CO2
|
||||
breq CCS811_GetValue_retCo2
|
||||
CCS811_GetValue_noData:
|
||||
clc
|
||||
ret
|
||||
ccs811SendAny_send:
|
||||
ldi r16, 0xff ; destination address
|
||||
CCS811_GetValue_retTvoc:
|
||||
lds r18, ccs811ResponseData+3 ; value
|
||||
lds r19, ccs811ResponseData+2
|
||||
ldi r20, 1
|
||||
clr r21
|
||||
ldi xl, LOW(com2SendBuffer)
|
||||
ldi xh, HIGH(com2SendBuffer)
|
||||
rcall CPRO_WriteReportValue
|
||||
rjmp COM2_SendPacket
|
||||
rjmp CCS811_GetValue_secRet
|
||||
CCS811_GetValue_retCo2:
|
||||
lds r18, ccs811ResponseData+1 ; value
|
||||
lds r19, ccs811ResponseData
|
||||
ldi r20, 1
|
||||
clr r21
|
||||
CCS811_GetValue_secRet:
|
||||
sec
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
44
avr/modules/ccs811/send.asm
Normal file
44
avr/modules/ccs811/send.asm
Normal file
@@ -0,0 +1,44 @@
|
||||
; ***************************************************************************
|
||||
; 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. *
|
||||
; ***************************************************************************
|
||||
|
||||
|
||||
.cseg
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine CCS811_SendTVOC
|
||||
|
||||
CCS811_SendTVOC:
|
||||
ldi r16, CCS811_VALUE_TVOC
|
||||
rcall CCS811_GetValue
|
||||
brcc CCS811_SendTVOC_end
|
||||
ldi r17, VALUE_ID_TVOC ; VALUE ID
|
||||
ldi r22, AQHOME_VALUETYPE_TVOC ; VALUE TYPE
|
||||
rcall Main_SendValueReport
|
||||
CCS811_SendTVOC_end:
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine CCS811_SendCO2
|
||||
|
||||
CCS811_SendCO2:
|
||||
ldi r16, CCS811_VALUE_CO2
|
||||
rcall CCS811_GetValue
|
||||
brcc CCS811_SendCO2_end
|
||||
ldi r17, VALUE_ID_CO2 ; VALUE ID
|
||||
ldi r22, AQHOME_VALUETYPE_CO2 ; VALUE TYPE
|
||||
rcall Main_SendValueReport
|
||||
CCS811_SendCO2_end:
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user