re-enabled CCS811 module, adapted to latest changes.
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
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