diff src/sleepmode.asm @ 656:8af5aefbcdaf default tip

Update to 3.31 beta
author heinrichsweikamp
date Thu, 27 Nov 2025 18:32:58 +0100
parents 75e90cd0c2c3
children
line wrap: on
line diff
--- a/src/sleepmode.asm	Mon Apr 29 13:05:18 2024 +0200
+++ b/src/sleepmode.asm	Thu Nov 27 18:32:58 2025 +0100
@@ -201,44 +201,6 @@
     	bcf		switch_right				; clear right button event
 	bcf		switch_left				; clear left  button event
 
-	btfsc	battery_gauge_available			; is a battery gauge IC available?
-	bra		one_sec_sleep_1					; YES - check for charger
-	btfsc	ble_available				; Skip "USB" check in all Bluetooth models (Required for very old OSTC sport)
-	bra		one_sec_sleep_2					;     - continue
-	btfsc	vusb_in							; NO  - USB plugged in?
-	bcf		sleepmode						;       YES - terminate sleep mode
-	bra		one_sec_sleep_2					;     - continue
-
-one_sec_sleep_1:
-	call	get_battery_voltage				; check for charger
-
-	; Test if charging
-	btfss	cc_active						; charging?
-	bra		one_sec_sleep_1a				; NO
-	btfsc	charge_in_sleep					; YES - already showing charge screen?
-	bra		one_sec_sleep_1b				;       YES - only update data
-
-	bsf		charge_in_sleep
-	bcf		deep_sleep						; wake-up from deepsleep
-	call	TFT_boot						; initialize TFT (includes clear screen)
-	movlw	.32
-	movff	WREG,max_CCPR1L					; bank safe
-	call	TFT_Display_FadeIn				; dim up the display
-one_sec_sleep_1b:
-	call	TFT_surfmode_batt				; show battery type, voltage and color-coded percentage
-	bra		one_sec_sleep_2					; continue
-
-one_sec_sleep_1a:
-	btfss	charge_in_sleep					; was showing charge screen?
-	bra		one_sec_sleep_2					; NO
-
-	; yes, power-down screen    
-	call	TFT_Display_FadeOut				; power-down backlight
-	call	TFT_DisplayOff					; power-down display
-	bcf		charge_in_sleep
-
-
-one_sec_sleep_2:
 	incf	sm_timer_10sec,F				; increment 10 seconds timer
 	movlw	.10								; load  a 10 into WREG
 	cpfslt	sm_timer_10sec					; timer < 10 yet?
@@ -250,14 +212,7 @@
 	btfsc	trigger_full_hour				; one hour in sleep?
 	rcall	one_hour_sleep					; YES - do the every hour tasks
 
-	; sleepmode pressure sampling for new sensor is done here
-	btfss	press_sensor_type				; New sensor found?
-	return							; No, done.
-
-	btfsc	ms5837_state					; =0: result of temperature is in the ADC
-	goto	I2C_get_press_val_MS5837			; (Will clear ms5837_state) (And return!)
-	goto	I2C_get_temp_val_MS5837				; (Will set ms5837_state) (And return!)
-	; done.
+	return	; done.
 
 
 	
@@ -267,6 +222,46 @@
 ten_sec_sleep:
 	; tasks every 10 seconds in sleep mode
 	clrf	sm_timer_10sec					; clear timer
+
+	btfsc	battery_gauge_available			; is a battery gauge IC available?
+	bra		ten_sec_sleep_1					; YES - check for charger
+	btfsc	ble_available				; Skip "USB" check in all Bluetooth models (Required for very old OSTC sport)
+	bra		ten_sec_sleep_2					;     - continue
+	btfsc	vusb_in							; NO  - USB plugged in?
+	bcf		sleepmode						;       YES - terminate sleep mode
+	bra		ten_sec_sleep_2					;     - continue
+
+ten_sec_sleep_1:
+	call	get_battery_voltage				; check for charger
+
+	; Test if charging
+	btfss	cc_active						; charging?
+	bra		ten_sec_sleep_1a				; NO
+	btfsc	charge_in_sleep					; YES - already showing charge screen?
+	bra		ten_sec_sleep_1b				;       YES - only update data
+
+	bsf		charge_in_sleep
+	bcf		deep_sleep						; wake-up from deepsleep
+	call	TFT_boot						; initialize TFT (includes clear screen)
+	movlw	.32
+	movff	WREG,max_CCPR1L					; bank safe
+	call	TFT_Display_FadeIn				; dim up the display
+ten_sec_sleep_1b:
+	call	TFT_surfmode_batt				; show battery type, voltage and color-coded percentage
+	bra		ten_sec_sleep_2					; continue
+
+ten_sec_sleep_1a:
+	btfss	charge_in_sleep					; was showing charge screen?
+	bra		ten_sec_sleep_2					; NO
+
+	; yes, power-down screen    
+	call	TFT_Display_FadeOut				; power-down backlight
+	call	TFT_DisplayOff					; power-down display
+	bcf		charge_in_sleep
+
+
+ten_sec_sleep_2:
+
 	rcall	pressuretest_sleep_fast			; get pressure without averaging (faster)
 	MOVLI	wake_up_from_sleep,sub_a		; load wake-up pressure (1160 mbar) into sub_a
 	MOVII	pressure_abs,      sub_b		; load current absolute pressure    into sub_b
@@ -403,6 +398,8 @@
 ;
 deepsleep_get_accel:
 	call	I2C_init_compass				; start compass
+	btfss	compass_present
+	bcf	deep_sleep				; No Compass - terminate deep sleep mode
 	rcall	sleepmode_sleep					; sleep for 62.5...125 ms
 	call	I2C_RX_accelerometer			; read accelerometer
 	call	I2C_RX_accelerometer			; read accelerometer
@@ -417,6 +414,21 @@
 ; faster method to save some power in sleep mode
 ;
 pressuretest_sleep_fast:
+    	; sleepmode pressure sampling for new sensor is done here
+	btfss	press_sensor_type				; New sensor found?
+	bra	pressuretest_sleep_fast2			; No
+
+	btfsc	ms5837_state					; =0: result of temperature is in the ADC
+	bra	pressuretest_sleep_fast1			; was =1 -> Read pressure from MS5837. ms5837_state will always be zero here from now on
+	call	I2C_get_temp_val_MS5837				; (Will set ms5837_state)
+	rcall	sleepmode_sleep					; sleep for 62.5...125 ms
+	rcall	sleepmode_sleep					; sleep for 62.5...125 ms
+pressuretest_sleep_fast1:	
+	call	I2C_get_press_val_MS5837			; (Will clear ms5837_state)
+	rcall	sleepmode_sleep					; sleep for 62.5...125 ms
+	rcall	sleepmode_sleep					; sleep for 62.5...125 ms
+
+pressuretest_sleep_fast2:
 	banksel	isr_backup						; select bank ISR data
 
 	clrf	pressure_abs_avg+0				; clear pressure    average register