# HG changeset patch # User JeanDo # Date 1307402215 -7200 # Node ID b5b030c1ae7ecab11b844f6b6e0b0486c61b61e7 # Parent ed137d66ac654961d7113455861092d0b38102ea Avoid spurious switch-depth stops with 3 or more gas. diff -r ed137d66ac65 -r b5b030c1ae7e code_part1/OSTC_code_asm_part1/MAIN.ASM --- a/code_part1/OSTC_code_asm_part1/MAIN.ASM Mon May 30 19:28:59 2011 +0200 +++ b/code_part1/OSTC_code_asm_part1/MAIN.ASM Tue Jun 07 01:16:55 2011 +0200 @@ -38,7 +38,7 @@ inter_v code 0x0008 bra HighInt ;High Priority Interrups -inter_asm code 0x0018 ;Low Priority Interrups +inter_asm code 0x0018 ;Low Priority Interrups ; *** low priority interrupts not used bra HighInt ;High Priority Interrups diff -r ed137d66ac65 -r b5b030c1ae7e code_part1/OSTC_code_asm_part1/changelog.txt --- a/code_part1/OSTC_code_asm_part1/changelog.txt Mon May 30 19:28:59 2011 +0200 +++ b/code_part1/OSTC_code_asm_part1/changelog.txt Tue Jun 07 01:16:55 2011 +0200 @@ -1,6 +1,7 @@ New in 1.91 beta: BETA Version - Do NOT use for diving! BUGFIX: Ignore depths>130m in PC simulation +BUGFIX: Avoid spurious CF55 stops with 3 gas or more. New in 1.90 Stable: Stable release diff -r ed137d66ac65 -r b5b030c1ae7e code_part1/OSTC_code_asm_part1/divemode.asm --- a/code_part1/OSTC_code_asm_part1/divemode.asm Mon May 30 19:28:59 2011 +0200 +++ b/code_part1/OSTC_code_asm_part1/divemode.asm Tue Jun 07 01:16:55 2011 +0200 @@ -1777,6 +1777,7 @@ set_first_gas: read_int_eeprom d'33' ; Read byte (stored in EEDATA) movff EEDATA,active_gas ; Read start gas (1-5) + movff EEDATA,char_I_current_gas decf active_gas,W ; Gas 0-4 mullw d'4' diff -r ed137d66ac65 -r b5b030c1ae7e code_part1/OSTC_code_asm_part1/divemode_menu.asm --- a/code_part1/OSTC_code_asm_part1/divemode_menu.asm Mon May 30 19:28:59 2011 +0200 +++ b/code_part1/OSTC_code_asm_part1/divemode_menu.asm Tue Jun 07 01:16:55 2011 +0200 @@ -560,7 +560,9 @@ bsf event_occured ; set global event flag bsf is_bailout ;=1: CC mode, but bailout active! clrf lo ; clear Setpoint, PLED_const_ppO2_value now displayes "Bail" - movff lo,char_I_const_ppO2 + movff lo,char_I_const_ppO2 + movlw 6 + movff WREG,char_I_current_gas ; Current gas is Gas6 (manual setting). bra timeout_divemenu2 ; quit underwater menu! divemenu_set_gas: @@ -627,6 +629,7 @@ cpfseq menupos ; At the "Gas 6.." position? bra divemenu_set_gas2b ; No, select Gas1-5 (Stored in Menupos) bra divemode_set_xgas ; Configure the extra gas + divemenu_set_gas2b: bsf is_bailout ;=1: CC mode, but bailout active! clrf lo ; clear Setpoint, PLED_const_ppO2_value now displayes "Bail" @@ -657,6 +660,8 @@ movff EEDATA, char_I_N2_ratio ; = N2! bsf stored_gas_changed ; set event flag bsf event_occured ; set global event flag + + movff menupos,char_I_current_gas ; Inform deco code too. bra timeout_divemenu2 ; quit menu! timeout_divemenu: diff -r ed137d66ac65 -r b5b030c1ae7e code_part1/OSTC_code_asm_part1/surfmode.asm --- a/code_part1/OSTC_code_asm_part1/surfmode.asm Mon May 30 19:28:59 2011 +0200 +++ b/code_part1/OSTC_code_asm_part1/surfmode.asm Tue Jun 07 01:16:55 2011 +0200 @@ -273,16 +273,17 @@ btg LED_blue return +;============================================================================= + calc_deko_surfmode: ostc_debug 'I' ; Sends debug-information to screen if debugmode active movff last_surfpressure+0,int_I_pres_surface+0 ; copy surface air pressure to deco routine movff last_surfpressure+1,int_I_pres_surface+1 - clrf wait_temp ; Use as buffer - movff wait_temp,char_I_He_ratio ; No He at the Surface - movlw d'79' ; 79% N2 - movwf wait_temp ; Use as buffer - movff wait_temp,char_I_N2_ratio ; No He at the Surface + clrf WREG ; Use as buffer + movff WREG,char_I_He_ratio ; No He at the Surface + movlw d'79' ; 79% N2 + movff WREG,char_I_N2_ratio ; Air at the Surface SAFE_2BYTE_COPY amb_pressure,int_I_pres_respiration ; copy surface air pressure to deco routine GETCUSTOM8 d'11' ; Saturation multiplier % @@ -299,6 +300,7 @@ return +;============================================================================= test_charger: bcf TRISC,1 ; CHRG_OUT output diff -r ed137d66ac65 -r b5b030c1ae7e code_part1/OSTC_code_c_part2/p2_deco.c --- a/code_part1/OSTC_code_c_part2/p2_deco.c Mon May 30 19:28:59 2011 +0200 +++ b/code_part1/OSTC_code_c_part2/p2_deco.c Tue Jun 07 01:16:55 2011 +0200 @@ -972,63 +972,21 @@ ////////////////////////////////////////////////////////////////////////////// // Find current gas in the list (if any). // -// Input: char_I_deco_N2_ratio[] and He, to detect breathed gas. +// Input: char_I_current_gas. // -// Output: sim_gas_depth_used +// Output: sim_gas_last_depth, temp_depth_limit. // static void gas_switch_find_current(void) { - overlay unsigned char j; - overlay unsigned char N2 = (unsigned char)(N2_ratio * 100 + 0.5); - overlay unsigned char He = (unsigned char)(He_ratio * 100 + 0.5); - - for(j=0; j depth ) - { - for(j=0; j= (char_I_deco_gas_change[j] - 3) - ) - { - // Then start gas-switch timer there, - sim_gas_delay = sim_dive_mins - + read_custom_function(55); - - // And make sure decostop will be recorded at the right depth. - temp_depth_limit = char_I_deco_gas_change[j]; - break; - } - } - } - else - // Make clear there is no deay anymore. - sim_gas_delay = 0; + if( (char_I_current_gas <= NUM_GAS) // Gas6 == manual set. + && char_I_deco_gas_change[char_I_current_gas-1] + ) + { + sim_gas_last_used = char_I_current_gas-1; + sim_gas_last_depth = char_I_deco_gas_change[sim_gas_last_used]; + // temp_depth_limit = ??? } } @@ -1063,7 +1021,7 @@ if( temp_depth_limit > deco_gas_change[j] ) continue; - // Gas deeper than the current/previous one ? Skip ! + // Gas deeper (or equal) than the current one ? Skip ! if( sim_gas_last_depth && deco_gas_change[j] >= sim_gas_last_depth ) continue; diff -r ed137d66ac65 -r b5b030c1ae7e code_part1/OSTC_code_c_part2/p2_deco.o Binary file code_part1/OSTC_code_c_part2/p2_deco.o has changed diff -r ed137d66ac65 -r b5b030c1ae7e code_part1/OSTC_code_c_part2/shared_definitions.h --- a/code_part1/OSTC_code_c_part2/shared_definitions.h Mon May 30 19:28:59 2011 +0200 +++ b/code_part1/OSTC_code_c_part2/shared_definitions.h Tue Jun 07 01:16:55 2011 +0200 @@ -142,7 +142,8 @@ VAR_UINT (int_I_divemins); // Dive time (minutes) VAR_UCHAR (char_I_temp); // new in v101 VAR_UCHAR (char_I_actual_ppO2); // -VAR_UCHAR (char_I_first_gas); // Gas used at start of dive. +VAR_UCHAR (char_I_first_gas); // Gas used at start of dive (bottom mix) +VAR_UCHAR (char_I_current_gas); // Current gas breathed (1..6). VAR_UCHAR (char_I_N2_ratio); // VAR_UCHAR (char_I_He_ratio); // VAR_UCHAR (char_I_saturation_multiplier); // for conservatism/safety values 1.0 no conservatism to 1.5 50% faster saturation