annotate code_part1/OSTC_code_asm_part1/sleepmode.asm @ 739:96d32c0cf206

BUGFIX: Clear end-of-dive countdown properly when descending again
author heinrichsweikamp
date Mon, 08 Jul 2013 19:32:32 +0200
parents b7f7184d800d
children fac7710ab84e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
1 ; OSTC - diving computer code
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
2 ; Copyright (C) 2008 HeinrichsWeikamp GbR
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
3 ; This program is free software: you can redistribute it and/or modify
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
4 ; it under the terms of the GNU General Public License as published by
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
5 ; the Free Software Foundation, either version 3 of the License, or
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
6 ; (at your option) any later version.
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
7 ; This program is distributed in the hope that it will be useful,
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
8 ; but WITHOUT ANY WARRANTY; without even the implied warranty of
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
9 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
10 ; GNU General Public License for more details.
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
11 ; You should have received a copy of the GNU General Public License
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
12 ; along with this program. If not, see <http://www.gnu.org/licenses/>.
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
13 ; Routines for sleepmode
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
14 ; written by: Matthias Heinrichs, info@heinrichsweikamp.com
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
15 ; written: 050520
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
16 ; last updated: 090507
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
17 ; known bugs:
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
18 ; ToDo:
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
19 sleeploop: ; enter sleepmode!
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
20 ; first check if the 16 hash char are=0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
21 lfsr FSR2, char_O_hash
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
22 movlw d'16'
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
23 movwf temp1
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
24 sleeploop1:
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
25 tstfsz POSTINC2 ; Test hash values
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
26 bra sleeploop2 ; At least one char is not zero -> Do not build hash
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
27 decfsz temp1,F
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
28 bra sleeploop1
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
29 ; build hash (about 90sek @ 16MHz)
681
6e456a6398e0 Hardware4 support
heinrichsweikamp
parents: 647
diff changeset
30 call DISP_ClearScreen ; clear
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
31 DISPLAYTEXT .1 ; "Building MD2 hash"
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
32 DISPLAYTEXT .2 ; "Please wait..."
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents: 21
diff changeset
33 call deco_hash ; calculate MD2 hash
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
34 movlb b'00000001' ; Back to Bank1
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
35 sleeploop2:
681
6e456a6398e0 Hardware4 support
heinrichsweikamp
parents: 647
diff changeset
36 call DISP_DisplayOff ; display off
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
37 call disable_rs232 ; disable UART module
626
bab5a9fc1b10 restore last used customview in dive- and surface-mode
heinrichsweikamp
parents: 497
diff changeset
38
bab5a9fc1b10 restore last used customview in dive- and surface-mode
heinrichsweikamp
parents: 497
diff changeset
39 ; Save surface mode custom view
bab5a9fc1b10 restore last used customview in dive- and surface-mode
heinrichsweikamp
parents: 497
diff changeset
40 movff menupos3,EEDATA ; Copy to EEDATA
bab5a9fc1b10 restore last used customview in dive- and surface-mode
heinrichsweikamp
parents: 497
diff changeset
41 write_int_eeprom d'93' ; Write last selected customview surface mode into EEPROM
bab5a9fc1b10 restore last used customview in dive- and surface-mode
heinrichsweikamp
parents: 497
diff changeset
42
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
43 clrf divemins+0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
44 clrf divemins+1
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
45 bcf TRISB,6
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
46 bcf TRISB,7
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
47 bcf PORTB,6
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
48 bcf PORTB,7 ; Disable UART
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
49 sleeploop_loop:
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
50 btfsc oneminupdate ; one minute in sleep?
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
51 rcall onemin_sleep ; do oneminute tasks, e.g. calculate desaturation
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
52
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
53 btfsc onesecupdate ; one second in sleep?
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
54 rcall onesec_sleep ; check switches, check pressure sensor, etc.
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
55
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
56 btfss sleepmode ; wake up? (This bit will be set in other routines)
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
57 goto restart ; yes
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
58 nop
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
59 sleep ; Sleep until Timer1 will wake up the device
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
60 nop
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
61 bra sleeploop_loop ; do loop until someting happens
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
62
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
63
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
64 onemin_sleep:
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
65 call get_battery_voltage ; get battery voltage
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
66 btfsc enter_error_sleep ; Enter Fatal Error Routine?
16
01510acaeb11 1.54 rc2
heinrichsweikamp
parents: 0
diff changeset
67 call fatal_error_sleep ; Yes (In Sleepmode_vxx.asm!)
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
68
354
cec312042b94 Fix sub16 neg detect (related to bug #44)
JeanDo
parents: 341
diff changeset
69 ;---- adjust airpressure compensation any 15 minutes
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
70 incf divemins+1,F ; counts to 14...
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
71 movlw d'14'
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
72 cpfsgt divemins+1
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
73 bra onemin_sleep2 ; 15 minutes not done!
354
cec312042b94 Fix sub16 neg detect (related to bug #44)
JeanDo
parents: 341
diff changeset
74 clrf divemins+1 ; reset counter
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
75
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
76 rcall pressuretest_sleep_fast ; Gets pressure without averaging (faster!)
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
77
357
562f1bc79f3c Bugfix: Wake-up into divemode with 1.91alpha
Heinrichsweikamp
parents: 341
diff changeset
78 SAFE_2BYTE_COPY amb_pressure_avg, amb_pressure ; copy for compatibility
562f1bc79f3c Bugfix: Wake-up into divemode with 1.91alpha
Heinrichsweikamp
parents: 341
diff changeset
79
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
80 call check_temp_extrema ; Check for temperature extremas
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
81
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents: 21
diff changeset
82 call deco_calc_CNS_decrease_15min ; compute CNS decay in sleep only
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
83 movlb b'00000001'
354
cec312042b94 Fix sub16 neg detect (related to bug #44)
JeanDo
parents: 341
diff changeset
84
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
85 movff last_surfpressure_15min+0,last_surfpressure_30min+0 ; save older airpressure
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
86 movff last_surfpressure_15min+1,last_surfpressure_30min+1 ; save older airpressure
341
2144f19fa1eb BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents: 297
diff changeset
87 SAFE_2BYTE_COPY amb_pressure, last_surfpressure_15min ; save new airpressure
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
88
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
89 GETCUSTOM15 d'7' ; loads max_sufpressure into lo, hi
398
ab962c4b19d6 Fixing issue 50, correct "Bar" to "bar" in texts and comments
heinrichsweikamp
parents: 361
diff changeset
90 movff lo,sub_a+0 ; max. "allowed" airpressure in mbar
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
91 movff hi,sub_a+1
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
92 movff last_surfpressure_15min+0,sub_b+0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
93 movff last_surfpressure_15min+1,sub_b+1
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
94 call sub16 ; sub_c = sub_a - sub_b
354
cec312042b94 Fix sub16 neg detect (related to bug #44)
JeanDo
parents: 341
diff changeset
95 btfss neg_flag ; Is 1080mbar < amb_pressure ?
cec312042b94 Fix sub16 neg detect (related to bug #44)
JeanDo
parents: 341
diff changeset
96 bra onemin_sleep2 ; NO: current airpressure is lower then "allowed" airpressure, ok!
cec312042b94 Fix sub16 neg detect (related to bug #44)
JeanDo
parents: 341
diff changeset
97
cec312042b94 Fix sub16 neg detect (related to bug #44)
JeanDo
parents: 341
diff changeset
98 ; not ok! Overwrite with max. "allowed" airpressure
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
99 GETCUSTOM15 d'7' ; loads max_sufpressure into lo, hi
398
ab962c4b19d6 Fixing issue 50, correct "Bar" to "bar" in texts and comments
heinrichsweikamp
parents: 361
diff changeset
100 movff lo,last_surfpressure_15min+0 ; max. "allowed" airpressure in mbar
ab962c4b19d6 Fixing issue 50, correct "Bar" to "bar" in texts and comments
heinrichsweikamp
parents: 361
diff changeset
101 movff hi,last_surfpressure_15min+1 ; max. "allowed" airpressure in mbar
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
102
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
103 onemin_sleep2:
341
2144f19fa1eb BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents: 297
diff changeset
104 SAFE_2BYTE_COPY amb_pressure, int_I_pres_respiration ; LOW copy pressure to deco routine
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
105 GETCUSTOM8 d'11' ; Saturation multiplier %
251
f0cba9cff25c Still hunting for bb13...
JeanDo
parents: 213
diff changeset
106 movff WREG,char_I_saturation_multiplier
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
107 GETCUSTOM8 d'12' ; Desaturation multiplier %
251
f0cba9cff25c Still hunting for bb13...
JeanDo
parents: 213
diff changeset
108 movff WREG,char_I_desaturation_multiplier
116
14a074e1a375 Split C code, and use direct linking.
JeanDo
parents: 21
diff changeset
109 call deco_calc_wo_deco_step_1_min ; "calc_tissue_sleep"
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
110 movlb b'00000001' ; RAM Bank1 selected
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
111
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
112 bcf oneminupdate ; all done
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
113 return
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
114
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
115 onesec_sleep:
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
116 call test_charger ; charger on?
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
117
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
118 btfss nofly_active
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
119 bra onesec_sleep_nonofly
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
120
21
73014f788032 1.60 stable rc1
heinrichsweikamp
parents: 18
diff changeset
121 bsf LED_blue ; Set nofly LED
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
122
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
123 nop
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
124 sleep
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
125 nop
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
126
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
127 onesec_sleep_nonofly:
21
73014f788032 1.60 stable rc1
heinrichsweikamp
parents: 18
diff changeset
128 bcf LED_blue ; Clear nofly LED
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
129 incf divemins+0,F ; counts to #test_pressure_in_sleep (5)
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
130 movlw d'5'
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
131 cpfsgt divemins+0 ; here: temp variable
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
132 bra onesec_sleep1 ; #test_pressure_in_sleep not done yet
354
cec312042b94 Fix sub16 neg detect (related to bug #44)
JeanDo
parents: 341
diff changeset
133 clrf divemins+0
cec312042b94 Fix sub16 neg detect (related to bug #44)
JeanDo
parents: 341
diff changeset
134
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
135 rcall pressuretest_sleep_fast ; Gets pressure without averaging (faster!)
421
af2894e5cda4 copy from amb_pressure_avg to amb_pressure for compatibility
heinrichsweikamp
parents: 398
diff changeset
136 SAFE_2BYTE_COPY amb_pressure_avg, amb_pressure ; copy for compatibility
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
137
361
88660a400338 Updated 64K logbook to changeset 360.
JeanDo
parents: 357 354
diff changeset
138 ; compare current ambient pressure with threshold CF6==1160mbar.
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
139 GETCUSTOM15 d'6' ; loads pressure threshold into lo,hi
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
140 movff lo,sub_a+0 ; power on if ambient pressure is greater threshold
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
141 movff hi,sub_a+1
361
88660a400338 Updated 64K logbook to changeset 360.
JeanDo
parents: 357 354
diff changeset
142 SAFE_2BYTE_COPY amb_pressure_avg, sub_b
88660a400338 Updated 64K logbook to changeset 360.
JeanDo
parents: 357 354
diff changeset
143 call sub16 ; Is (1160mbar - averaged(amb_pressure)) < 0 ?
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
144 bsf sleepmode
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
145 btfsc neg_flag ; Wake up from Sleep?
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
146 bcf sleepmode ; amb_pressure>pressure_offset_divemode: wake up!
354
cec312042b94 Fix sub16 neg detect (related to bug #44)
JeanDo
parents: 341
diff changeset
147
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
148 onesec_sleep1:
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
149 bcf onesecupdate ; all done.
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
150 btfsc switch_left
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
151 bra onesec_sleep1a
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
152 btfsc switch_right
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
153 bra onesec_sleep1a
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
154 ; No button pressed
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
155 bcf INTCON,INT0IF ; Clear flag
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
156 bcf INTCON3,INT1IF ; Clear flag
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
157 bcf switch_right
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
158 bcf switch_left
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
159 bcf T0CON,TMR0ON ; Stop Timer 0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
160 return
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
161 onesec_sleep1a: ; At least one button pressed....
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
162 bcf INTCON,INT0IF ; Clear flag
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
163 bcf INTCON3,INT1IF ; Clear flag
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
164 bcf switch_right
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
165 bcf switch_left
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
166 bcf T0CON,TMR0ON ; Stop Timer 0
354
cec312042b94 Fix sub16 neg detect (related to bug #44)
JeanDo
parents: 341
diff changeset
167 bcf sleepmode ; wake up!
125
2907b42c195b Altimeter:
JeanDo
parents: 116
diff changeset
168
213
d19445e0cb2f BUGFIX Altimeter reset when exiting sleep mode (bug#&6).
JeanDo
parents: 153
diff changeset
169 ; Restart altimeter averaging, so next averaging starts right over...
d19445e0cb2f BUGFIX Altimeter reset when exiting sleep mode (bug#&6).
JeanDo
parents: 153
diff changeset
170 call altimeter_restart
125
2907b42c195b Altimeter:
JeanDo
parents: 116
diff changeset
171
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
172 return
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
173
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
174 pressuretest_sleep_fast: ; Get pressure without averaging (Faster to save some power in sleep mode)
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
175 call get_temperature_start ; and start temperature integration (73,5us)
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
176 sleep
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
177 nop
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
178 sleep
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
179 nop
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
180 sleep ; Wait at least 35ms (every 16.5ms Timer1 wakeup)
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
181 call get_temperature_value ; State 1: Get temperature
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
182 call get_pressure_start ; Start pressure integration.
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
183 sleep
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
184 nop
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
185 sleep
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
186 nop
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
187 sleep ; Wait at least 35ms (every 16.5ms Timer1 wakeup)
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
188 call get_pressure_value ; State2: Get pressure (51us)
703
39e02673db4c some cleanup
heinrichsweikamp
parents: 681
diff changeset
189 clrf temperature_avg+0
39e02673db4c some cleanup
heinrichsweikamp
parents: 681
diff changeset
190 clrf temperature_avg+1
357
562f1bc79f3c Bugfix: Wake-up into divemode with 1.91alpha
Heinrichsweikamp
parents: 341
diff changeset
191 clrf amb_pressure_avg+0
562f1bc79f3c Bugfix: Wake-up into divemode with 1.91alpha
Heinrichsweikamp
parents: 341
diff changeset
192 clrf amb_pressure_avg+1 ; clear for sleep routine
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
193 call calculate_compensation ; calculate temperature compensated pressure (233us)
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
194 return
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
195
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
196 fatal_error_sleep:
713
8c293e76a517 no flicker when powering on
heinrichsweikamp
parents: 703
diff changeset
197 call get_calibration_data ; Get calibration data from pressure sensor
714
b7f7184d800d banksafe sensor init
heinrichsweikamp
parents: 713
diff changeset
198 banksel flag5
713
8c293e76a517 no flicker when powering on
heinrichsweikamp
parents: 703
diff changeset
199 bcf no_sensor_int ; Enable sensor interrupt
16
01510acaeb11 1.54 rc2
heinrichsweikamp
parents: 0
diff changeset
200 WAITMS d'250'
01510acaeb11 1.54 rc2
heinrichsweikamp
parents: 0
diff changeset
201 WAITMS d'250'
01510acaeb11 1.54 rc2
heinrichsweikamp
parents: 0
diff changeset
202 call get_battery_voltage ; get battery voltage
01510acaeb11 1.54 rc2
heinrichsweikamp
parents: 0
diff changeset
203 btfss enter_error_sleep ; REALLY enter Fatal Error Routine?
01510acaeb11 1.54 rc2
heinrichsweikamp
parents: 0
diff changeset
204 return ; No!
713
8c293e76a517 no flicker when powering on
heinrichsweikamp
parents: 703
diff changeset
205 SAFE_2BYTE_COPY amb_pressure, sub_b
8c293e76a517 no flicker when powering on
heinrichsweikamp
parents: 703
diff changeset
206 movlw LOW d'15001' ; must be lower then 15001mbar
8c293e76a517 no flicker when powering on
heinrichsweikamp
parents: 703
diff changeset
207 movwf sub_a+0
8c293e76a517 no flicker when powering on
heinrichsweikamp
parents: 703
diff changeset
208 movlw HIGH d'15001'
8c293e76a517 no flicker when powering on
heinrichsweikamp
parents: 703
diff changeset
209 movwf sub_a+1
8c293e76a517 no flicker when powering on
heinrichsweikamp
parents: 703
diff changeset
210 call subU16 ; sub_c = sub_a - sub_b
8c293e76a517 no flicker when powering on
heinrichsweikamp
parents: 703
diff changeset
211 bcf enter_error_sleep ; Clear flag
8c293e76a517 no flicker when powering on
heinrichsweikamp
parents: 703
diff changeset
212 btfss neg_flag ;
8c293e76a517 no flicker when powering on
heinrichsweikamp
parents: 703
diff changeset
213 return ; No!
8c293e76a517 no flicker when powering on
heinrichsweikamp
parents: 703
diff changeset
214 bsf enter_error_sleep ; Set flag
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
215 clrf INTCON
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
216 clrf INTCON2
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
217 clrf INTCON3
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
218 bcf ADCON0,0 ; AD converter off
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
219 call disable_rs232 ; disable UART module
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
220 movlw b'00010000'
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
221 movwf TRISA
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
222 clrf PORTA ; And pulled to GND
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
223 clrf TRISB ; All output
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
224 clrf PORTB ; And pulled to GND
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
225 movlw b'00011101' ; UART
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
226 movwf TRISC
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
227 clrf PORTC ; And pulled to GND
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
228 clrf TRISD ; All output
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
229 clrf PORTD ; And pulled to GND
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
230 clrf TRISE ; All output
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
231 clrf PORTE ; And pulled to GND
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
232 clrf T0CON ; Timer OFF
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
233 clrf T1CON ; Timer OFF
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
234 clrf T2CON ; Timer OFF
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
235 clrf OSCTUNE
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
236 movlw b'00000010' ; 31kHz
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
237 movwf OSCCON
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
238 bsf WDTCON,0 ; Watchdog timer on...
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
239 fatal_error_sleep_loop: ; Device will never quit this loop!
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
240 movff fatal_error_code,temp4
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
241 movlw d'15'
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
242 movwf temp1
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
243 fatal_error_sleep_loop1:
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
244 sleep
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
245 nop
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
246 decfsz temp1,F
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
247 bra fatal_error_sleep_loop1
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
248 fatal_error_sleep_loop2:
21
73014f788032 1.60 stable rc1
heinrichsweikamp
parents: 18
diff changeset
249 bsf LED_red
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
250 clrwdt
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
251 WAIT10US d'5'
21
73014f788032 1.60 stable rc1
heinrichsweikamp
parents: 18
diff changeset
252 bcf LED_red
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
253 sleep
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
254 nop
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
255 decfsz temp4,F
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
256 bra fatal_error_sleep_loop2
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
257 bra fatal_error_sleep_loop