comparison 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
comparison
equal deleted inserted replaced
655:c7b7b8a358cd 656:8af5aefbcdaf
199 199
200 one_sec_sleep_buttons_done: 200 one_sec_sleep_buttons_done:
201 bcf switch_right ; clear right button event 201 bcf switch_right ; clear right button event
202 bcf switch_left ; clear left button event 202 bcf switch_left ; clear left button event
203 203
204 incf sm_timer_10sec,F ; increment 10 seconds timer
205 movlw .10 ; load a 10 into WREG
206 cpfslt sm_timer_10sec ; timer < 10 yet?
207 rcall ten_sec_sleep ; NO - do the every 10 second tasks
208
209 btfsc trigger_full_minute ; one minute in sleep?
210 rcall one_min_sleep ; YES - do the every minute tasks
211
212 btfsc trigger_full_hour ; one hour in sleep?
213 rcall one_hour_sleep ; YES - do the every hour tasks
214
215 return ; done.
216
217
218
219 ;-----------------------------------------------------------------------------
220 ; Helper Function - Tasks every 10 Seconds in Sleep Mode
221 ;
222 ten_sec_sleep:
223 ; tasks every 10 seconds in sleep mode
224 clrf sm_timer_10sec ; clear timer
225
204 btfsc battery_gauge_available ; is a battery gauge IC available? 226 btfsc battery_gauge_available ; is a battery gauge IC available?
205 bra one_sec_sleep_1 ; YES - check for charger 227 bra ten_sec_sleep_1 ; YES - check for charger
206 btfsc ble_available ; Skip "USB" check in all Bluetooth models (Required for very old OSTC sport) 228 btfsc ble_available ; Skip "USB" check in all Bluetooth models (Required for very old OSTC sport)
207 bra one_sec_sleep_2 ; - continue 229 bra ten_sec_sleep_2 ; - continue
208 btfsc vusb_in ; NO - USB plugged in? 230 btfsc vusb_in ; NO - USB plugged in?
209 bcf sleepmode ; YES - terminate sleep mode 231 bcf sleepmode ; YES - terminate sleep mode
210 bra one_sec_sleep_2 ; - continue 232 bra ten_sec_sleep_2 ; - continue
211 233
212 one_sec_sleep_1: 234 ten_sec_sleep_1:
213 call get_battery_voltage ; check for charger 235 call get_battery_voltage ; check for charger
214 236
215 ; Test if charging 237 ; Test if charging
216 btfss cc_active ; charging? 238 btfss cc_active ; charging?
217 bra one_sec_sleep_1a ; NO 239 bra ten_sec_sleep_1a ; NO
218 btfsc charge_in_sleep ; YES - already showing charge screen? 240 btfsc charge_in_sleep ; YES - already showing charge screen?
219 bra one_sec_sleep_1b ; YES - only update data 241 bra ten_sec_sleep_1b ; YES - only update data
220 242
221 bsf charge_in_sleep 243 bsf charge_in_sleep
222 bcf deep_sleep ; wake-up from deepsleep 244 bcf deep_sleep ; wake-up from deepsleep
223 call TFT_boot ; initialize TFT (includes clear screen) 245 call TFT_boot ; initialize TFT (includes clear screen)
224 movlw .32 246 movlw .32
225 movff WREG,max_CCPR1L ; bank safe 247 movff WREG,max_CCPR1L ; bank safe
226 call TFT_Display_FadeIn ; dim up the display 248 call TFT_Display_FadeIn ; dim up the display
227 one_sec_sleep_1b: 249 ten_sec_sleep_1b:
228 call TFT_surfmode_batt ; show battery type, voltage and color-coded percentage 250 call TFT_surfmode_batt ; show battery type, voltage and color-coded percentage
229 bra one_sec_sleep_2 ; continue 251 bra ten_sec_sleep_2 ; continue
230 252
231 one_sec_sleep_1a: 253 ten_sec_sleep_1a:
232 btfss charge_in_sleep ; was showing charge screen? 254 btfss charge_in_sleep ; was showing charge screen?
233 bra one_sec_sleep_2 ; NO 255 bra ten_sec_sleep_2 ; NO
234 256
235 ; yes, power-down screen 257 ; yes, power-down screen
236 call TFT_Display_FadeOut ; power-down backlight 258 call TFT_Display_FadeOut ; power-down backlight
237 call TFT_DisplayOff ; power-down display 259 call TFT_DisplayOff ; power-down display
238 bcf charge_in_sleep 260 bcf charge_in_sleep
239 261
240 262
241 one_sec_sleep_2: 263 ten_sec_sleep_2:
242 incf sm_timer_10sec,F ; increment 10 seconds timer 264
243 movlw .10 ; load a 10 into WREG
244 cpfslt sm_timer_10sec ; timer < 10 yet?
245 rcall ten_sec_sleep ; NO - do the every 10 second tasks
246
247 btfsc trigger_full_minute ; one minute in sleep?
248 rcall one_min_sleep ; YES - do the every minute tasks
249
250 btfsc trigger_full_hour ; one hour in sleep?
251 rcall one_hour_sleep ; YES - do the every hour tasks
252
253 ; sleepmode pressure sampling for new sensor is done here
254 btfss press_sensor_type ; New sensor found?
255 return ; No, done.
256
257 btfsc ms5837_state ; =0: result of temperature is in the ADC
258 goto I2C_get_press_val_MS5837 ; (Will clear ms5837_state) (And return!)
259 goto I2C_get_temp_val_MS5837 ; (Will set ms5837_state) (And return!)
260 ; done.
261
262
263
264 ;-----------------------------------------------------------------------------
265 ; Helper Function - Tasks every 10 Seconds in Sleep Mode
266 ;
267 ten_sec_sleep:
268 ; tasks every 10 seconds in sleep mode
269 clrf sm_timer_10sec ; clear timer
270 rcall pressuretest_sleep_fast ; get pressure without averaging (faster) 265 rcall pressuretest_sleep_fast ; get pressure without averaging (faster)
271 MOVLI wake_up_from_sleep,sub_a ; load wake-up pressure (1160 mbar) into sub_a 266 MOVLI wake_up_from_sleep,sub_a ; load wake-up pressure (1160 mbar) into sub_a
272 MOVII pressure_abs, sub_b ; load current absolute pressure into sub_b 267 MOVII pressure_abs, sub_b ; load current absolute pressure into sub_b
273 call cmpU16 ; sub_a - sub_b = wake-up pressure - current absolute pressure 268 call cmpU16 ; sub_a - sub_b = wake-up pressure - current absolute pressure
274 btfsc neg_flag ; is the current absolute pressure > 1160 mbar ? 269 btfsc neg_flag ; is the current absolute pressure > 1160 mbar ?
401 ;----------------------------------------------------------------------------- 396 ;-----------------------------------------------------------------------------
402 ; Helper Function - read Accelerometer Z-Axis 397 ; Helper Function - read Accelerometer Z-Axis
403 ; 398 ;
404 deepsleep_get_accel: 399 deepsleep_get_accel:
405 call I2C_init_compass ; start compass 400 call I2C_init_compass ; start compass
401 btfss compass_present
402 bcf deep_sleep ; No Compass - terminate deep sleep mode
406 rcall sleepmode_sleep ; sleep for 62.5...125 ms 403 rcall sleepmode_sleep ; sleep for 62.5...125 ms
407 call I2C_RX_accelerometer ; read accelerometer 404 call I2C_RX_accelerometer ; read accelerometer
408 call I2C_RX_accelerometer ; read accelerometer 405 call I2C_RX_accelerometer ; read accelerometer
409 call I2C_sleep_compass ; shut down compass 406 call I2C_sleep_compass ; shut down compass
410 movff accel_DZ+0,WREG ; transfer result to WREG 407 movff accel_DZ+0,WREG ; transfer result to WREG
415 ; Helper Function - read Pressure without Averaging 412 ; Helper Function - read Pressure without Averaging
416 ; 413 ;
417 ; faster method to save some power in sleep mode 414 ; faster method to save some power in sleep mode
418 ; 415 ;
419 pressuretest_sleep_fast: 416 pressuretest_sleep_fast:
417 ; sleepmode pressure sampling for new sensor is done here
418 btfss press_sensor_type ; New sensor found?
419 bra pressuretest_sleep_fast2 ; No
420
421 btfsc ms5837_state ; =0: result of temperature is in the ADC
422 bra pressuretest_sleep_fast1 ; was =1 -> Read pressure from MS5837. ms5837_state will always be zero here from now on
423 call I2C_get_temp_val_MS5837 ; (Will set ms5837_state)
424 rcall sleepmode_sleep ; sleep for 62.5...125 ms
425 rcall sleepmode_sleep ; sleep for 62.5...125 ms
426 pressuretest_sleep_fast1:
427 call I2C_get_press_val_MS5837 ; (Will clear ms5837_state)
428 rcall sleepmode_sleep ; sleep for 62.5...125 ms
429 rcall sleepmode_sleep ; sleep for 62.5...125 ms
430
431 pressuretest_sleep_fast2:
420 banksel isr_backup ; select bank ISR data 432 banksel isr_backup ; select bank ISR data
421 433
422 clrf pressure_abs_avg+0 ; clear pressure average register 434 clrf pressure_abs_avg+0 ; clear pressure average register
423 clrf pressure_abs_avg+1 435 clrf pressure_abs_avg+1
424 clrf pressure_abs_avg+2 436 clrf pressure_abs_avg+2