Mercurial > public > mk2
annotate code_part1/OSTC_code_asm_part1/surfmode.asm @ 842:454ef5c2e6aa default tip
Bugfix: Auto-SP did not show >9m for some 2C hardware versions in German language firmware
Make year settings until 2040 possible (This is likely the final release for this model)
| author | heinrichsweikamp |
|---|---|
| date | Sat, 29 Nov 2025 14:11:07 +0100 |
| parents | ab68f28514e0 |
| children |
| rev | line source |
|---|---|
| 815 | 1 ; OSTC Mk.2, 2N and 2C - diving computer code |
|
807
c50296c3059e
BUGFIX: Divetime had unwanted "." behind the minutes
heinrichsweikamp
parents:
789
diff
changeset
|
2 ; Copyright (C) 2015 HeinrichsWeikamp GbR |
| 0 | 3 |
| 4 ; This program is free software: you can redistribute it and/or modify | |
| 5 ; it under the terms of the GNU General Public License as published by | |
| 6 ; the Free Software Foundation, either version 3 of the License, or | |
| 7 ; (at your option) any later version. | |
| 8 | |
| 9 ; This program is distributed in the hope that it will be useful, | |
| 10 ; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 11 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 12 ; GNU General Public License for more details. | |
| 13 | |
| 14 ; You should have received a copy of the GNU General Public License | |
| 15 ; along with this program. If not, see <http://www.gnu.org/licenses/>. | |
| 16 | |
| 17 | |
| 18 ; routines for Surface mode | |
| 19 ; written by: Matthias Heinrichs, info@heinrichsweikamp.com | |
| 20 ; written: 10/01/05 | |
| 21 ; last updated: 080905 | |
| 22 ; known bugs: | |
| 23 ; ToDo: | |
| 24 | |
| 25 surfloop: | |
| 26 ; Boot tasks for all modes | |
| 720 | 27 call DISPLAY_boot |
| 28 surfloop_no_display_init: | |
| 29 call DISP_ClearScreen | |
|
482
8e1fb9cdd62a
lock sensor for surfacemode until value is stable
heinrichsweikamp
parents:
474
diff
changeset
|
30 bcf s_unlock_after_sleep ; Lock sensor results |
|
8e1fb9cdd62a
lock sensor for surfacemode until value is stable
heinrichsweikamp
parents:
474
diff
changeset
|
31 call restart_set_modes_and_flags ; Sets decomode flags |
| 0 | 32 clrf lo |
| 33 movff lo,char_I_const_ppO2 ; reset to standard mode, OSTC assumes Air breathing at the surface! | |
| 720 | 34 call I2CReset |
| 681 | 35 call DISP_brightness_full ; max. brightness |
| 36 call DISP_serial ; Show OSTC serial and firmware version | |
| 37 call DISP_clock ; display time | |
| 0 | 38 call update_date ; display date |
| 495 | 39 call get_battery_voltage ; get battery voltage |
| 0 | 40 movff last_surfpressure_30min+0,int_I_pres_respiration+0 ; copy surface air pressure to deco routine |
| 41 movff last_surfpressure_30min+1,int_I_pres_respiration+1 ; 30min old values | |
| 42 movff last_surfpressure_30min+0,int_I_pres_surface+0 ; copy surface air pressure to deco routine | |
| 43 movff last_surfpressure_30min+1,int_I_pres_surface+1 ; 30min old values | |
| 44 | |
|
626
bab5a9fc1b10
restore last used customview in dive- and surface-mode
heinrichsweikamp
parents:
607
diff
changeset
|
45 ; Reload last customview |
|
bab5a9fc1b10
restore last used customview in dive- and surface-mode
heinrichsweikamp
parents:
607
diff
changeset
|
46 read_int_eeprom d'93' ; Read last selected customview surface mode into EEDATA |
|
bab5a9fc1b10
restore last used customview in dive- and surface-mode
heinrichsweikamp
parents:
607
diff
changeset
|
47 movff EEDATA,menupos3 ; Copy to menupos3 |
|
bab5a9fc1b10
restore last used customview in dive- and surface-mode
heinrichsweikamp
parents:
607
diff
changeset
|
48 call surfcustomview_toggle2 ; Show customview |
| 156 | 49 |
| 0 | 50 btfsc gauge_mode ; Ignore in gauge mode |
| 51 bra surfloop1 | |
| 52 btfsc FLAG_apnoe_mode ; Ignore in Apnoe mode | |
| 53 bra surfloop1 | |
| 54 | |
| 55 ; Startup tasks for decompression modes | |
| 681 | 56 call DISP_display_cns_surface ; Update surface CNS display (If allowed by CF15) |
| 57 call DISP_desaturation_time ; display desaturation time | |
| 58 call DISP_nofly_time ; display nofly time | |
| 13 | 59 |
| 681 | 60 call DISP_active_gas_surfmode ; Show start gas |
| 0 | 61 |
| 62 surfloop1: | |
| 63 btfss gauge_mode ; Display only in gauge mode | |
| 64 bra surfloop2 | |
| 65 DISPLAYTEXT d'103' ; Gauge mode | |
| 66 surfloop2: | |
| 67 btfss FLAG_apnoe_mode ; Display only in Apnoe mode | |
| 68 bra surfloop3 | |
| 69 DISPLAYTEXT d'116' ; Apnoe mode | |
| 70 | |
| 71 surfloop3: | |
| 72 ; Startup tasks for all modes | |
| 73 clrf timeout_counter2 | |
| 74 clrf timeout_counter3 | |
|
839
ab68f28514e0
undo faulty 6 seconds velocity from rev. 834
heinrichsweikamp
parents:
834
diff
changeset
|
75 bcf premenu ; clear premenu flag |
|
ab68f28514e0
undo faulty 6 seconds velocity from rev. 834
heinrichsweikamp
parents:
834
diff
changeset
|
76 bcf menubit ; clear menu flag |
| 474 | 77 clrf timer1int_counter2 ; reset state counter |
|
839
ab68f28514e0
undo faulty 6 seconds velocity from rev. 834
heinrichsweikamp
parents:
834
diff
changeset
|
78 bcf pressure_refresh ; Start new sensor run |
| 0 | 79 clrf last_pressure+0 |
| 80 clrf last_pressure+1 | |
| 81 clrf last_temperature+0 | |
| 82 clrf last_temperature+1 | |
| 83 | |
| 84 movlw d'5' | |
| 85 movwf timeout_counter ; reload counter | |
| 86 | |
| 21 | 87 bcf LED_blue |
| 88 bcf LED_red | |
| 0 | 89 bcf simulatormode_active ; Quit simulator mode (if active) |
| 90 bcf standalone_simulator ; Quit simulator mode (if active) | |
| 91 WIN_TOP .0 | |
| 92 WIN_LEFT .0 | |
| 93 WIN_FONT FT_SMALL | |
| 94 WIN_INVERT .0 ; Init new Wordprocessor | |
| 681 | 95 call DISP_standard_color |
| 3 | 96 |
| 0 | 97 bcf switch_left |
| 98 bcf switch_right | |
| 681 | 99 call DISP_active_gas_surfmode ; Show start gas / SetPoint |
| 100 call DISP_custom_text ; Displays custom text | |
| 100 | 101 clrf cf_checker_counter ; next cf to check |
| 0 | 102 ostc_debug 'G' ; Sends debug-information to screen if debugmode active |
| 233 | 103 |
| 104 ; Desaturation time needs: | |
| 105 ; int_I_pres_surface | |
| 106 ; char_I_desaturation_multiplier | |
| 469 | 107 movlw d'0' |
| 108 movff WREG,char_I_deco_model ; ZH-L16 | |
| 0 | 109 GETCUSTOM8 d'12' ; Desaturation multiplier % |
| 233 | 110 movff WREG,char_I_desaturation_multiplier |
| 111 | |
| 116 | 112 call deco_calc_desaturation_time ; calculate desaturation time |
| 0 | 113 movlb b'00000001' ; select ram bank 1 |
| 114 ostc_debug 'H' ; Sends debug-information to screen if debugmode active | |
| 115 | |
| 116 call wait_switches ; Waits until switches are released, resets flag if button stays pressed! | |
| 117 | |
| 118 surfloop_loop: | |
| 119 btfss onesecupdate ; do every second tasks? | |
| 120 bra surfloop_loop2 ; no, loop | |
| 121 | |
| 122 btfss FLAG_const_ppO2_mode ; are we in const. ppO2 mode? | |
| 123 bra surfloop_loop1 ; No | |
| 124 ; One Second tasks for ppO2 modes | |
| 125 | |
| 285 | 126 bra surfloop_loop1 ; |
| 0 | 127 |
| 128 surfloop_loop1: | |
| 129 ; One Second tasks for all modes | |
| 681 | 130 call DISP_clock ; update clock |
| 0 | 131 call test_charger ; check if charger IC is active |
| 132 call timeout_surfmode ; check timeout | |
| 519 | 133 call update_batt_voltage ; display battery voltage |
| 0 | 134 call timeout_premenu ; timeout premenu |
| 135 call set_leds_surfmode ; Sets Warning and No-Fly LEDs | |
| 94 | 136 call check_customfunctions ; Checks CF functions and displays warning symbol if something critical is wrong |
| 107 | 137 call surfcustomview_second ; Do every-second tasks for the custom view area |
| 519 | 138 |
| 139 ; Every 2 seconds, overwrite with GF value (if needed to display) | |
| 140 btfsc secs,1 ; Alternating every 2sec (if needed) | |
| 681 | 141 call DISP_display_cns_surface ; Display CNS (if > CF15). |
| 519 | 142 btfss secs,1 |
| 681 | 143 call DISP_display_gf_surface ; Display GF (if > CF8). |
| 519 | 144 |
| 145 btfsc enter_error_sleep ; Enter Fatal Error Routine? | |
|
813
c87b9f2fb2f6
wakeup from deep sleep mode automatically upon USB connect
heinrichsweikamp
parents:
807
diff
changeset
|
146 goto fatal_error_sleep ; Yes (In Sleepmode.asm!) |
| 519 | 147 bcf onesecupdate ; every second tasks done |
| 0 | 148 |
| 149 surfloop_loop2: | |
| 150 ; Tasks approx. every 50ms for all modes | |
| 151 call test_switches_surfmode ; check switches | |
| 152 | |
| 153 ; Sensor tasks for all modes | |
|
482
8e1fb9cdd62a
lock sensor for surfacemode until value is stable
heinrichsweikamp
parents:
474
diff
changeset
|
154 btfss pressure_refresh ; new pressure available? |
|
8e1fb9cdd62a
lock sensor for surfacemode until value is stable
heinrichsweikamp
parents:
474
diff
changeset
|
155 bra surfloop_loop2a ; no |
|
8e1fb9cdd62a
lock sensor for surfacemode until value is stable
heinrichsweikamp
parents:
474
diff
changeset
|
156 |
|
8e1fb9cdd62a
lock sensor for surfacemode until value is stable
heinrichsweikamp
parents:
474
diff
changeset
|
157 btfss s_unlock_after_sleep ; sensor results locked? |
|
8e1fb9cdd62a
lock sensor for surfacemode until value is stable
heinrichsweikamp
parents:
474
diff
changeset
|
158 bra surfloop_loop3 ; Yes, ignore |
|
8e1fb9cdd62a
lock sensor for surfacemode until value is stable
heinrichsweikamp
parents:
474
diff
changeset
|
159 |
|
8e1fb9cdd62a
lock sensor for surfacemode until value is stable
heinrichsweikamp
parents:
474
diff
changeset
|
160 ; New sensor value available |
| 0 | 161 call update_surf_press ; display surface pressure |
| 681 | 162 call DISP_temp_surfmode ; Displays temperature |
| 0 | 163 call set_dive_modes ; tests if depth>threshold |
| 125 | 164 call altimeter_calc |
| 165 movf menupos3,W ; Get customview status. | |
| 166 bnz surfloop_loop3 ; Already used ? | |
| 167 call altimeter_display | |
|
482
8e1fb9cdd62a
lock sensor for surfacemode until value is stable
heinrichsweikamp
parents:
474
diff
changeset
|
168 call get_battery_voltage ; get battery voltage |
|
8e1fb9cdd62a
lock sensor for surfacemode until value is stable
heinrichsweikamp
parents:
474
diff
changeset
|
169 |
| 125 | 170 surfloop_loop3: |
|
482
8e1fb9cdd62a
lock sensor for surfacemode until value is stable
heinrichsweikamp
parents:
474
diff
changeset
|
171 bsf s_unlock_after_sleep ; unlock sensor results |
| 0 | 172 bcf pressure_refresh ; until new pressure is available |
| 173 | |
|
482
8e1fb9cdd62a
lock sensor for surfacemode until value is stable
heinrichsweikamp
parents:
474
diff
changeset
|
174 surfloop_loop2a: |
| 0 | 175 ; One minute tasks for all modes |
| 176 btfsc oneminupdate ; do every minute tasks | |
| 177 call update_surfloop60 ; yes, e.g. update time and date | |
| 178 | |
| 179 ; Mode tasks | |
| 180 btfsc menubit ; Menu? | |
| 181 goto menu ; Menu! | |
| 182 btfsc divemode ; Divemode active? | |
| 183 goto diveloop ; Yes, switch into Divemode! | |
| 184 btfsc sleepmode ; Sleepmode active? | |
| 185 goto sleeploop ; Yes, switch into sleepmode! | |
| 107 | 186 |
| 187 btfsc toggle_customview ; Next view? | |
| 188 call surfcustomview_toggle ; Yes, show next customview (and delete this flag) | |
| 189 | |
| 0 | 190 ; Check for the different UART flags |
| 191 btfsc dump_external_eeprom ; Start interface (dumps EEPROM BANK 0 + additional data)? | |
| 192 goto menu_interface ; Yes! | |
| 193 btfsc uart_settime ; Sync clock with PC? | |
| 194 goto sync_clock ; Yes! | |
| 195 btfsc internal_eeprom_write ; Access internal EEPROM BANK 0 via UART module | |
| 196 goto internal_eeprom_access_b0 ; Yes! | |
| 197 btfsc internal_eeprom_write2 ; Access internal EEPROM BANK 1 via UART module | |
| 198 goto internal_eeprom_access_b1 ; Yes! | |
| 578 | 199 btfsc internal_eeprom_write3 ; Access internal EEPROM BANK 2 via UART module |
| 200 goto internal_eeprom_access_b2 ; Yes! | |
| 0 | 201 btfsc uart_send_hash ; Send MD2 hash values |
| 202 goto send_md2_hash ; Yes! | |
| 203 btfsc uart_send_int_eeprom ; Send internal EEPROM BANK 0 | |
| 204 goto send_int_eeprom_b0 ; Yes! | |
| 205 btfsc uart_reset_decodata ; Reset Deco Data? | |
| 206 goto reset_decodata ; Yes! | |
| 207 btfsc uart_send_int_eeprom2 ; Send internal EEPROM BANK 1 | |
| 208 goto send_int_eeprom_b1 ; Yes! | |
| 578 | 209 btfsc uart_send_int_eeprom3 ; Send internal EEPROM BANK 2 |
| 210 goto send_int_eeprom_b2 ; Yes! | |
|
283
4ec488f046f4
Battery sign color coded, work on new uart-started 115200Baud bootloader (Do NOT use yet!)
heinrichsweikamp
parents:
257
diff
changeset
|
211 btfsc uart_store_tissue_data ; Store tissue data? |
| 0 | 212 goto uart_store_tissues ; Yes! |
|
283
4ec488f046f4
Battery sign color coded, work on new uart-started 115200Baud bootloader (Do NOT use yet!)
heinrichsweikamp
parents:
257
diff
changeset
|
213 btfsc uart_115200_bootloader ; Look for 115200Baud bootloader? |
|
4ec488f046f4
Battery sign color coded, work on new uart-started 115200Baud bootloader (Do NOT use yet!)
heinrichsweikamp
parents:
257
diff
changeset
|
214 goto uart_115k_bootloader ; Yes! |
|
297
ceedf078b2d8
Gas Setup page 2 reworked, Texts 107, 108, 109,150, 149, 168, 42, 43, 53,54,55, 165 need update in french, spanish and german
Heinrichsweikamp
parents:
285
diff
changeset
|
215 btfsc uart_reset_battery_stats ; Reset Battery stats? |
|
ceedf078b2d8
Gas Setup page 2 reworked, Texts 107, 108, 109,150, 149, 168, 42, 43, 53,54,55, 165 need update in french, spanish and german
Heinrichsweikamp
parents:
285
diff
changeset
|
216 goto reset_battery_stats ; Yes! |
| 0 | 217 |
| 330 | 218 btfsc uart_dump_screen ; Dumps screen contains ? |
| 331 | 219 call dump_screen ; Yes! |
| 0 | 220 |
| 221 bra surfloop_loop ; loop surfacemode | |
| 222 | |
| 223 | |
| 224 update_surfloop60: | |
| 225 ; One minute tasks for all modes | |
| 681 | 226 ; call DISP_active_gas_surfmode ; Show start gas / SetPoint |
| 0 | 227 call update_date ; and date in divemode |
| 228 call calc_deko_surfmode ; calculate desaturation every minute | |
| 229 call check_temp_extrema ; check for new temperature extremas | |
| 681 | 230 call DISP_custom_text ; Displays custom text |
| 107 | 231 call surfcustomview_minute ; Do every-minute tasks for the custom view area |
| 0 | 232 |
| 233 btfsc gauge_mode ; Ignore in gauge mode | |
| 234 bra update_surfloop60_2 | |
| 235 btfsc FLAG_apnoe_mode ; Ignore in Apnoe mode | |
| 236 bra update_surfloop60_2 | |
| 237 | |
| 238 ; One Minute tasks for deco modes | |
| 681 | 239 call DISP_nofly_time ; display nofly time |
| 240 call DISP_desaturation_time ; display desaturation time | |
| 13 | 241 btfsc premenu ; Not when "Menu?" is displayed! |
| 242 bra update_surfloop60_2 | |
| 243 | |
| 0 | 244 update_surfloop60_2: |
| 245 bcf oneminupdate | |
| 246 return | |
| 247 | |
| 248 set_leds_surfmode: | |
| 249 btfsc nofly_active | |
| 21 | 250 btg LED_blue |
| 0 | 251 return |
| 252 | |
|
353
b5b030c1ae7e
Avoid spurious switch-depth stops with 3 or more gas.
JeanDo
parents:
344
diff
changeset
|
253 ;============================================================================= |
|
b5b030c1ae7e
Avoid spurious switch-depth stops with 3 or more gas.
JeanDo
parents:
344
diff
changeset
|
254 |
| 0 | 255 calc_deko_surfmode: |
| 256 ostc_debug 'I' ; Sends debug-information to screen if debugmode active | |
| 257 | |
| 258 movff last_surfpressure+0,int_I_pres_surface+0 ; copy surface air pressure to deco routine | |
| 259 movff last_surfpressure+1,int_I_pres_surface+1 | |
|
453
38b38b105782
compute desat based on 30min old surface pressure
heinrichsweikamp
parents:
416
diff
changeset
|
260 calc_deko_surfmode2: |
|
353
b5b030c1ae7e
Avoid spurious switch-depth stops with 3 or more gas.
JeanDo
parents:
344
diff
changeset
|
261 clrf WREG ; Use as buffer |
|
b5b030c1ae7e
Avoid spurious switch-depth stops with 3 or more gas.
JeanDo
parents:
344
diff
changeset
|
262 movff WREG,char_I_He_ratio ; No He at the Surface |
|
b5b030c1ae7e
Avoid spurious switch-depth stops with 3 or more gas.
JeanDo
parents:
344
diff
changeset
|
263 movlw d'79' ; 79% N2 |
|
b5b030c1ae7e
Avoid spurious switch-depth stops with 3 or more gas.
JeanDo
parents:
344
diff
changeset
|
264 movff WREG,char_I_N2_ratio ; Air at the Surface |
| 0 | 265 |
|
341
2144f19fa1eb
BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents:
297
diff
changeset
|
266 SAFE_2BYTE_COPY amb_pressure,int_I_pres_respiration ; copy surface air pressure to deco routine |
| 0 | 267 GETCUSTOM8 d'11' ; Saturation multiplier % |
| 236 | 268 movff WREG,char_I_saturation_multiplier |
| 0 | 269 GETCUSTOM8 d'12' ; Desaturation multiplier % |
| 236 | 270 movff WREG,char_I_desaturation_multiplier |
| 0 | 271 |
| 116 | 272 call deco_calc_wo_deco_step_1_min ; calculate deco in surface mode |
| 0 | 273 movlb b'00000001' ; select ram bank 1 |
| 521 | 274 |
| 0 | 275 ostc_debug 'J' ; Sends debug-information to screen if debugmode active |
| 276 return | |
| 277 | |
|
353
b5b030c1ae7e
Avoid spurious switch-depth stops with 3 or more gas.
JeanDo
parents:
344
diff
changeset
|
278 ;============================================================================= |
| 0 | 279 |
| 280 test_charger: | |
| 281 bcf TRISC,1 ; CHRG_OUT output | |
| 282 bsf CHRG_OUT | |
| 283 | |
| 284 bcf cc_active ; Constant Current mode active? | |
| 285 btfss CHRG_IN ; If CHRG_IN=0 -> CC active | |
| 286 bsf cc_active ; Constant Current mode Active! | |
| 287 | |
| 288 bcf CHRG_OUT | |
| 289 bsf TRISC,1 ; CHRG_OUT high impedance | |
| 290 | |
| 291 WAIT10US d'10' | |
| 292 | |
| 293 bcf cv_active ; Constant Voltage mode Active? | |
| 294 btfss CHRG_IN ; If CHRG_IN=0 -> CV active | |
| 295 bsf cv_active ; Constant Voltage mode active! | |
| 296 | |
| 297 bcf TRISC,1 ; CHRG_OUT output | |
| 298 bcf CHRG_OUT | |
| 299 | |
| 300 btfsc cc_active | |
| 301 bra show_cc_active | |
| 302 btfsc cv_active | |
| 303 bra show_cv_active | |
| 304 | |
| 305 bsf TRISC,1 ; CHRG_OUT high impedance | |
| 306 | |
|
416
3abf9d7dafae
diabling uart module when no USB is attached
heinrichsweikamp
parents:
397
diff
changeset
|
307 ; -> Charger inactive or ready |
|
3abf9d7dafae
diabling uart module when no USB is attached
heinrichsweikamp
parents:
397
diff
changeset
|
308 |
|
3abf9d7dafae
diabling uart module when no USB is attached
heinrichsweikamp
parents:
397
diff
changeset
|
309 ; Disable when no USB power is attached |
|
3abf9d7dafae
diabling uart module when no USB is attached
heinrichsweikamp
parents:
397
diff
changeset
|
310 btfsc RCSTA,7 ; RS232 already disabled |
|
3abf9d7dafae
diabling uart module when no USB is attached
heinrichsweikamp
parents:
397
diff
changeset
|
311 call disable_rs232 ; No, disable UART module |
|
3abf9d7dafae
diabling uart module when no USB is attached
heinrichsweikamp
parents:
397
diff
changeset
|
312 |
| 703 | 313 clrf EEADRH |
| 0 | 314 btfss charge_done ; charge done? |
| 315 bra test_charger2 ; No, add incomplete cycle! | |
| 316 | |
| 317 ; Yes, store all data for complete cycle | |
| 789 | 318 |
| 319 clrf on_time_seconds+0 | |
| 320 clrf on_time_seconds+1 | |
| 321 clrf on_time_seconds+2 ; Clear on-time counter | |
| 322 | |
| 0 | 323 bcf charge_started ; Clear flag |
| 324 bcf charge_done ; Clear flag | |
|
583
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
325 ; Store incomplete cycles |
| 0 | 326 read_int_eeprom d'50' ; Read byte (stored in EEDATA) |
| 327 movff EEDATA,temp1 ; Low byte | |
| 328 read_int_eeprom d'51' ; Read byte (stored in EEDATA) | |
| 329 movff EEDATA,temp2 ; high byte | |
| 330 bcf STATUS,C | |
| 331 movlw d'1' | |
| 332 addwf temp1 | |
| 333 movlw d'0' | |
| 334 addwfc temp2 | |
| 335 movff temp1,EEDATA | |
| 336 write_int_eeprom d'50' ; write byte stored in EEDATA | |
| 337 movff temp2,EEDATA | |
| 338 write_int_eeprom d'51' ; write byte stored in EEDATA | |
| 339 | |
| 340 ; Store complete cycles | |
| 341 read_int_eeprom d'52' ; Read byte (stored in EEDATA) | |
| 342 movff EEDATA,temp1 ; Low byte | |
| 343 read_int_eeprom d'53' ; Read byte (stored in EEDATA) | |
| 344 movff EEDATA,temp2 ; high byte | |
| 345 bcf STATUS,C | |
| 346 movlw d'1' | |
| 347 addwf temp1 | |
| 348 movlw d'0' | |
| 349 addwfc temp2 | |
| 350 movff temp1,EEDATA | |
| 351 write_int_eeprom d'52' ; write byte stored in EEDATA | |
| 352 movff temp2,EEDATA | |
| 353 write_int_eeprom d'53' ; write byte stored in EEDATA | |
| 354 ; Store date of complete cycle | |
| 355 movff month,EEDATA | |
| 356 write_int_eeprom d'47' | |
| 357 movff day,EEDATA | |
| 358 write_int_eeprom d'48' | |
| 359 movff year,EEDATA | |
| 360 write_int_eeprom d'49' | |
| 361 | |
|
583
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
362 ; Reset lowest battery seen |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
363 movlw LOW d'4200' ; reset to 4.2V |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
364 movwf EEDATA |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
365 write_int_eeprom d'40' |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
366 movlw HIGH d'4200' ; reset to 4.2V |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
367 movwf EEDATA |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
368 write_int_eeprom d'41' |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
369 movff month,EEDATA |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
370 write_int_eeprom d'42' |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
371 movff day,EEDATA |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
372 write_int_eeprom d'43' |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
373 movff year,EEDATA |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
374 write_int_eeprom d'44' |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
375 ; Reset temperature |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
376 SAFE_2BYTE_COPY temperature,lo |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
377 movff lo,EEDATA |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
378 write_int_eeprom d'45' |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
379 movff hi,EEDATA |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
380 write_int_eeprom d'46' |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
381 ; Reset temperature extremas |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
382 SAFE_2BYTE_COPY temperature,lo |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
383 movff lo,EEDATA ; Reset mimimum extrema |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
384 write_int_eeprom d'54' |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
385 movff hi,EEDATA |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
386 write_int_eeprom d'55' |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
387 movff month,EEDATA |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
388 write_int_eeprom d'56' |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
389 movff day,EEDATA |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
390 write_int_eeprom d'57' |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
391 movff year,EEDATA |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
392 write_int_eeprom d'58' |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
393 movff lo,EEDATA ; Reset maximum extrema |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
394 write_int_eeprom d'59' |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
395 movff hi,EEDATA |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
396 write_int_eeprom d'60' |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
397 movff month,EEDATA |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
398 write_int_eeprom d'61' |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
399 movff day,EEDATA |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
400 write_int_eeprom d'62' |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
401 movff year,EEDATA |
|
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
402 write_int_eeprom d'63' |
| 0 | 403 return |
| 404 | |
| 405 test_charger2: | |
| 406 btfss charge_started ; Did the charger ever start? | |
| 407 return ; No, quit! | |
| 408 | |
| 409 bcf charge_started ; Clear flag | |
|
583
d14f72af4c07
Battery statistics reset when battery is fully charged
heinrichsweikamp
parents:
578
diff
changeset
|
410 ; Store incomplete cycles |
| 0 | 411 read_int_eeprom d'50' ; Read byte (stored in EEDATA) |
| 412 movff EEDATA,temp1 ; Low byte | |
| 413 read_int_eeprom d'51' ; Read byte (stored in EEDATA) | |
| 414 movff EEDATA,temp2 ; high byte | |
| 415 bcf STATUS,C | |
| 416 movlw d'1' | |
| 703 | 417 addwf temp1,F |
| 0 | 418 movlw d'0' |
| 703 | 419 addwfc temp2,F |
| 0 | 420 movff temp1,EEDATA |
| 421 write_int_eeprom d'50' ; write byte stored in EEDATA | |
| 422 movff temp2,EEDATA | |
| 423 write_int_eeprom d'51' ; write byte stored in EEDATA | |
| 424 return | |
| 425 | |
| 426 show_cv_active: ; CV mode | |
|
486
c7b663939737
making waitms speed-independent, desat-time fix
heinrichsweikamp
parents:
482
diff
changeset
|
427 ; Enable RS232 only when USB power attached |
|
416
3abf9d7dafae
diabling uart module when no USB is attached
heinrichsweikamp
parents:
397
diff
changeset
|
428 btfss RCSTA,7 ; RS232 already enabled? |
|
3abf9d7dafae
diabling uart module when no USB is attached
heinrichsweikamp
parents:
397
diff
changeset
|
429 call enable_rs232 ; No, start UART module |
| 21 | 430 bsf LED_red |
| 0 | 431 WAITMS d'100' |
| 21 | 432 bcf LED_red |
| 0 | 433 WAITMS d'100' |
| 21 | 434 bsf LED_red |
| 0 | 435 bsf charge_done ; Charge cycle finished |
| 703 | 436 bsf charge_started ; Charger started in CV mode |
| 0 | 437 return |
| 438 | |
| 439 show_cc_active: ; CC mode | |
|
416
3abf9d7dafae
diabling uart module when no USB is attached
heinrichsweikamp
parents:
397
diff
changeset
|
440 ; Enable only when USB power attached |
|
3abf9d7dafae
diabling uart module when no USB is attached
heinrichsweikamp
parents:
397
diff
changeset
|
441 btfss RCSTA,7 ; RS232 already enabled? |
|
3abf9d7dafae
diabling uart module when no USB is attached
heinrichsweikamp
parents:
397
diff
changeset
|
442 call enable_rs232 ; No, start UART module |
| 21 | 443 bsf LED_red |
| 0 | 444 bsf charge_started ; Charger started in CC mode |
| 445 bcf charge_done ; Charge cycle not finished | |
| 446 return | |
| 447 | |
| 448 | |
| 449 timeout_premenu: | |
| 450 btfss premenu ; is "Menu?" displayed? | |
| 451 return ; No | |
| 452 incf timeout_counter3,F ; Yes... | |
| 453 GETCUSTOM8 d'4' ; loads premenu_timeout into WREG | |
| 454 cpfsgt timeout_counter3 ; ... longer then premenu_timeout | |
| 455 return ; No! | |
| 456 bcf premenu ; Yes, so clear "Menu?" and clear pre_menu bit | |
| 457 | |
| 681 | 458 call DISP_topline_box_clear ; Clears Bar at the top |
| 0 | 459 |
| 460 btfsc gauge_mode | |
| 461 bra timeout_premenu2 ; Skip in Gauge mode | |
| 462 btfsc FLAG_apnoe_mode | |
| 463 bra timeout_premenu2 ; Skip in Apnoe mode | |
| 13 | 464 |
| 0 | 465 timeout_premenu2: |
| 815 | 466 call update_surf_press ; rewrite surf pressure |
| 681 | 467 call DISP_serial ; rewrite serial number |
| 815 | 468 call surfcustomview_mask ; rewrite customview |
| 0 | 469 clrf timeout_counter3 ; Also clear timeout |
| 470 bcf switch_left ; and debounce switches | |
| 471 bcf switch_right | |
| 472 return | |
| 473 | |
| 474 test_switches_surfmode: ; checks switches in surfacemode | |
| 475 btfsc switch_left | |
| 476 bra test_switches_surfmode2 | |
| 477 btfsc switch_right | |
| 478 bra test_switches_surfmode3 | |
| 479 | |
| 480 ; No button press, reset timer0 | |
| 481 bcf T0CON,TMR0ON ; Stop Timer 0 | |
| 482 bcf INTCON,TMR0IF ; Clear flag | |
| 483 clrf TMR0H | |
| 484 clrf TMR0L | |
| 485 bcf INTCON,INT0IF ; Clear flag | |
| 486 bcf INTCON3,INT1IF ; Clear flag | |
| 487 return | |
| 488 | |
| 489 test_switches_surfmode3: | |
| 490 bcf switch_right | |
| 717 | 491 call DISP_topline_box_clear |
| 492 call DISP_divemask_color | |
| 0 | 493 DISPLAYTEXT .4 ;Menu? |
| 717 | 494 call DISP_standard_color |
| 0 | 495 bsf premenu |
| 496 clrf timeout_counter2 | |
| 497 return | |
| 498 | |
| 499 test_switches_surfmode2: | |
| 576 | 500 call wait_switches ; Waits until switches are released, resets flag if button stays pressed! |
| 0 | 501 btfss premenu |
| 13 | 502 bra test_switches_surfmode4 |
| 0 | 503 bsf menubit ; Enter Menu! |
| 504 return | |
| 505 | |
| 13 | 506 test_switches_surfmode4: |
| 107 | 507 bsf toggle_customview ; Toggle customview (Cleared in customview.asm) |
| 13 | 508 return |
| 0 | 509 |
| 510 timeout_surfmode: | |
| 511 incf timeout_counter2,F ; increase timeout counter | |
| 512 GETCUSTOM8 d'3' ; loads surfloop_timeout into WREG | |
| 513 addlw d'5' ; adds five seconds in case timout=zero! | |
| 514 btfsc STATUS,C ; > 255? | |
| 515 movlw d'255' ; Set to 255... | |
| 516 decf WREG,F ; Limit to 254 | |
| 517 cpfsgt timeout_counter2 ; Compare with timeout_counter2 | |
| 518 return ; return, no timeout | |
| 519 bsf sleepmode ; Set Flag | |
| 520 return ; Return |
