si7021: honour PRESENT flag, added GetValue
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,6 +12,8 @@
|
||||
; ***************************************************************************
|
||||
; defines
|
||||
|
||||
.equ SI7021_FLAGS_PRESENT_BIT = 7
|
||||
|
||||
.equ SI7021_FLAGS_PRESENT = 0x80
|
||||
.equ SI7021_FLAGS_TEMP_VALID = 0x40
|
||||
.equ SI7021_FLAGS_HUM_VALID = 0x20
|
||||
@@ -19,6 +21,10 @@
|
||||
.equ SI7021_FLAGS_ERROR_MASK = 0x07
|
||||
|
||||
|
||||
.equ SI7021_VALUE_TEMP = 0x01
|
||||
.equ SI7021_VALUE_HUMIDITY = 0x02
|
||||
|
||||
|
||||
; ***************************************************************************
|
||||
; data
|
||||
|
||||
@@ -105,6 +111,8 @@ SI7021_OnTimer:
|
||||
push r15
|
||||
cli
|
||||
lds r17, si7021Flags
|
||||
sbrs r17, SI7021_FLAGS_PRESENT_BIT ; investigate PRESENT BIT
|
||||
rjmp SI7021_OnTimer_error ; jmp if PRESENT bit clear
|
||||
mov r16, r17
|
||||
andi r16, SI7021_FLAGS_LASTWASTEMP
|
||||
brne SI7021_OnTimer_hum
|
||||
@@ -444,6 +452,46 @@ si7021Muls16x16_32_done:
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine SI7021_GetValue @global
|
||||
;
|
||||
; @param R16 value to get (SI7021_VALUE_TEMP, SI7021_VALUE_HUMIDITY)
|
||||
; @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 R16
|
||||
|
||||
SI7021_GetValue:
|
||||
cpi r16, SI7021_VALUE_TEMP
|
||||
breq SI7021_GetValue_temp
|
||||
cpi r16, SI7021_VALUE_HUMIDITY
|
||||
breq SI7021_GetValue_hum
|
||||
SI7021_GetValue_clcRet:
|
||||
clc
|
||||
ret
|
||||
SI7021_GetValue_temp:
|
||||
lds r16, si7021Flags
|
||||
andi r16, SI7021_FLAGS_TEMP_VALID
|
||||
breq SI7021_GetValue_clcRet
|
||||
lds r18, si7021LastTemp ; value
|
||||
lds r19, si7021LastTemp+1
|
||||
ldi r20, 100 ; denominator
|
||||
rjmp SI7021_GetValue_finishValue
|
||||
SI7021_GetValue_hum:
|
||||
lds r16, si7021Flags
|
||||
andi r16, SI7021_FLAGS_HUM_VALID
|
||||
breq SI7021_GetValue_clcRet
|
||||
lds r18, si7021LastHumidity ; value
|
||||
lds r19, si7021LastHumidity+1
|
||||
ldi r20, 1 ; denominator
|
||||
SI7021_GetValue_finishValue:
|
||||
clr r21
|
||||
sec
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
|
||||
SI7021_SendTemp:
|
||||
lds r16, si7021Flags
|
||||
|
||||
Reference in New Issue
Block a user