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
|
; email : martin@libchipcard.de
|
||||||
;
|
;
|
||||||
; ***************************************************************************
|
; ***************************************************************************
|
||||||
@@ -12,6 +12,8 @@
|
|||||||
; ***************************************************************************
|
; ***************************************************************************
|
||||||
; defines
|
; defines
|
||||||
|
|
||||||
|
.equ SI7021_FLAGS_PRESENT_BIT = 7
|
||||||
|
|
||||||
.equ SI7021_FLAGS_PRESENT = 0x80
|
.equ SI7021_FLAGS_PRESENT = 0x80
|
||||||
.equ SI7021_FLAGS_TEMP_VALID = 0x40
|
.equ SI7021_FLAGS_TEMP_VALID = 0x40
|
||||||
.equ SI7021_FLAGS_HUM_VALID = 0x20
|
.equ SI7021_FLAGS_HUM_VALID = 0x20
|
||||||
@@ -19,6 +21,10 @@
|
|||||||
.equ SI7021_FLAGS_ERROR_MASK = 0x07
|
.equ SI7021_FLAGS_ERROR_MASK = 0x07
|
||||||
|
|
||||||
|
|
||||||
|
.equ SI7021_VALUE_TEMP = 0x01
|
||||||
|
.equ SI7021_VALUE_HUMIDITY = 0x02
|
||||||
|
|
||||||
|
|
||||||
; ***************************************************************************
|
; ***************************************************************************
|
||||||
; data
|
; data
|
||||||
|
|
||||||
@@ -105,6 +111,8 @@ SI7021_OnTimer:
|
|||||||
push r15
|
push r15
|
||||||
cli
|
cli
|
||||||
lds r17, si7021Flags
|
lds r17, si7021Flags
|
||||||
|
sbrs r17, SI7021_FLAGS_PRESENT_BIT ; investigate PRESENT BIT
|
||||||
|
rjmp SI7021_OnTimer_error ; jmp if PRESENT bit clear
|
||||||
mov r16, r17
|
mov r16, r17
|
||||||
andi r16, SI7021_FLAGS_LASTWASTEMP
|
andi r16, SI7021_FLAGS_LASTWASTEMP
|
||||||
brne SI7021_OnTimer_hum
|
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:
|
SI7021_SendTemp:
|
||||||
lds r16, si7021Flags
|
lds r16, si7021Flags
|
||||||
|
|||||||
Reference in New Issue
Block a user