re-enabled CCS811 module, adapted to latest changes.

This commit is contained in:
Martin Preuss
2025-06-05 22:44:27 +02:00
parent 08a1313ba5
commit 284539fd52
4 changed files with 87 additions and 88 deletions

View File

@@ -144,6 +144,9 @@
#ifdef MODULES_CCS811 #ifdef MODULES_CCS811
.include "modules/ccs811/main.asm" .include "modules/ccs811/main.asm"
#ifdef MODULES_NETWORK
.include "modules/ccs811/send.asm"
#endif
#endif #endif
#ifdef MODULES_TCRT1000 #ifdef MODULES_TCRT1000

View File

@@ -154,6 +154,10 @@ sysOnEveryMinute:
bigcall AppStats_OnEveryMinute bigcall AppStats_OnEveryMinute
#endif #endif
#ifdef MODULES_CCS811
bigcall CCS811_OnEveryMinute
#endif
bigjmp onEveryMinute bigjmp onEveryMinute
; @end ; @end

View File

@@ -16,6 +16,8 @@
.equ CCS811_FLAGS_RESETTED = 0x40 .equ CCS811_FLAGS_RESETTED = 0x40
.equ CCS811_FLAGS_VALIDDATA = 0x20 .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_RESET = 50
.equ CCS811_WAITMS_AFTER_START = 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) | (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_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: ccs811DataBegin:
ccs811Flags: .byte 1 ccs811Flags: .byte 1
ccs811Timer: .byte 1
ccs811ResponseData: .byte 5 ccs811ResponseData: .byte 5
ccs811DataEnd: ccs811DataEnd:
@@ -80,9 +80,6 @@ CCS811_Init:
ldi r17, (ccs811DataEnd-ccs811DataBegin) ldi r17, (ccs811DataEnd-ccs811DataBegin)
rcall Utils_FillSram rcall Utils_FillSram
ldi r16, CCS811_INTERVAL
sts ccs811Timer, r16
; check for fw mode, valid app ; check for fw mode, valid app
rcall ccs811ReadStatus rcall ccs811ReadStatus
brcc CCS811_Init_error brcc CCS811_Init_error
@@ -160,66 +157,28 @@ CCS811_Fini:
; - CFLAG: set if okay, clear on error ; - CFLAG: set if okay, clear on error
; USED: ; USED:
CCS811_OnTimer: CCS811_OnEveryMinute:
in r15, SREG in r15, SREG
push r15 push r15
cli cli
lds r16, ccs811Flags lds r16, ccs811Flags
andi r16, CCS811_FLAGS_ACTIVATED andi r16, CCS811_FLAGS_ACTIVATED
breq CCS811_OnTimer_ret 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 lds r16, ccs811Flags
andi r16, ~CCS811_FLAGS_VALIDDATA andi r16, ~CCS811_FLAGS_VALIDDATA
sts ccs811Flags, r16 sts ccs811Flags, r16
rcall ccs811ReadMeasurement rcall ccs811ReadMeasurement
; brcc CCS811_OnTimer_ret brcc CCS811_OnTimer_ret
brcc CCS811_OnTimer_storetimerret
; rcall ccs811SendDebug ; debug
lds r16, ccs811ResponseData+4 lds r16, ccs811ResponseData+4
andi r16, (1<<CCS811_STATUS_DATAREADY_BIT) andi r16, (1<<CCS811_STATUS_DATAREADY_BIT)
; breq CCS811_OnTimer_ret breq CCS811_OnTimer_ret ; jmp if data not ready
breq CCS811_OnTimer_storetimerret ; jmp if data not ready
lds r16, ccs811Flags lds r16, ccs811Flags
ori r16, CCS811_FLAGS_VALIDDATA ori r16, CCS811_FLAGS_VALIDDATA
sts ccs811Flags, r16 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: CCS811_OnTimer_ret:
pop r15 pop r15
out SREG, r15 out SREG, r15
clc
ret ret
@@ -405,54 +364,43 @@ ccs811ReadData_error:
; @end ; @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
CCS811_GetValue:
ccs811SendCo2: lds r17, ccs811Flags
ldi r17, VALUE_ID_CO2 ; value id andi r17, CCS811_FLAGS_VALIDDATA
ldi r22, AQHOME_VALUETYPE_CO2 breq CCS811_GetValue_noData
lds r18, ccs811ResponseData+1 ; value cpi r16, CCS811_VALUE_TVOC
lds r19, ccs811ResponseData breq CCS811_GetValue_retTvoc
rjmp ccs811SendAny cpi r16, CCS811_VALUE_CO2
breq CCS811_GetValue_retCo2
CCS811_GetValue_noData:
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
clc clc
ret ret
ccs811SendAny_send: CCS811_GetValue_retTvoc:
ldi r16, 0xff ; destination address lds r18, ccs811ResponseData+3 ; value
lds r19, ccs811ResponseData+2
ldi r20, 1 ldi r20, 1
clr r21 clr r21
ldi xl, LOW(com2SendBuffer) rjmp CCS811_GetValue_secRet
ldi xh, HIGH(com2SendBuffer) CCS811_GetValue_retCo2:
rcall CPRO_WriteReportValue lds r18, ccs811ResponseData+1 ; value
rjmp COM2_SendPacket lds r19, ccs811ResponseData
ldi r20, 1
clr r21
CCS811_GetValue_secRet:
sec
ret
; @end

View 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