# HG changeset patch # User JeanDo # Date 1308785879 -7200 # Node ID 0e0cf4701c17c5d64c67736ffe6467a629be38c8 # Parent 93c0cb14b0d2aa7e94f0cda71a282e618c46643d# Parent 01ca15caa59394dc056f621870edec0a2d7a7644 Merge with 64kByte Logbook diff -r 93c0cb14b0d2 -r 0e0cf4701c17 code_part1/OSTC_code_asm_part1/MAIN.ASM diff -r 93c0cb14b0d2 -r 0e0cf4701c17 code_part1/OSTC_code_asm_part1/altimeter.asm --- a/code_part1/OSTC_code_asm_part1/altimeter.asm Fri Jun 10 01:14:38 2011 +0200 +++ b/code_part1/OSTC_code_asm_part1/altimeter.asm Thu Jun 23 01:37:59 2011 +0200 @@ -364,6 +364,7 @@ movlw 4*(.49-.32) + 0x82 ; CF#49 low byte address in EEPROM movwf EEADR call write_eeprom + clrf EEADRH ; Reset EEADRH for compatibility bra altimeter_menu_2 ;---- Reset sea level pressure to reference ---------------------------------- diff -r 93c0cb14b0d2 -r 0e0cf4701c17 code_part1/OSTC_code_asm_part1/changelog.txt --- a/code_part1/OSTC_code_asm_part1/changelog.txt Fri Jun 10 01:14:38 2011 +0200 +++ b/code_part1/OSTC_code_asm_part1/changelog.txt Thu Jun 23 01:37:59 2011 +0200 @@ -1,9 +1,28 @@ +New in 1.92 beta: +BETA Version - Do NOT use for diving! + + 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 +BUGFIX: Average depth in Logbook (For dives made with >=1.91) +BUGFIX: Logbook time scale (squares are 10min * 10m) +BUGFIX: Bühlmann half-times rounded to the minute +BUGFIX: Protect again rare race contition on pressure/temperature +BUGFIX: Time is now accurate +CHANGE: CF02 now allows delay of more then 240seconds +CHANGE: First gas do not reset change depth +CHANGE: Logbook format 21: store & shows dive model (sat/desat or GF_low/high factors), + CNS profile, GF profile. + WARNING: the upgrade is not reversible without loosing all your profiles. +NEW: "Quit Sim" in divemode simulator menu for exiting the simulation NEW: Allow -2:00 to +2:00 adjustement per day (CF48). NEW: 1/10/100 steps in CF menu +NEW: 64kByte Logbook (Doubled capacity compared to 1.90) +NEW: Additional dive interval for simulator and decoplaning +NEW: Negative temperatures in logbook and battery information menu +NEW: Screen dump support New in 1.90 Stable: Stable release diff -r 93c0cb14b0d2 -r 0e0cf4701c17 code_part1/OSTC_code_asm_part1/customview.asm --- a/code_part1/OSTC_code_asm_part1/customview.asm Fri Jun 10 01:14:38 2011 +0200 +++ b/code_part1/OSTC_code_asm_part1/customview.asm Thu Jun 23 01:37:59 2011 +0200 @@ -85,9 +85,16 @@ goto PLED_total_average_show2 ; Update the figures only customview_1sec_stopwatch: + btfsc gauge_mode ; In Gauge mode? + bra customview_1sec_stopwatch_gauge; Yes + bsf menu3_active ; Set Flag goto PLED_stopwatch_show2 ; Update figures only +customview_1sec_stopwatch_gauge: + bsf menu3_active ; Set Flag + goto PLED_stopwatch_show_gauge ; Update figures + Description + customview_1sec_marker: ; Do nothing extra bsf menu3_active ; Set Flag customview_1sec_clock: ; Do nothing extra @@ -198,11 +205,22 @@ decfsz WREG,F ; WREG=1? bra customview_toggle ; No, use next Customview + btfsc gauge_mode ; In Gauge mode? + bra customview_init_stopwatch_gauge ; Yes + call PLED_stopwatch_show ; Init Stopwatch display bsf menu3_active ; Set Flag bra customview_toggle_exit +customview_init_stopwatch_gauge: + call PLED_stopwatch_show_gauge ; Init Stopwatch display + bsf menu3_active ; Set Flag + bra customview_toggle_exit + customview_init_marker: ; Init Marker + btfsc gauge_mode ; In Gauge mode? + call PLED_clear_divemode_menu; Yes, clear BIG stopwatch + GETCUSTOM8 d'50' ; Show Marker? (=1 in WREG) decfsz WREG,F ; WREG=1? bra customview_toggle ; No, use next Customview diff -r 93c0cb14b0d2 -r 0e0cf4701c17 code_part1/OSTC_code_asm_part1/definitions.asm --- a/code_part1/OSTC_code_asm_part1/definitions.asm Fri Jun 10 01:14:38 2011 +0200 +++ b/code_part1/OSTC_code_asm_part1/definitions.asm Thu Jun 23 01:37:59 2011 +0200 @@ -22,7 +22,7 @@ ; ToDo: #DEFINE softwareversion_x d'1' ; Software version XX.YY -#DEFINE softwareversion_y d'91' ; Software version XX.YY +#DEFINE softwareversion_y d'92' ; Software version XX.YY #DEFINE softwareversion_beta 1 ; (and 0 for release) @@ -36,7 +36,7 @@ ;#DEFINE __DEBUG ; -#DEFINE logbook_profile_version 0x20 ; Do not touch! +#DEFINE logbook_profile_version 0x21 ; Do not touch! #DEFINE T0CON_debounce b'00000000' ; Timer0 Switch Debounce #DEFINE FT_SMALL .0 @@ -242,8 +242,8 @@ avr_rel_pressure_total res 2 ; Average rel. pressure (Average depth) for the dive [mBar], Non-Resettable last_pressure res 2 temperature_avg res 2 ; Temperature summing buffer. -temperature res 2 -last_temperature res 2 +temperature res 2 ; Final temperature. SIGNED. +last_temperature res 2 ; Last displayed temperature (used to detect changes). Dx res 2 last_surfpressure res 2 ; Divemode @@ -267,10 +267,10 @@ divisor_temperature res 1 ; divisors for profile storage divisor_deco res 1 -divisor_tank res 1 +divisor_gf res 1 divisor_ppo2 res 1 divisor_deco_debug res 1 -divisor_nuy2 res 1 +divisor_cns res 1 timeout_counter res 1 ; Timeout counter variables timeout_counter2 res 1 @@ -333,6 +333,7 @@ time_correction_value res 1 ; Adds to Seconds on midnight gaslist_active res 1 ; Holds flags for active gases desaturation_time_buffer res 2 ; buffer for desat time +total_divetime_seconds res 2 ; counts dive seconds regardless of CF01 (18h max.) ;============================================================================= ; C-code Routines @@ -426,7 +427,7 @@ #DEFINE second_FD flag4,7 ; 2nd 0xFD in EEPROM found #DEFINE second_FA flag4,7 ; 2nd 0xFA in EEPROM found -#DEfINE eeprom_overflow flag5,0 ; EEPROM overflowed (>32KB) +;#DEfINE unused flag5,0 ; unused #DEFINE eeprom_blockwrite flag5,1 ; EEPROM blockwrite active #DEFINE Flag_4 flag5,2 ; unused #DEFINE low_battery_state flag5,3 ;=1 if battery low diff -r 93c0cb14b0d2 -r 0e0cf4701c17 code_part1/OSTC_code_asm_part1/divemode.asm --- a/code_part1/OSTC_code_asm_part1/divemode.asm Fri Jun 10 01:14:38 2011 +0200 +++ b/code_part1/OSTC_code_asm_part1/divemode.asm Thu Jun 23 01:37:59 2011 +0200 @@ -75,6 +75,7 @@ bsf twosecupdate ; Routines used in the "other second" call calc_average_depth ; calculate average depth + call calc_velocity ; calculate vertical velocity and display if > threshold (every two seconds) bra diveloop_loop1x ; Common Tasks @@ -589,7 +590,7 @@ ; shift address for header ; the header will be stored after the dive - incf_eeprom_address d'47' ; Macro, that adds 8Bit to eeprom_address:2 with banking at 0x8000 + incf_eeprom_address d'57' ; Macro, that adds 8Bit to eeprom_address:2 with banking at 0x8000 store_dive_data2: SAFE_2BYTE_COPY rel_pressure, lo @@ -612,9 +613,9 @@ movlw d'2' ; Information length addwf ProfileFlagByte,F ; add to ProfileFlagByte check_extended2: - decfsz divisor_tank,W ; Check divisor + decfsz divisor_gf,W ; Check divisor bra check_extended3 - movlw d'2' ; Information length + movlw d'1' ; Information length addwf ProfileFlagByte,F ; add to ProfileFlagByte check_extended3: decfsz divisor_ppo2,W ; Check divisor @@ -627,9 +628,9 @@ movlw d'9' ; Information length addwf ProfileFlagByte,F ; add to ProfileFlagByte check_extended5: - decfsz divisor_nuy2,W ; Check divisor + decfsz divisor_cns,W ; Check divisor bra check_extended6 - movlw d'0' ; Information length + movlw d'1' ; Information length addwf ProfileFlagByte,F ; add to ProfileFlagByte check_extended6: @@ -706,9 +707,9 @@ bra store_extended2 rcall store_dive_decodata store_extended2: - decfsz divisor_tank,F ; Check divisor + decfsz divisor_gf,F ; Check divisor bra store_extended3 - rcall store_dive_tankdata + rcall store_dive_gf store_extended3: decfsz divisor_ppo2,F ; Check divisor bra store_extended4 @@ -718,9 +719,9 @@ bra store_extended5 rcall store_dive_decodebug store_extended5: - decfsz divisor_nuy2,F ; Check divisor + decfsz divisor_cns,F ; Check divisor bra store_extended6 - rcall store_dive_nuy2 + rcall store_dive_cns store_extended6: ; The next block is required to take care of "store never" @@ -728,14 +729,14 @@ clrf divisor_temperature ; And clear register again, so it will never reach zero... btfsc divisor_deco,7 ; Test highest Bit (Register must have been zero before the "decfsz" command!) clrf divisor_deco ; And clear register again, so it will never reach zero... - btfsc divisor_tank,7 ; Test highest Bit (Register must have been zero before the "decfsz" command!) - clrf divisor_tank ; And clear register again, so it will never reach zero... + btfsc divisor_gf,7 ; Test highest Bit (Register must have been zero before the "decfsz" command!) + clrf divisor_gf ; And clear register again, so it will never reach zero... btfsc divisor_ppo2,7 ; Test highest Bit (Register must have been zero before the "decfsz" command!) clrf divisor_ppo2 ; And clear register again, so it will never reach zero... btfsc divisor_deco_debug,7 ; Test highest Bit (Register must have been zero before the "decfsz" command!) clrf divisor_deco_debug ; And clear register again, so it will never reach zero... - btfsc divisor_nuy2,7 ; Test highest Bit (Register must have been zero before the "decfsz" command!) - clrf divisor_nuy2 ; And clear register again, so it will never reach zero... + btfsc divisor_cns,7 ; Test highest Bit (Register must have been zero before the "decfsz" command!) + clrf divisor_cns ; And clear register again, so it will never reach zero... ostc_debug 'D' ; Sends debug-information to screen if debugmode active @@ -750,9 +751,11 @@ bcf event_occured ; Clear the global event flag return ; Done. (Sample with all informations written to EEPROM) -store_dive_nuy2: +store_dive_cns: + movff char_O_CNS_fraction,WREG + call write_external_eeprom ; Store in EEPROM GETCUSTOM8 d'26' - movwf divisor_nuy2 ; Reload divisor from CF + movwf divisor_cns ; Reload divisor from CF return store_dive_decodebug: @@ -791,13 +794,11 @@ movwf divisor_ppo2 ; Reload divisor from CF return -store_dive_tankdata: - movlw d'0' ; Dummy Tank1 - call write_external_eeprom - movlw d'0' ; Dummy Tank2 +store_dive_gf: + movff char_O_gradient_factor,WREG ; gradient factor absolute call write_external_eeprom GETCUSTOM8 d'23' - movwf divisor_tank ; Reload divisor from CF + movwf divisor_gf ; Reload divisor from CF return store_dive_decodata: @@ -1298,10 +1299,10 @@ addwf temp1,W ; copy to bits 0-3, result in WREG call write_external_eeprom - movlw d'2' ; information size tank + movlw d'1' ; information size GF movwf temp1 ; copy to bits 0-3 swapf temp1,F ; swap nibbels 0-3 with 4-7 - GETCUSTOM8 d'23' ; Divisor Tank + GETCUSTOM8 d'23' ; Divisor GF addwf temp1,W ; copy to bits 0-3, result in WREG call write_external_eeprom @@ -1319,10 +1320,10 @@ addwf temp1,W ; copy to bits 0-3, result in WREG call write_external_eeprom - movlw d'0' ; information size nuy2 + movlw d'1' ; information size cns movwf temp1 ; copy to bits 0-3 swapf temp1,F ; swap nibbels 0-3 with 4-7 - GETCUSTOM8 d'26' ; Divisor nuy2 + GETCUSTOM8 d'26' ; Divisor cns addwf temp1,W ; copy to bits 0-3, result in WREG call write_external_eeprom @@ -1333,7 +1334,40 @@ movff char_O_CNS_fraction,WREG ; copy into bank1 call write_external_eeprom ; Stores CNS% -; Add additional 10bytes here.... mH + movff avr_rel_pressure_total+0,WREG ; Average Depth + call write_external_eeprom + movff avr_rel_pressure_total+1,WREG ; Average Depth + call write_external_eeprom + + movff total_divetime_seconds+0,WREG ; Total dive time (Regardless of CF01) + call write_external_eeprom + movff total_divetime_seconds+1,WREG ; Total dive time (Regardless of CF01) + call write_external_eeprom + + movlw d'32' ; GF_lo + movff char_I_deco_model,lo + decfsz lo,F ; jump over next line if char_I_deco_model == 1 + movlw d'11' ; Saturation Multiplier + call getcustom8_1 ; Get Custom function #WREG + call write_external_eeprom ; write WREG into external memory + + movlw d'33' ; GF_hi + movff char_I_deco_model,lo + decfsz lo,F ; jump over next line if char_I_deco_model == 1 + movlw d'12' ; Desaturation Multiplier + call getcustom8_1 ; Get Custom function #WREG + call write_external_eeprom ; write WREG into external memory + + read_int_eeprom d'34' ; Read deco modell + movf EEDATA,W + call write_external_eeprom ; write WREG into external memory + + clrf WREG + call write_external_eeprom ; Spare3 + clrf WREG + call write_external_eeprom ; Spare2 + clrf WREG + call write_external_eeprom ; Spare1 movlw 0xFB ; Header stop call write_external_eeprom @@ -1404,13 +1438,16 @@ bcf divemode incf timeout_counter,F - GETCUSTOM8 d'2' ; diveloop_timeout - addlw d'2' ; adds two seconds in case timout=zero! - btfsc STATUS,C ; > 255? - movlw d'255' ; Set to 255... - decf WREG,F ; Limit to 254 - cpfsgt timeout_counter - bsf divemode + movlw d'0' + addwfc timeout_counter2,F ; timeout is 15bits + GETCUSTOM15 d'2' ; diveloop_timeout + movff lo,sub_a+0 + movff hi,sub_a+1 + movff timeout_counter, sub_b+0 + movff timeout_counter2, sub_b+1 + call sub16 ; sub_c = sub_a - sub_b + btfss neg_flag ; Result negative? + bsf divemode ; No, set flag return timeout_divemode2: @@ -1695,13 +1732,15 @@ clrf apnoe_secs clrf divemins+0 clrf divemins+1 + clrf total_divetime_seconds+0 + clrf total_divetime_seconds+1 clrf menupos3 bcf menu3_active clrf divesecs clrf samplesecs clrf apnoe_timeout_counter ; timeout in minutes - clrf timeout_counter ; takes care of the timeout - clrf timeout_counter2 ; Here: counts to six, then store deco data and temperature + clrf timeout_counter ; takes care of the timeout (Low byte) + clrf timeout_counter2 ; takes care of the timeout (High byte) clrf AlarmType ; Clear all alarms bcf event_occured ; clear flag bcf setpoint_changed ; clear flag @@ -1744,13 +1783,13 @@ GETCUSTOM8 d'22' movwf divisor_deco GETCUSTOM8 d'23' - movwf divisor_tank + movwf divisor_gf GETCUSTOM8 d'24' movwf divisor_ppo2 GETCUSTOM8 d'25' movwf divisor_deco_debug GETCUSTOM8 d'26' - movwf divisor_nuy2 + movwf divisor_cns btfss FLAG_apnoe_mode ; In Apnoe mode? bra divemode1 diff -r 93c0cb14b0d2 -r 0e0cf4701c17 code_part1/OSTC_code_asm_part1/divemode_menu.asm --- a/code_part1/OSTC_code_asm_part1/divemode_menu.asm Fri Jun 10 01:14:38 2011 +0200 +++ b/code_part1/OSTC_code_asm_part1/divemode_menu.asm Thu Jun 23 01:37:59 2011 +0200 @@ -131,6 +131,8 @@ movlw d'7' ; Number of entries for this menu+1 = 7 btfsc display_set_xgas ; Are we in the Gas6 menu? movlw d'7' ; Number of entries for this menu+1 = 7 + btfsc display_set_simulator ; Are we in the simulator menu? + movlw d'7' ; Number of entries for this menu+1 = 7 cpfseq menupos ; =limit? bra test_switches_divemode_menu1; No! movlw d'1' ; Yes, reset to position 1! @@ -348,6 +350,8 @@ bra divemode_menu_simulator_p10 ; Adjust +10m dcfsnz menupos,F bra divemode_menu_simulator_m10 ; Adjust -10m + dcfsnz menupos,F + bra divemode_menu_simulator_quit; Adjust to zero m bra timeout_divemenu2 ; quit underwater menu! divemode_menu_simulator_common: @@ -366,7 +370,6 @@ movlw HIGH d'14000' movwf sim_pressure+1 return - divemode_menu_simulator_common2: movlw LOW d'1000' ; Compare to 1bar == 0m == 1000 mbar. subwf sim_pressure+0,W @@ -401,6 +404,13 @@ movwf menupos ; reset cursor bra divemode_menu_simulator_common +divemode_menu_simulator_quit: + movlw LOW d'1000' + movwf sim_pressure+0 + movlw HIGH d'1000' + movwf sim_pressure+1 + bra timeout_divemenu2 ; quit menu + divemode_menu_simulator_p1: movlw d'100' addwf sim_pressure+0,F diff -r 93c0cb14b0d2 -r 0e0cf4701c17 code_part1/OSTC_code_asm_part1/english_text.asm --- a/code_part1/OSTC_code_asm_part1/english_text.asm Fri Jun 10 01:14:38 2011 +0200 +++ b/code_part1/OSTC_code_asm_part1/english_text.asm Thu Jun 23 01:37:59 2011 +0200 @@ -96,7 +96,7 @@ ; 32 custom function descriptors I (FIXED LENGTH = 15 chars). TCODE .40, .35, "Start Dive [m]" ;036 Start Dive [m] (depth to switch to dive mode) TCODE .40, .35, "End Dive [m]" ;037 End Dive [m] (depth to switch back to surface mode) - TCODE .40, .35, "End Delay [min]" ;038 End Delay [min] (duration dive screen stays after end of dive) + TCODE .40, .35, "End Delay [sec]" ;038 End Delay [sec] (duration dive screen stays after end of dive) TCODE .40, .35, "Power Off [min]" ;039 Power Off [min] TCODE .40, .35, "Pre-menu [min]" ;040 Pre-menu [min] (Delais to keep surface-mode menus displayed) TCODE .40, .35, "velocity[m/min]" ;041 velocity[m/min] @@ -117,10 +117,10 @@ TCODE .40, .35, "sampling rate " ;056 sampling rate TCODE .40, .35, "Divisor Temp " ;057 Divisor Temp TCODE .40, .35, "Divisor Decodat" ;058 Divisor Decodat - TCODE .40, .35, "Divisor NotUse1" ;059 Divisor NotUse1 + TCODE .40, .35, "Divisor GF " ;059 Divisor GF TCODE .40, .35, "Divisor ppO2 " ;060 Divisor ppO2 TCODE .40, .35, "Divisor Debug " ;061 Divisor Debug - TCODE .40, .35, "Divisor NotUse2" ;062 Divisor NotUse2 + TCODE .40, .35, "Divisor CNS " ;062 Divisor CNS TCODE .40, .35, "CNSshow dive[%]" ;063 CNSshow dive[%] TCODE .40, .35, "Logbook offset " ;064 Logbook offset TCODE .40, .35, "Last Deco at[m]" ;065 Last Deco at[m] @@ -391,7 +391,11 @@ TCODE .50, .130, "Aborted!" ;304 Aborted ;@5 variant TCODE .0, .0, "Future TTS" ;305 Future TTS (=10 chars. Title for @5 customview). +; + TCODE .100, .125, "Quit Sim" ;306 Quit Sim (=8char max. Quit Simulator mode) ;Dive interval - TCODE .20, .35, "Interval:" ;306 Interval: - TCODE .0, .0, "Now" ;307 Now + TCODE .20, .35, "Interval:" ;307 Interval: + TCODE .0, .0, "Now " ;308 Now (7 chars min) + TCODE .108, .112, "Average" ;309 Average + TCODE .94, .54, "Stopwatch" ;310 Stopwatch (BIG Stopwatch in Gauge mode) ;============================================================================= diff -r 93c0cb14b0d2 -r 0e0cf4701c17 code_part1/OSTC_code_asm_part1/french_text.asm --- a/code_part1/OSTC_code_asm_part1/french_text.asm Fri Jun 10 01:14:38 2011 +0200 +++ b/code_part1/OSTC_code_asm_part1/french_text.asm Thu Jun 23 01:37:59 2011 +0200 @@ -97,7 +97,7 @@ ; 32 custom function descriptors I (FIXED LENGTH = 15 chars). TCODE .40, .35, "Début Plong.[m]" ;036 Start Dive [m] (depth to switch to dive mode) TCODE .40, .35, "Fin Plongée [m]" ;037 End Dive [m] (depth to switch back to surface mode) - TCODE .40, .35, "Délai Fin [min]" ;038 End Delay [min] (duration dive screen stays after end of dive) + TCODE .40, .35, "Délai Fin [sec]" ;038 End Delay [sec] (duration dive screen stays after end of dive) TCODE .40, .35, "Eteindre [min]" ;039 Power Off [min] TCODE .40, .35, "Pré-menu [min]" ;040 Pre-menu [min] (Delais to keep surface-mode menus displayed) TCODE .40, .35, "Vitesse [m/min]" ;041 velocity[m/min] @@ -118,10 +118,10 @@ TCODE .40, .35, "Freq. Mesures " ;056 sampling rate TCODE .40, .35, "Diviseur Temp. " ;057 Divisor Temp TCODE .40, .35, "Divis.Donn.Déco" ;058 Divisor Decodat - TCODE .40, .35, "Diviseur NotUse" ;059 Divisor NotUse1 + TCODE .40, .35, "Diviseur GF " ;059 Divisor GF TCODE .40, .35, "Diviseur ppO2 " ;060 Divisor ppO2 TCODE .40, .35, "Diviseur Debug " ;061 Divisor Debug - TCODE .40, .35, "Diviseur NotUse" ;062 Divisor NotUse2 + TCODE .40, .35, "Diviseur CNS " ;062 Divisor CNS TCODE .40, .35, "Aff.CNSPlong[%]" ;063 CNSshow dive[%] TCODE .40, .35, "Décalage Carnet" ;064 Logbook offset TCODE .40, .35, "Dern. Palier[m]" ;065 Last Deco at[m] @@ -392,7 +392,11 @@ TCODE .50, .130, "Aborted!" ;304 Aborted ;@5 variant TCODE .0, .0, "DTR Réchap" ;305 Future TTS (=10 chars. Title for @5 customview). +; + TCODE .100, .125, "Quit Sim" ;306 Quit Sim (=8char max. Quit Simulator mode) ;Dive interval - TCODE .20, .35, "Intervalle: " ;306 Interval: - TCODE .0, .0, "Maintenant" ;307 Dive now + TCODE .20, .35, "Intervalle: " ;307 Interval: + TCODE .0, .0, "Maintenant" ;308 Now (7 chars min) + TCODE .108, .112, "Moyenne" ;309 Average + TCODE .116, .54, "Chrono" ;310 Stopwatch (BIG Stopwatch in Gauge mode) ;============================================================================= diff -r 93c0cb14b0d2 -r 0e0cf4701c17 code_part1/OSTC_code_asm_part1/german_text.asm --- a/code_part1/OSTC_code_asm_part1/german_text.asm Fri Jun 10 01:14:38 2011 +0200 +++ b/code_part1/OSTC_code_asm_part1/german_text.asm Thu Jun 23 01:37:59 2011 +0200 @@ -97,7 +97,7 @@ ; 32 custom function descriptors I (FIXED LENGTH = 15 chars). TCODE .40, .35, "TG Start [m]" ;036 Start Dive [m] (depth to switch to dive mode) TCODE .40, .35, "TG Ende [m]" ;037 End Dive [m] (depth to switch back to surface mode) - TCODE .40, .35, "TGNachlauf[min]" ;038 End Delay [min] (duration dive screen stays after end of dive) + TCODE .40, .35, "TGNachlauf[sek]" ;038 End Delay [sec] (duration dive screen stays after end of dive) TCODE .40, .35, "Standby [min]" ;039 Power Off [min] TCODE .40, .35, "Pre-Menü [min]" ;040 Pre-menu [min] (Delais to keep surface-mode menus displayed) TCODE .40, .35, "Geschw. [m/min]" ;041 velocity[m/min] @@ -118,10 +118,10 @@ TCODE .40, .35, "Abtastrate " ;056 sampling rate TCODE .40, .35, "Divisor Temp " ;057 Divisor Temp TCODE .40, .35, "Divisor Dekodat" ;058 Divisor Decodat - TCODE .40, .35, "Divisor frei1 " ;059 Divisor NotUse1 + TCODE .40, .35, "Divisor GF " ;059 Divisor GF TCODE .40, .35, "Divisor ppO2 " ;060 Divisor ppO2 TCODE .40, .35, "Divisor Debug " ;061 Divisor Debug - TCODE .40, .35, "Divisor frei2 " ;062 Divisor NotUse2 + TCODE .40, .35, "Divisor CNS " ;062 Divisor CNS TCODE .40, .35, "CNS-Anz. TG [%]" ;063 CNSshow dive[%] TCODE .40, .35, "Logbuch Versatz" ;064 Logbook offset TCODE .40, .35, "Letzte Deko [m]" ;065 Last Deco at[m] @@ -392,7 +392,11 @@ TCODE .40, .130, "Abgebrochen!" ;304 Aborted ;@5 variant TCODE .0, .0, "TTS @+Min." ;305 Future TTS (=10 chars. Title for @5 customview). +; + TCODE .100, .125, "Ende Sim" ;306 Quit Sim (=8char max. Quit Simulator mode) ;Dive interval - TCODE .20, .35, "Interval:" ;306 Interval: - TCODE .0, .0, "Now" ;307 Now + TCODE .20, .35, "Interval:" ;307 Interval: + TCODE .0, .0, "Jetzt " ;308 Now (7 chars min) + TCODE .109, .113, "D-Tiefe" ;309 Average + TCODE .109, .54, "Stopuhr" ;310 Stopwatch (BIG Stopwatch in Gauge mode) ;============================================================================= diff -r 93c0cb14b0d2 -r 0e0cf4701c17 code_part1/OSTC_code_asm_part1/i2c_eeprom.asm --- a/code_part1/OSTC_code_asm_part1/i2c_eeprom.asm Fri Jun 10 01:14:38 2011 +0200 +++ b/code_part1/OSTC_code_asm_part1/i2c_eeprom.asm Thu Jun 23 01:37:59 2011 +0200 @@ -18,8 +18,8 @@ ; known bugs: ; ToDo: use 2nd 32KB from external EEPROM for something -incf_eeprom_address macro ext_ee_temp1 ; Will increase eeprom_address:2 with the 8Bit value "ext_ee_temp1" and takes - movlw ext_ee_temp1 ; care of bank switching at 0x8000 +incf_eeprom_address macro ext_ee_temp1 ; Will increase eeprom_address:2 with the 8Bit value "ext_ee_temp1" + movlw ext_ee_temp1 call incf_eeprom_address0 endm @@ -27,18 +27,18 @@ addwf eeprom_address+0,F ; increase address movlw d'0' addwfc eeprom_address+1,F + return +; btfss eeprom_address+1,7 ; at address 8000? +; return ; No, continue +; +; ; Yes, clear eeprom_address:2 +; clrf eeprom_address+0 ; Clear eeprom address +; clrf eeprom_address+1 +; return ; Done. +; +;============================================================================= +; Will decrease eeprom_address:2 with the 8Bit value "ext_ee_temp1" - btfss eeprom_address+1,7 ; at address 8000? - return ; No, continue - - ; Yes, clear eeprom_address:2 - clrf eeprom_address+0 ; Clear eeprom address - clrf eeprom_address+1 - return ; Done. - -;============================================================================= -; Will decrease eeprom_address:2 with the 8Bit value "ext_ee_temp1" and takes -; care of bank switching at 0x8000 decf_eeprom_address macro ext_ee_temp1 movlw ext_ee_temp1 @@ -49,13 +49,14 @@ subwf eeprom_address+0,F ; decrease address: do a 16-8bits substract. movlw d'0' subwfb eeprom_address+1,F - - btfss eeprom_address+1,7 ; at address 8000? - return ; No, done. - - movlw b'01111111' ; yes, reset highbyte - movwf eeprom_address+1 - return ; Done. + return +; +; btfss eeprom_address+1,7 ; at address 8000? +; return ; No, done. +; +; movlw b'01111111' ; yes, reset highbyte +; movwf eeprom_address+1 +; return ; Done. ;============================================================================= @@ -72,15 +73,14 @@ addwf eeprom_address+0,F movlw d'0' addwfc eeprom_address+1,F - bcf eeprom_overflow - btfss eeprom_address+1,7 ; at address 8000? - return ; no, return - - clrf eeprom_address+0 ; Clear eeprom address - clrf eeprom_address+1 - bsf eeprom_overflow ; and set overflow bit return - +; btfss eeprom_address+1,7 ; at address 8000? +; return ; no, return +; +; clrf eeprom_address+0 ; Clear eeprom address +; clrf eeprom_address+1 +; return +; write_external_eeprom_block: ; Writes a block of 64Byte (one page in external EEPROM without stop condition #ifdef TESTING ; When Simulating with MPLabSIM, there is no way to emulate external EEPROM... @@ -96,20 +96,21 @@ movlw d'0' ; increase address incf eeprom_address+0,F addwfc eeprom_address+1,F - bcf eeprom_overflow - - btfss eeprom_address+1,7 ; at address 8000 - return ; no, return - - clrf eeprom_address+0 ; Clear eeprom address - clrf eeprom_address+1 - bsf eeprom_overflow ; and set overflow bit return + +; btfss eeprom_address+1,7 ; at address 8000 +; return ; no, return +; +; clrf eeprom_address+0 ; Clear eeprom address +; clrf eeprom_address+1 +; return I2CWRITE_BLOCK: movwf ext_ee_temp1 ; Data byte in WREG bsf SSPCON2,SEN ; Start condition rcall WaitMSSP - movlw b'10100110' ; Bit0=0: WRITE, Bit0=1: READ + movlw b'10101110' ; Bit0=0: WRITE, Bit0=1: READ, BLOCK2 + btfss eeprom_address+1,7 ; Access Block2? + movlw b'10100110' ; No, -> Bit0=0: WRITE, Bit0=1: READ, BLOCK1 movwf SSPBUF ; control byte rcall WaitMSSP rcall I2C_WaitforACK @@ -145,7 +146,9 @@ rcall WaitMSSP bsf SSPCON2,SEN ; Start condition rcall WaitMSSP - movlw b'10100110' ; Bit0=0: WRITE, Bit0=1: READ + movlw b'10101110' ; Bit0=0: WRITE, Bit0=1: READ, BLOCK2 + btfss ext_ee_temp2,7 ; Access Block2? + movlw b'10100110' ; No, -> Bit0=0: WRITE, Bit0=1: READ, BLOCK1 movwf SSPBUF ; control byte rcall WaitMSSP btfsc SSPCON2,ACKSTAT @@ -160,8 +163,10 @@ bsf SSPCON2,RSEN ; Start condition rcall WaitMSSP - movlw b'10100111' ; Bit0=0: WRITE, Bit0=1: READ - movwf SSPBUF ; control byte + movlw b'10101111' ; Bit0=0: WRITE, Bit0=1: READ, BLOCK2 + btfss ext_ee_temp2,7 ; Access Block2? + movlw b'10100111' ; No, -> Bit0=0: WRITE, Bit0=1: READ, BLOCK1 + movwf SSPBUF ; control byte rcall WaitMSSP rcall I2C_WaitforACK @@ -200,10 +205,16 @@ addwf ext_ee_temp1,F movlw d'0' addwfc ext_ee_temp2,F - - btfsc ext_ee_temp2,7 ; 0x8000 reached? + + movlw 0xFF + cpfseq ext_ee_temp2 ; =0xFFFF + bra get_free_EEPROM_location2d ; No + cpfseq ext_ee_temp1 ; =0xFFFF + bra get_free_EEPROM_location2d ; No + bra get_free_EEPROM_location3b ; yes - + +get_free_EEPROM_location2d: bsf SSPCON2, ACKEN ; no, send Ack rcall WaitMSSP bra get_free_EEPROM_location2 ; and continue search @@ -232,15 +243,14 @@ addwf eeprom_address+0,F movlw d'0' addwfc eeprom_address+1,F - bcf eeprom_overflow - btfss eeprom_address+1,7 ; at 0x8000? - return ; no, return - - clrf eeprom_address+0 ; Yes, clear address - clrf eeprom_address+1 - bsf eeprom_overflow ; and set overflow bit return - +; btfss eeprom_address+1,7 ; at 0x8000? +; return ; no, return +; +; clrf eeprom_address+0 ; Yes, clear address +; clrf eeprom_address+1 +; return +; I2CREAD3: ; block read start with automatic address increase rcall I2CREAD_COMMON ; no Stop condition here @@ -261,8 +271,11 @@ rcall WaitMSSP bsf SSPCON2,SEN ; Start condition rcall WaitMSSP - movlw b'10100110' ; Bit0=0: WRITE, Bit0=1: READ - movwf SSPBUF ; control byte + + movlw b'10101110' ; Bit0=0: WRITE, Bit0=1: READ, BLOCK2 + btfss eeprom_address+1,7 ; Access Block2? + movlw b'10100110' ; No, -> Bit0=0: WRITE, Bit0=1: READ, BLOCK1 + movwf SSPBUF ; control byte rcall WaitMSSP btfsc SSPCON2,ACKSTAT bra I2CREAD ; EEPROM NOT acknowledged, retry! @@ -275,8 +288,11 @@ bsf SSPCON2,RSEN ; Start condition rcall WaitMSSP - movlw b'10100111' ; Bit0=0: WRITE, Bit0=1: READ - movwf SSPBUF ; control byte + + movlw b'10101111' ; Bit0=0: WRITE, Bit0=1: READ, BLOCK2 + btfss eeprom_address+1,7 ; Access Block2? + movlw b'10100111' ; No, -> Bit0=0: WRITE, Bit0=1: READ, BLOCK1 + movwf SSPBUF ; control byte rcall WaitMSSP rcall I2C_WaitforACK @@ -290,8 +306,10 @@ movwf ext_ee_temp1 ; Data byte bsf SSPCON2,SEN ; Start condition rcall WaitMSSP - movlw b'10100110' ; Bit0=0: WRITE, Bit0=1: READ - movwf SSPBUF ; control byte + movlw b'10101110' ; Bit0=0: WRITE, Bit0=1: READ, BLOCK2 + btfss eeprom_address+1,7 ; Access Block2? + movlw b'10100110' ; No, -> Bit0=0: WRITE, Bit0=1: READ, BLOCK1 + movwf SSPBUF ; control byte rcall WaitMSSP rcall I2C_WaitforACK movff eeprom_address+1,SSPBUF ; High Address byte diff -r 93c0cb14b0d2 -r 0e0cf4701c17 code_part1/OSTC_code_asm_part1/interface.asm --- a/code_part1/OSTC_code_asm_part1/interface.asm Fri Jun 10 01:14:38 2011 +0200 +++ b/code_part1/OSTC_code_asm_part1/interface.asm Thu Jun 23 01:37:59 2011 +0200 @@ -142,11 +142,16 @@ DISPLAYTEXT .16 ; "Start" call get_free_EEPROM_location ; + movlw d'1' ; increase addwf eeprom_address+0,F movlw d'0' addwfc eeprom_address+1,F +;For debug only +;clrf eeprom_address+0,F +;clrf eeprom_address+1,F + DISPLAYTEXT .17 ; "Data" rcall send_internal_eeprom1 ; sends complete 1st. page of internal EEPROM @@ -167,14 +172,16 @@ DISPLAYTEXT .18 ; "Header" - clrf uart1_temp ; low address counter - clrf uart2_temp ; high address counter + setf uart1_temp ; low address counter + setf uart2_temp ; high address counter menu_interface3: bsf SSPCON2,SEN ; Start condition call WaitMSSP - movlw b'10100110' ; Bit0=0: WRITE, Bit0=1: READ + movlw b'10101110' ; Bit0=0: WRITE, Bit0=1: READ, BLOCK2 + btfss eeprom_address+1,7 ; Access Block2? + movlw b'10100110' ; No, -> Bit0=0: WRITE, Bit0=1: READ, BLOCK1 movwf SSPBUF ; control byte call WaitMSSP btfsc SSPCON2,ACKSTAT @@ -189,7 +196,10 @@ bsf SSPCON2,RSEN ; Start condition call WaitMSSP - movlw b'10100111' ; Bit0=0: WRITE, Bit0=1: READ + movlw b'10101111' ; Bit0=0: WRITE, Bit0=1: READ, BLOCK2 + btfss eeprom_address+1,7 ; Access Block2? + movlw b'10100111' ; No, -> Bit0=0: WRITE, Bit0=1: READ, BLOCK1 + movwf SSPBUF ; control byte call WaitMSSP call I2C_WaitforACK @@ -199,27 +209,21 @@ menu_interface2: call rs232_wait_tx ; wait for UART - bsf SSPCON2, RCEN ; Enable recieve mode - call WaitMSSP - - movff SSPBUF, TXREG - movlw d'1' addwf uart1_temp,F movlw d'0' addwfc uart2_temp,F - btfsc uart2_temp,7 ; 32KB done? - bra menu_interface4 ; Yes - - bsf SSPCON2, ACKEN ; Ack - call WaitMSSP - bra menu_interface2 ; go on +; Slow but safe... + call I2CREAD2 ; same as I2CREAD but with automatic address increase + movff SSPBUF, TXREG -menu_interface4: - bsf SSPCON2, PEN ; Stop - call WaitMSSP - + movlw 0xFF + cpfseq uart2_temp ;=0xFFFF? + bra menu_interface2 ; No, continue + cpfseq uart1_temp ;=0xFFFF? + bra menu_interface2 ; No, continue + DISPLAYTEXT .20 ; Done. WAITMS d'250' diff -r 93c0cb14b0d2 -r 0e0cf4701c17 code_part1/OSTC_code_asm_part1/isr.asm --- a/code_part1/OSTC_code_asm_part1/isr.asm Fri Jun 10 01:14:38 2011 +0200 +++ b/code_part1/OSTC_code_asm_part1/isr.asm Thu Jun 23 01:37:59 2011 +0200 @@ -176,17 +176,21 @@ ; timer1int: - bcf PIR1,TMR1IF ; Clear flag - timer1int_debug: bcf LED_red ; LEDr off (For charge indicator) + btfsc TMR1L,0 ; Wait for low clock cycle + bra $-2 + btfss TMR1L,0 ; Still high? + bra $-2 ; max. loop time: 61µs + movlw 0x08 ; Timer1 int after 62.5ms (=16/second) cpfslt TMR1H ; Did we miss a 1/16 second? incf timer1int_counter1,F ; Yes, add extra 1/16 second movlw 0x08 ; Timer1 int after 62.5ms (=16/second) subwf TMR1H,F + bcf PIR1,TMR1IF ; Clear flag incf timer1int_counter1,F ; Increase timer1 counter @@ -343,12 +347,17 @@ ; Increase re-setable average depth divetime counter incf average_divesecs+0,F ; increase stopwatch registers btfsc STATUS,Z - incf average_divesecs+1,F ; increase stopwatch registers - + incf average_divesecs+1,F ; increase stopwatch registers +; Increase total divetime (Regardless of CF01) + incf total_divetime_seconds+0,F ; increase stopwatch registers + btfsc STATUS,Z + incf total_divetime_seconds+1,F ; increase stopwatch registers + btfss divemode2 ; displayed divetime is running? bra RTCisr2 ; No (e.g. too shallow) - incf divesecs,F ; increase divetime registers +; increase divetime registers (Displayed dive time) + incf divesecs,F movlw d'59' cpfsgt divesecs bra RTCisr1a diff -r 93c0cb14b0d2 -r 0e0cf4701c17 code_part1/OSTC_code_asm_part1/menu_battery.asm --- a/code_part1/OSTC_code_asm_part1/menu_battery.asm Fri Jun 10 01:14:38 2011 +0200 +++ b/code_part1/OSTC_code_asm_part1/menu_battery.asm Thu Jun 23 01:37:59 2011 +0200 @@ -96,6 +96,7 @@ movff EEDATA,lo read_int_eeprom d'55' ; TEMP_min HIGH movff EEDATA,hi + call PLED_convert_signed_temperature ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required movlw d'3' movwf ignore_digits bsf leftbind ; left orientated output @@ -118,6 +119,7 @@ movff EEDATA,lo read_int_eeprom d'60' ; TEMP_max HIGH movff EEDATA,hi + call PLED_convert_signed_temperature ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required movlw d'3' movwf ignore_digits bsf leftbind ; left orientated output diff -r 93c0cb14b0d2 -r 0e0cf4701c17 code_part1/OSTC_code_asm_part1/menu_gassetup.asm --- a/code_part1/OSTC_code_asm_part1/menu_gassetup.asm Fri Jun 10 01:14:38 2011 +0200 +++ b/code_part1/OSTC_code_asm_part1/menu_gassetup.asm Thu Jun 23 01:37:59 2011 +0200 @@ -653,13 +653,14 @@ OUTPUTTEXT .96 ; Yes bsf second_FA ; Is first gas - movf decodata+0,W ; read current value - addlw d'28' ; offset in memory - movwf EEADR - call read_eeprom ; Low-value - clrf EEDATA ; Set change depth to zero - call write_eeprom ; save result in EEPROM - +; Do not reset change depth (Kind request from Pascal)! +; movf decodata+0,W ; read current value +; addlw d'28' ; offset in memory +; movwf EEADR +; call read_eeprom ; Low-value +; clrf EEDATA ; Set change depth to zero +; call write_eeprom ; save result in EEPROM +; bra menu_firstgas1 menu_firstgas0: @@ -902,10 +903,13 @@ cpfslt lo movwf lo ; limit to 99m + btfsc second_FA ; Is first gas? + clrf lo ; Yes, set to 0m + movf decodata+0,W ; read current value addlw d'28' ; offset in memory movwf EEADR - call read_eeprom ; Low-value +; call read_eeprom ; Low-value movff lo,EEDATA ; write result call write_eeprom ; save result in EEPROM diff -r 93c0cb14b0d2 -r 0e0cf4701c17 code_part1/OSTC_code_asm_part1/menu_logbook.asm --- a/code_part1/OSTC_code_asm_part1/menu_logbook.asm Fri Jun 10 01:14:38 2011 +0200 +++ b/code_part1/OSTC_code_asm_part1/menu_logbook.asm Thu Jun 23 01:37:59 2011 +0200 @@ -71,14 +71,27 @@ ;---- fast loop: check every other byte ---------------------------------- menu_logbook2: - infsnz divemins+0,F ; increase 16Bit value - incf divemins+1,F - infsnz divemins+0,F ; increase 16Bit value, twice - incf divemins+1,F + movlw d'2' + addwf divemins+0,F + movlw d'0' + addwfc divemins+1,F ; increase 16Bit value, twice - btfsc divemins+1,7 ; At 0x8000? + movlw 0xFF + cpfseq divemins+1 ; =0xFFFF ? + bra menu_logbook2a ; No + cpfseq divemins+0 ; =0xFFFF ? + bra menu_logbook2a ; No bra menu_logbook_reset ; yes, restart (if not empty) +menu_logbook2a: + movlw 0x00 + cpfseq divemins+1 ; =0x0000 ? + bra menu_logbook2b ; No + cpfseq divemins+0 ; =0x0000 ? + bra menu_logbook2b ; No + bra menu_logbook_reset ; yes, restart (if not empty) + +menu_logbook2b: decf_eeprom_address d'2' ; -2 to eeprom address. call I2CREAD ; reads one byte (Slow! Better use Blockread!) @@ -124,6 +137,7 @@ bra menu_logbook3b ; No, Nothing to do bsf all_dives_shown ; Yes + bsf logbook_page_not_empty bra menu_logbook_display_loop2 ; rcall of get_free_eeprom_location not required here (faster) @@ -253,6 +267,9 @@ display_profile2: bcf logbook_profile_view ; clear flag for search routine + clrf average_divesecs+0 + clrf average_divesecs+1 ; holds amount of read samples + call PLED_display_wait_clear call PLED_standard_color WIN_TOP .0 @@ -313,6 +330,7 @@ call PLED_convert_date ; converts into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2 PUTC ' ' + PUTC 0x94 ; "End of dive" icon call I2CREAD2 ; hour movff SSPBUF,lo output_99x @@ -371,43 +389,51 @@ call mult16x16 ; result is in xC:2 ! bsf leftbind + PUTC 0x95 ; "duration o dive" icon output_16 ; divetime minutes -; Compute spacing between 10min lines - movff lo,xA+0 - movff hi,xA+1 ; divetime in minutes - movlw d'10' - movwf xB+0 - clrf xB+1 ; A vertical line every 10 minutes - call div16x16 ;xA/xB=xC with xA as remainder - ; xC now holds number of lines - movlw d'1' - addwf xC+0 ; Add one line... - movff xC+0,xB+0 - clrf xB+1 ; No more then 255 lines... - movlw d'159' ; Available width + movlw LOW d'600' movwf xA+0 - clrf xA+1 - call div16x16 ;xA/xB=xC with xA as remainder - ; xC now holds spacing between vertical 10min lines - movff xC+0,avr_rel_pressure+0 - movff xC+1,avr_rel_pressure+1 ; spacing between 10min lines (1-159) + movlw HIGH d'600' + movwf xA+1 ; A vertical line every 600 seconds + movff samplesecs_value,xB+0 ; Copy sampling rate + clrf xB+1 + call div16x16 ; xA/xB=xC with xA as remainder + movff xC+0,average_depth_hold_total+0 + movff xC+1,average_depth_hold_total+1 + ;average_depth_hold_total:2 holds interval of samples for vertical 10min line ; Restore divetime in minutes: + btfss logbook_format_0x21 ; Dive made with new 0x21 format? + bra display_profile_old_xscale ; No +; Yes, get real sample time + incf_eeprom_address d'35' ; Skip Bytes in EEPROM + call I2CREAD2 ; Total sample time in seconds + movff SSPBUF,xC+0 + call I2CREAD2 ; Total sample time in seconds + movff SSPBUF,xC+1 + decf_eeprom_address d'37' ; Macro, that subtracts 8Bit from eeprom_address:2 + PUTC ':' + call I2CREAD2 ; read divetime seconds + movff SSPBUF,lo + bra display_profile_xscale ; continue below + +display_profile_old_xscale: movff lo,xA+0 ; calculate x-scale for profile display movff hi,xA+1 ; calculate total diveseconds first movlw d'60' ; 60seconds are one minute... movwf xB+0 clrf xB+1 call mult16x16 ; result is in xC:2 ! - - PUTC d'39' ;"'" + PUTC ':' call I2CREAD2 ; read divetime seconds movff SSPBUF,lo movf lo,W ; add seconds to total seconds addwf xC+0 movlw d'0' addwfc xC+1 ; xC:2 now holds total dive seconds! + +display_profile_xscale: movff xC+0,xA+0 ; now calculate x-scale value movff xC+1,xA+1 movlw d'154' ; 154pix width available @@ -429,15 +455,16 @@ bsf leftbind output_99x ; divetime seconds - STRCAT "\" " + PUTC ' ' call I2CREAD2 movff SSPBUF,lo call I2CREAD2 - movff SSPBUF,hi + movff SSPBUF,hi ; Read min. Temperature + call PLED_convert_signed_temperature ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required movlw d'3' movwf ignore_digits bsf leftbind - output_16dp d'2' ; temperature + output_16dp d'2' ; temperature STRCAT_PRINT "°C" ; Display 2nd row of details WIN_TOP .50 @@ -449,9 +476,6 @@ call I2CREAD2 ; read Air pressure movff SSPBUF,hi -; movff lo,average_depth_hold+2 -; movff hi,average_depth_hold+3 ; Store here for correct average - bsf leftbind output_16 ; Air pressure before dive STRCAT "mbar " @@ -480,6 +504,7 @@ incf_eeprom_address d'12' ; Skip 12 Bytes in EEPROM (faster) (Gaslist) call I2CREAD2 ; Read start gas (1-5) movff SSPBUF,active_gas ; Store + movff active_gas,average_depth_hold_total+3 ; keep copy to restore color incf_eeprom_address d'5' ; Skip 5 Bytes in EEPROM (faster) (Battery, firmware) call I2CREAD2 ; Read divisor @@ -498,26 +523,22 @@ bcf divisor_deco,7 movff divisor_deco,logbook_temp2 ; Store as temp, too call I2CREAD2 ; Read divisor - movff SSPBUF,divisor_tank ; Store divisor + movff SSPBUF,divisor_gf ; Store divisor call I2CREAD2 ; Read divisor movff SSPBUF,divisor_ppo2 ; Store divisor call I2CREAD2 ; Read divisor movff SSPBUF,divisor_deco_debug ; Store divisor call I2CREAD2 ; Read divisor - movff SSPBUF,divisor_nuy2 ; Store divisor + movff SSPBUF,divisor_cns ; Store divisor incf_eeprom_address d'2' ; Skip 2Bytes in EEPROM (faster) ; 2 bytes salinity, GF + btfss logbook_format_0x21 ; 10byte extra? + bra display_profile2d ; No + incf_eeprom_address d'10' ; Skip another 10 byte from the header for 0x21 format + ; Average Depth, spare bytes display_profile2d: ; Start Profile display - -; clrf average_divesecs+0 -; clrf average_divesecs+1 ; Counts x-pixels for average -; clrf average_depth_hold_total+0 -; clrf average_depth_hold_total+1 -; clrf average_depth_hold_total+2 -; clrf average_depth_hold_total+3 ; Track average depth here... -; ; Write 0m X-Line.. movlw color_grey call PLED_set_color ; Make this configurable? @@ -556,20 +577,9 @@ movff WREG,win_height movlw d'1' movff WREG,win_width ; "Window" Width -display_profile2f: call PLED_box ; Inputs: win_top, win_leftx2, win_height, win_width, win_color1, win_color2 - movff win_leftx2,WREG ; Get column - addwf avr_rel_pressure+0,W ; Add column interval distance to win_leftx2 - tstfsz avr_rel_pressure+1 ; >255? - movlw d'255' ; Yes, make win_leftx2>159 -> Abort here - btfsc STATUS,C ; A Cary from the addwf above? - movlw d'255' ; Yes, make win_leftx2>159 -> Abort here - movff WREG,win_leftx2 ; Result in win_leftx2 again - movff win_leftx2,lo ; Get win_leftx2 in Bank1... - movlw d'159' ; Limit - cpfsgt lo ; >159? - bra display_profile2f ; No, draw another line +; Draw frame around profile movlw color_blue WIN_FRAME_COLOR .75, .239, .4, .159 ;top, bottom, left, right with color in WREG @@ -866,6 +876,8 @@ btfss logbook_format_0x21 bra skip_new_format_0x21_info ; Do not show remaining info from dive +; Show all new 0x21 data +; Show average depth WIN_TOP .50 call I2CREAD2 ; Read average depth movff SSPBUF,lo @@ -875,8 +887,64 @@ output_16dp d'3' ; Average depth STRCAT_PRINT "m" -; WIN_TOP .0 -; WIN_LEFT .75 + incf_eeprom_address d'4' ; Skip total dive time and GF factors + call I2CREAD ; Read deco modell + decf_eeprom_address d'2' ; back to GF factos + + WIN_TOP .0 + WIN_LEFT .75 + + movff SSPBUF,lo + movlw d'3' + cpfsgt lo + bra logbook_show_sat + +; Show GF settings + call I2CREAD2 ; Read GF_lo + movff SSPBUF,hi + call I2CREAD2 ; Read GF_hi + movff SSPBUF,lo + STRCPY "GF:" + output_8 ; GF_hi + PUTC '/' + movff hi,lo ; copy GF_lo + output_8 ; GF_lo + call word_processor + bra logbook_deco_model ; Skip Sat + +logbook_show_sat: + call I2CREAD2 ; Read Saturation x + movff SSPBUF,hi + call I2CREAD2 ; Read Desaturation x + movff SSPBUF,lo + STRCPY "Sat:" + output_8 ; Sat x + STRCAT "%/" + movff hi,lo ; copy Desat x + output_8 ; Desat x + STRCAT_PRINT "%" + +logbook_deco_model: +; Show deco model + WIN_TOP .25 + call I2CREAD2 ; Read deco modell + movff SSPBUF,lo + lfsr FSR2,letter + incf lo,F ; +1 + dcfsnz lo,F ; ZH-L16 OC? + movlw d'101' ; Textnumber + dcfsnz lo,F ; Gauge? + movlw d'102' ; Textnumber + dcfsnz lo,F ; ZH-L16 CC? + movlw d'104' ; Textnumber + dcfsnz lo,F ; Apnoe? + movlw d'138' ; Textnumber + dcfsnz lo,F ; L16-GF OC? + movlw d'152' ; Textnumber + dcfsnz lo,F ; L16-GF CC? + movlw d'236' ; Textnumber + call displaytext0_low ; Outputs to POSTINC2 + call word_processor skip_new_format_0x21_info: bcf menubit2 @@ -939,7 +1007,48 @@ bra profile_display_fill_up2 return ; apnoe_mins and xC+0 are untouched -profile_view_get_depth: +profile_view_get_depth: + incf average_divesecs+0,F + movlw d'0' + addwfc average_divesecs+1,F ; Count read pixels + + movf average_divesecs+0,W + cpfseq average_depth_hold_total+0 + bra profile_view_get_depth_no_line ; no need to draw a 10min line, continue + movf average_divesecs+1,W + cpfseq average_depth_hold_total+1 + bra profile_view_get_depth_no_line ; no need to draw a 10min line, continue +; draw a new 10min line here... + clrf average_divesecs+0 + clrf average_divesecs+1 ; clear counting registers for next line + + movlw color_grey + call PLED_set_color ; Make this configurable? + movlw d'76' + movff WREG,win_top + incf timeout_counter3,W ; draw one line to right to make sure it's the background of the profile + movff WREG,win_leftx2 ; Left border (0-159) + movlw d'163' + movff WREG,win_height + movlw d'1' + movff WREG,win_width ; "Window" Width + call PLED_box ; Inputs: win_top, win_leftx2, win_height, win_width, win_color1, win_color2 + +; Now restore current profile color + movff average_depth_hold_total+3,active_gas ; restore color + dcfsnz active_gas,F + movlw color_white ; Color for Gas 1 + dcfsnz active_gas,F + movlw color_green ; Color for Gas 2 + dcfsnz active_gas,F + movlw color_red ; Color for Gas 3 + dcfsnz active_gas,F + movlw color_yellow ; Color for Gas 4 + dcfsnz active_gas,F + movlw color_violet ; Color for Gas 5 + call PLED_set_color ; Set Color... + +profile_view_get_depth_no_line: call I2CREAD2 ; read first depth movff SSPBUF,lo ; low value call I2CREAD2 ; read first depth @@ -962,18 +1071,6 @@ return profile_view_get_depth_new1: -; incf average_divesecs+0,F -; movlw d'0' -; addwfc average_divesecs+1,F ; counter for average depth -; ; add depth to average registers -; movf lo,W -; addwf average_depth_hold_total+0,F -; movf hi,W -; addwfc average_depth_hold_total+1,F -; movlw d'0' -; addwfc average_depth_hold_total+2,F -; addwfc average_depth_hold_total+3,F ; Will work up to 9999mBar*60*60*24=863913600mBar -; btfsc event_occured ; Was there an event attached to this sample? rcall profile_view_get_depth_new2 ; Yes, get information about this event @@ -999,6 +1096,7 @@ ; Stored Gas changed! call I2CREAD2 ; Read Gas# movff SSPBUF,active_gas ; store gas# + movff active_gas,average_depth_hold_total+3 ; keep copy to restore color after drawing 10min line decf timeout_counter2,F ; reduce counter dcfsnz active_gas,F movlw color_white ; Color for Gas 1 @@ -1018,7 +1116,6 @@ call PLED_set_color ; Set Color... return ;(The two bytes indicating the manual gas change will be ignored in the standard "ignore loop" above...) - ;Keep comments for future temperature graph ; call I2CREAD2 ; ignore byte ; decfsz timeout_counter2,F ; reduce counter @@ -1128,6 +1225,11 @@ cpfsgt lo ; Skip if lo>13 bra display_listdive2 ; use old (Pre 0x20) format + bsf logbook_format_0x21 ; Set flag for new 0x21 Format + movlw 0x21 + cpfseq lo ; Skip if 0x21 + bcf logbook_format_0x21 ; Clear flag for new 0x21 Format + call I2CREAD4 ; Skip Profile version (Block read) movff SSPBUF,lo ; in new format, read month @@ -1161,4 +1263,141 @@ output_16 ; Divetime minutes STRCAT_PRINT "'" ; Display header-row in list incf_eeprom_address d'37' ; 12 Bytes read from header, skip 37 Bytes in EEPROM (Remaining Header) + btfss logbook_format_0x21 ; 10byte extra? + return ; No, Done. + incf_eeprom_address d'10' ; Skip another 10 byte from the header for 0x21 format return + +logbook_convert_64k: ; Converts <1.91 logbook (32kB) to 64kB variant + call PLED_boot + call PLED_ClearScreen ; Clear screen + movlw color_red + call PLED_set_color ; Set to Red + DISPLAYTEXTH d'303' ; Please wait! + clrf EEADR + movlw d'1' + movwf EEADRH + movlw 0xAA + movwf EEDATA + call write_eeprom ; write 0xAA to indicate the logbook is already converted + clrf EEADRH ; Restore EEADRH +; convert logbook: +; Step 1: Copy 32k from 0xFE + 1 with bank switching to bank1 +; Step 2: Copy 32k from bank1 to bank0 +; Step 3: delete bank1 + call get_free_EEPROM_location ; Searches 0xFD, 0xFD, 0xFE and sets Pointer to 0xFE + rcall incf_eeprom_bank0 ; eeprom_address:2 now at 0xFE+1 +; Do Step 1: + ;logbook_temp5 and logbook_temp6 hold address in bank1 + ;logbook_temp1 and logbook_temp2 hold address in bank0 + movlw HIGH 0x8000 + movwf logbook_temp6 + movlw LOW 0x8000 + movwf logbook_temp5 ; load address for bank1 + movff eeprom_address+0,logbook_temp1 + movff eeprom_address+1,logbook_temp2 ; load address for bank0 + movlw 0x80 + movwf uart2_temp +logbook_convert2: + clrf uart1_temp ; counter for copy operation +logbook_convert3: + ; read source + movff logbook_temp1,eeprom_address+0 + movff logbook_temp2,eeprom_address+1 + call I2CREAD + movff SSPBUF,lo ; hold read value + rcall incf_eeprom_bank0 ; eeprom_address:2 +1 with bank switching + movff eeprom_address+0,logbook_temp1 + movff eeprom_address+1,logbook_temp2 ; write source address + ; write target + movff logbook_temp5,eeprom_address+0 + movff logbook_temp6,eeprom_address+1 + movf lo,W + call I2CWRITE ; writes WREG into EEPROM@eeprom_address + movlw d'1' + addwf logbook_temp5,F + movlw d'0' + addwfc logbook_temp6,F ; increase target address + decfsz uart1_temp,F + bra logbook_convert3 + btg LED_blue + decfsz uart2_temp,F ; 32kByte done? + bra logbook_convert2 ; No, continue +; Step 1 done. + bcf LED_blue +; Do Step 2: + movlw HIGH 0x0000 + movwf logbook_temp6 + movlw LOW 0x0000 + movwf logbook_temp5 ; load address for bank0 + movlw HIGH 0x8000 + movwf logbook_temp2 + movlw LOW 0x8000 + movwf logbook_temp1 ; load address for bank1 + movlw 0x80 + movwf uart2_temp +logbook_convert4: + clrf uart1_temp ; counter for copy operation +logbook_convert5: + ; read source + movff logbook_temp1,eeprom_address+0 + movff logbook_temp2,eeprom_address+1 + call I2CREAD + movff SSPBUF,lo ; hold read value + incf_eeprom_address d'1' + movff eeprom_address+0,logbook_temp1 + movff eeprom_address+1,logbook_temp2 ; write source address + ; write target + movff logbook_temp5,eeprom_address+0 + movff logbook_temp6,eeprom_address+1 + movf lo,W + call I2CWRITE ; writes WREG into EEPROM@eeprom_address + incf_eeprom_address d'1' + movff eeprom_address+0,logbook_temp5 + movff eeprom_address+1,logbook_temp6 ; write target address + decfsz uart1_temp,F + bra logbook_convert5 + btg LED_red + decfsz uart2_temp,F ; 32kByte done? + bra logbook_convert4 ; No, continue +; Step 2 done. + bcf LED_red +; Do Step 3: + movlw HIGH 0x8000 + movwf logbook_temp2 + movlw LOW 0x8000 + movwf logbook_temp1 ; load address for bank1 + movlw 0x80 + movwf uart2_temp +logbook_convert6: + clrf uart1_temp ; counter for copy operation +logbook_convert7: + ; write target + movff logbook_temp1,eeprom_address+0 + movff logbook_temp2,eeprom_address+1 + movlw 0xFF + call I2CWRITE ; writes WREG into EEPROM@eeprom_address + incf_eeprom_address d'1' + movff eeprom_address+0,logbook_temp1 + movff eeprom_address+1,logbook_temp2 ; write target address + decfsz uart1_temp,F + bra logbook_convert7 + btg LED_red + btg LED_blue + decfsz uart2_temp,F ; 32kByte done? + bra logbook_convert6 ; No, continue +; Step 3 done. + bcf LED_red + bcf LED_blue + return + +incf_eeprom_bank0: + movlw d'1' ; increase address + addwf eeprom_address+0,F + movlw d'0' + addwfc eeprom_address+1,F + btfss eeprom_address+1,7 ; at address 8000? + return ; no, skip + clrf eeprom_address+0 ; Clear eeprom address + clrf eeprom_address+1 + return \ No newline at end of file diff -r 93c0cb14b0d2 -r 0e0cf4701c17 code_part1/OSTC_code_asm_part1/menu_reset.asm --- a/code_part1/OSTC_code_asm_part1/menu_reset.asm Fri Jun 10 01:14:38 2011 +0200 +++ b/code_part1/OSTC_code_asm_part1/menu_reset.asm Thu Jun 23 01:37:59 2011 +0200 @@ -110,7 +110,7 @@ ; DEFAULT MIN MAX CF_DEFAULT CF_CENTI, d'100', d'50', d'250' ; dive_threshold 100cm CF_DEFAULT CF_CENTI, d'30', d'10', d'100' ; surf_threshold 30cm - CF_DEFAULT CF_SEC, d'240', d'30', d'240' ; diveloop_timeout 240s + CF_DEFAULT CF_INT15, d'240', d'0', d'600' ; diveloop_timeout 240s CF_DEFAULT CF_SEC, d'120', d'30', d'240' ; surfloop_timeout 120s CF_DEFAULT CF_SEC, d'5', d'1', d'30' ; premenu_timeout 5s @@ -135,11 +135,11 @@ CF_DEFAULT CF_INT8, d'10', d'1', d'120' ; sampling_rate 10s CF_DEFAULT CF_INT8, d'6', d'0', d'15' ; sampling_divisor_temp /6 CF_DEFAULT CF_INT8, d'6', d'0', d'15' ; sampling_divisor_deco /6 - CF_DEFAULT CF_INT8, d'0', d'0', d'15' ; sampling_divisor_tank never + CF_DEFAULT CF_INT8, d'6', d'0', d'15' ; sampling_divisor_gf /6 CF_DEFAULT CF_INT8, d'0', d'0', d'15' ; sampling_divisor_ppo2 never CF_DEFAULT CF_INT8, d'0', d'0', d'15' ; sampling_divisor_deco2 never - CF_DEFAULT CF_INT8, d'0', d'0', d'15' ; sampling_divisor_nyu2 never + CF_DEFAULT CF_INT8, d'12', d'0', d'15' ; sampling_divisor_cns /12 CF_DEFAULT CF_PERCENT, d'20', d'5', d'75' ; cns_display_high 20% CF_DEFAULT CF_INT15, d'0', d'0', 0 ; logbook_offset No Offset, but 15Bit value CF_DEFAULT CF_INT8, d'3', d'2', d'6' ; last_deco_depth 3m @@ -169,7 +169,7 @@ CF_DEFAULT CF_CENTI, d'161', d'100', d'161' ; color_warn_ppo2_cbar ppO2 warn CF_DEFAULT CF_INT8, d'15', d'7', d'20' ; color_warn_celocity_mmin warn at xx m/min - CF_DEFAULT CF_SEC+CF_NEG,d'42', -d'120',d'120' ; time_correction_value_default Adds to Seconds on Midnight + CF_DEFAULT CF_SEC+CF_NEG,d'0', -d'120' ,d'120' ; time_correction_value_default Adds to Seconds on Midnight CF_DEFAULT CF_BOOL, d'0', 0, 0 ; CF#49 Show Altimeter in surface mode CF_DEFAULT CF_BOOL, d'0', 0, 0 ; CF50 Show Log-Marker CF_DEFAULT CF_BOOL, d'1', 0, 0 ; CF51 Show Stopwatch @@ -451,18 +451,25 @@ ; Write the two bytes lo:hi into EEPROM reset_eeprom_value: incf EEADR,F - movff lo, EEDATA ; Lowbyte Defaul value - call write_eeprom + movff lo, EEDATA ; Lowbyte Default value + + movlw d'127' ; Work-around to prevent writing at EEPROM 0x00 to 0x04 + cpfslt EEADR ; EEADR > 127? + call write_eeprom ; Yes, write! incf EEADR,F movff hi, EEDATA ; Highbyte default value - goto write_eeprom + + movlw d'127' ; Work-around to prevent writing at EEPROM 0x00 to 0x04 + cpfslt EEADR ; EEADR > 127? + call write_eeprom ; Yes, write! + return reset_external_eeprom: ; deletes complete external eeprom! clrf eeprom_address+0 clrf eeprom_address+1 - movlw d'2' + movlw d'4' movwf temp3 reset_eeprom02: clrf temp4 @@ -482,7 +489,7 @@ decfsz temp4,F bra reset_eeprom01 ; do this 256 times decfsz temp3,F - bra reset_eeprom02 ; and this all 2 times -> 512 *64Bytes = 32KB + bra reset_eeprom02 ; and this all 4 times -> 1024 *64Bytes = 64KB bcf eeprom_blockwrite ; clear blockwrite flag diff -r 93c0cb14b0d2 -r 0e0cf4701c17 code_part1/OSTC_code_asm_part1/pled_outputs.asm --- a/code_part1/OSTC_code_asm_part1/pled_outputs.asm Fri Jun 10 01:14:38 2011 +0200 +++ b/code_part1/OSTC_code_asm_part1/pled_outputs.asm Thu Jun 23 01:37:59 2011 +0200 @@ -521,12 +521,12 @@ ;---- Updates interval line ---------------------------------------------- WIN_TOP .35 lfsr FSR2,letter - OUTPUTTEXTH .306 ; Interval: + OUTPUTTEXTH .307 ; Interval: movff char_I_dive_interval,lo movf lo,W bnz PLED_simulator_data_1 - OUTPUTTEXTH .307 ; Now + OUTPUTTEXTH .308 ; Now clrf POSTINC2 ; End buffer. bra PLED_simulator_data_2 @@ -865,6 +865,7 @@ WIN_TOP .177 STRCPY "temp:" SAFE_2BYTE_COPY temperature, lo + call PLED_convert_signed_temperature ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required output_16 call word_processor @@ -955,7 +956,7 @@ WIN_INVERT .1 ; Init new Wordprocessor DISPLAYTEXT .248 ; OSTC Simulator WIN_INVERT .0 ; Init new Wordprocessor - DISPLAYTEXTH .306 ; Interval: + DISPLAYTEXTH .307 ; Interval: DISPLAYTEXT .249 ; Start Dive DISPLAYTEXTH .277 ; Bottom Time: DISPLAYTEXTH .278 ; Max. Depth: @@ -975,18 +976,7 @@ movff last_temperature+1,hi movff last_temperature+0,lo lfsr FSR2,letter - - btfss hi,7 ; Negative temperature ? - bra PLED_temp_surfmode_1 ; No: continue - - PUTC '-' ; Display "-" - - comf hi ; Then, 16bit sign changes. - negf lo - btfsc STATUS,C - incf hi - -PLED_temp_surfmode_1: + call PLED_convert_signed_temperature ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required movlw d'3' movwf ignore_digits bsf leftbind ; left orientated output @@ -1011,18 +1001,7 @@ movff last_temperature+0,lo lfsr FSR2,letter - - btfss hi,7 ; Negative temperature ? - bra PLED_temp_divemode_1 ; No: continue - - PUTC '-' ; Display "-" - - comf hi ; Then, 16bit sign changes. - negf lo - btfsc STATUS,C - incf hi - -PLED_temp_divemode_1: + call PLED_convert_signed_temperature ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required movlw d'3' movwf ignore_digits bsf leftbind ; left orientated output @@ -1585,7 +1564,7 @@ movlw .039 cpfslt hi - bra depth_greater_99_84mtr + bra depth_greater_99_84mtr btfsc depth_greater_100m ; Was depth>100m during last call call PLED_clear_depth ; Yes, clear depth area @@ -1601,7 +1580,7 @@ movff lo,sub_b+0 incf sub_b+0,F movlw d'0' - addwfc sub_b+1,F ; Add 1mBar offset + addwfc sub_b+1,F ; Add 1mBar offset call sub16 ; sub_c = sub_a - sub_b btfss neg_flag ; Depth lower then 10m? rcall depth_less_10mtr ; Yes, add extra space @@ -1624,7 +1603,7 @@ bsf leftbind bsf ignore_digit4 - output_16 ; Full meters in Big font + output_16 ; Full meters in Big font bcf leftbind bra pled_depth3 @@ -1645,14 +1624,14 @@ STRCPY "." - movlw HIGH d'9' + movlw HIGH d'20' ; Display 0.0m if lower then 20cm movwf sub_a+1 - movlw LOW d'9' + movlw LOW d'20' movwf sub_a+0 movff hi,sub_b+1 movff lo,sub_b+0 call sub16 ; sub_c = sub_a - sub_b - btfss neg_flag ; Depth lower then 0.1m? + btfss neg_flag ; Depth lower then 0.3m? bra pled_depth4 ; Yes, display manual Zero movlw d'4' @@ -1907,6 +1886,17 @@ movwf wait_temp bra update_batt_voltage2a +PLED_convert_signed_temperature: + btfss hi,7 ; Negative temperature ? + return ; No, return +; Yes, negative temperature! + PUTC '-' ; Display "-" + comf hi ; Then, 16bit sign changes. + negf lo + btfsc STATUS,C + incf hi + return ; and return + PLED_convert_date: ; converts into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2 read_int_eeprom d'91' ; Read date format (0=MMDDYY, 1=DDMMYY, 2=YYMMDD) tstfsz EEDATA @@ -2232,6 +2222,57 @@ STRCAT_PRINT "m" return +PLED_stopwatch_show_gauge: + btfsc menubit ; Divemode menu active? + return ; Yes, return + ; BIG Stopwatch + call PLED_divemask_color ; Set Color for Divemode mask + DISPLAYTEXTH d'310' ; Stopwatch + DISPLAYTEXTH d'309' ; Average + call PLED_standard_color + ostc_debug 'V' ; Sends debug-information to screen if debugmode active + WIN_TOP .80 + WIN_LEFT .90 + WIN_FONT FT_MEDIUM + call PLED_standard_color + + lfsr FSR2,letter + movff average_divesecs+0,lo ; Stopwatch + movff average_divesecs+1,hi ; Stopwatch + movlw d'2' + subwf lo,F + movlw d'0' + subwfb hi,F ; Subtract 2 seconds + call convert_time ; converts hi:lo in seconds to mins (hi) and secs (lo) + movff lo,wait_temp + movff hi,lo + clrf hi + movlw d'0' + bcf leftbind + bsf show_last3 + output_16_3 ;Displays only 0...999 + PUTC ':' + movff wait_temp,lo + output_99x + call word_processor + + ostc_debug 'U' ; Sends debug-information to screen if debugmode active + WIN_TOP .136 + WIN_LEFT .90 + WIN_FONT FT_MEDIUM + call PLED_standard_color + lfsr FSR2,letter + movff avr_rel_pressure+0,lo + movff avr_rel_pressure+1,hi + call adjust_depth_with_salinity ; computes salinity setting into lo:hi [mBar] + bsf ignore_digit5 ; do not display 1cm depth + output_16dp d'3' + bcf leftbind + STRCAT_PRINT "m" + WIN_FONT FT_SMALL ; Reset... + return + + PLED_total_average_show: ; Non-Resettable Average call PLED_divemask_color ; Set Color for Divemode mask @@ -2367,6 +2408,7 @@ DISPLAYTEXT .251 ; - 1m DISPLAYTEXT .252 ; +10m DISPLAYTEXT .253 ; -10m + DISPLAYTEXTH .306 ; Quit Sim return ;----------------------------------------------------------------------------- @@ -2696,7 +2738,7 @@ cpfseq hi ; All gases shown? bra PLED_gas_list_loop ; No - DISPLAYTEXT d'122' ; Gas 6.. + DISPLAYTEXT d'122' ; More return ; return (OC mode) PLED_splist_start: @@ -3097,8 +3139,7 @@ return PLED_const_ppO2_too_hi: - movlw '>' - movwf POSTINC2 ; Put ">" from WREG into buffer + PUTC '>' setf lo ; show ">2.55" clrf hi ; clear hi call PLED_warnings_color ; Set Warning color diff -r 93c0cb14b0d2 -r 0e0cf4701c17 code_part1/OSTC_code_asm_part1/simulator.asm --- a/code_part1/OSTC_code_asm_part1/simulator.asm Fri Jun 10 01:14:38 2011 +0200 +++ b/code_part1/OSTC_code_asm_part1/simulator.asm Thu Jun 23 01:37:59 2011 +0200 @@ -24,10 +24,10 @@ ; ToDo: menu_simulator: - movlw d'1' - movwf logbook_temp1 ; Bottom time + movlw d'3' + movwf logbook_temp1 ; Bottom time movlw d'15' - movwf logbook_temp2 ; Max. Depth + movwf logbook_temp2 ; Max. Depth movlw d'1' movwf menupos clrf WREG ; Interval @@ -96,7 +96,8 @@ simulator_inc_interval: movff char_I_dive_interval,PRODL - incf PRODL,F + movlw .3 + addwf PRODL,F movlw .24*6 ; Max 24h delay. cpfslt PRODL clrf PRODL @@ -153,6 +154,7 @@ ; This override is done in ISR too, but do it right now also: movff sim_pressure+0,amb_pressure+0 movff sim_pressure+1,amb_pressure+1 + call comp_air_pressure0 ; Make sure to have depth in rel_pressure:2 bcf menubit2 bcf menubit3 @@ -343,7 +345,7 @@ bsf simulatormode_active ; normal simulator mode bsf standalone_simulator ; Standalone Simulator active bsf no_sensor_int ; Disable sensor interrupt - clrf T3CON ; Restart time3 counter, + clrf T3CON ; Disable timer3 counter, clrf TMR3L ; so the simu won't stop right away. clrf TMR3H diff -r 93c0cb14b0d2 -r 0e0cf4701c17 code_part1/OSTC_code_asm_part1/sleepmode.asm --- a/code_part1/OSTC_code_asm_part1/sleepmode.asm Fri Jun 10 01:14:38 2011 +0200 +++ b/code_part1/OSTC_code_asm_part1/sleepmode.asm Thu Jun 23 01:37:59 2011 +0200 @@ -74,6 +74,8 @@ rcall pressuretest_sleep_fast ; Gets pressure without averaging (faster!) + SAFE_2BYTE_COPY amb_pressure_avg, amb_pressure ; copy for compatibility + call check_temp_extrema ; Check for temperature extremas call deco_calc_CNS_decrease_15min ; compute CNS decay in sleep only @@ -131,12 +133,12 @@ rcall pressuretest_sleep_fast ; Gets pressure without averaging (faster!) - ; compare current ambient pressure with threshold CF6==1160mbar. + ; compare current ambient pressure with threshold CF6==1160mbar. GETCUSTOM15 d'6' ; loads pressure threshold into lo,hi movff lo,sub_a+0 ; power on if ambient pressure is greater threshold movff hi,sub_a+1 - SAFE_2BYTE_COPY amb_pressure, sub_b - call sub16 ; Is (1160mbar - amb_pressure) < 0 ? + SAFE_2BYTE_COPY amb_pressure_avg, sub_b + call sub16 ; Is (1160mbar - averaged(amb_pressure)) < 0 ? bsf sleepmode btfsc neg_flag ; Wake up from Sleep? bcf sleepmode ; amb_pressure>pressure_offset_divemode: wake up! @@ -182,6 +184,8 @@ nop sleep ; Wait at least 35ms (every 16.5ms Timer1 wakeup) call get_pressure_value ; State2: Get pressure (51us) + clrf amb_pressure_avg+0 + clrf amb_pressure_avg+1 ; clear for sleep routine call calculate_compensation ; calculate temperature compensated pressure (233us) return diff -r 93c0cb14b0d2 -r 0e0cf4701c17 code_part1/OSTC_code_asm_part1/spanish_text.asm --- a/code_part1/OSTC_code_asm_part1/spanish_text.asm Fri Jun 10 01:14:38 2011 +0200 +++ b/code_part1/OSTC_code_asm_part1/spanish_text.asm Thu Jun 23 01:37:59 2011 +0200 @@ -96,7 +96,7 @@ ; 32 custom function descriptors I (FIXED LENGTH = 15 chars). TCODE .40, .35, "Buceo Inic. [m]" ;036 Start Dive [m] (depth to switch to dive mode) TCODE .40, .35, "Buceo Fin. [m]" ;037 End Dive [m] (depth to switch back to surface mode) - TCODE .40, .35, "Retras Fin[min]" ;038 End Delay [min] (duration dive screen stays after end of dive) + TCODE .40, .35, "Retras Fin[sec]" ;038 End Delay [sec] (duration dive screen stays after end of dive) TCODE .40, .35, "Apagado [min]" ;039 Power Off [min] TCODE .40, .35, "Pre-menú [min]" ;040 Pre-menu [min] (Delais to keep surface-mode menus displayed) TCODE .40, .35, "Vel. [m/min]" ;041 velocity[m/min] @@ -117,10 +117,10 @@ TCODE .40, .35, "frec. muestreo " ;056 sampling rate TCODE .40, .35, "Divisor Temp " ;057 Divisor Temp TCODE .40, .35, "Divisor Datdeco" ;058 Divisor Decodat - TCODE .40, .35, "Divisor SinUso1" ;059 Divisor NotUse1 + TCODE .40, .35, "Divisor GF " ;059 Divisor GF TCODE .40, .35, "Divisor ppO2 " ;060 Divisor ppO2 TCODE .40, .35, "Divisor Depurac" ;061 Divisor Debug - TCODE .40, .35, "Divisor SinUso2" ;062 Divisor NotUse2 + TCODE .40, .35, "Divisor CNS " ;062 Divisor CNS TCODE .40, .35, "Mues.CNSbuc.[%]" ;063 CNSshow dive[%] TCODE .40, .35, "Despl. diario " ;064 Logbook offset TCODE .40, .35, "Ult. Deco a [m]" ;065 Last Deco at[m] @@ -391,7 +391,11 @@ TCODE .50, .130, "¡Aborta!" ;304 Aborted ;@5 variant TCODE .0, .0, "Futuro TTS" ;305 Future TTS (=10 chars. Title for @5 customview). +; + TCODE .100, .125, "SalirSim" ;306 Quit Sim (=8char max. Quit Simulator mode) ;Dive interval - TCODE .20, .35, "Interval:" ;306 Interval: - TCODE .0, .0, "Now" ;307 Now + TCODE .20, .35, "Interval:" ;307 Interval: + TCODE .0, .0, "Now " ;308 Now (7 chars min) + TCODE .100, .113, "Promedio" ;309 Average + TCODE .116, .54, "Crono." ;310 Stopwatch (BIG Stopwatch in Gauge mode) ;============================================================================= diff -r 93c0cb14b0d2 -r 0e0cf4701c17 code_part1/OSTC_code_asm_part1/start.asm --- a/code_part1/OSTC_code_asm_part1/start.asm Fri Jun 10 01:14:38 2011 +0200 +++ b/code_part1/OSTC_code_asm_part1/start.asm Thu Jun 23 01:37:59 2011 +0200 @@ -26,15 +26,7 @@ movlb b'00000001' ; ram bank 1 selected movff STKPTR,temp10 clrf temp10+1 - call init - - read_int_eeprom d'92' ; Read number of CF used in this firmware - movlw 0xFF ; First start value - cpfseq EEDATA ; Compare - bra start2 ; Normal power-on/hard reset boot - bra first_start ; Reset and jump to surfmode -start2: btfsc divemode ; Reset from Divemode? call PLED_resetdebugger ; Yes! Something went wrong, show reset informations start3: @@ -67,7 +59,8 @@ call pressuretest_sleep_fast ; Gets pressure without averaging (faster!) bcf sleepmode ; Normal mode again - SAFE_2BYTE_COPY amb_pressure, last_surfpressure + SAFE_2BYTE_COPY amb_pressure_avg, last_surfpressure + SAFE_2BYTE_COPY amb_pressure_avg, amb_pressure movff last_surfpressure+0,last_surfpressure_15min+0 movff last_surfpressure+1,last_surfpressure_15min+1 movff last_surfpressure+0,last_surfpressure_30min+0 @@ -102,9 +95,9 @@ movlb b'00000001' ; select ram bank 1 ; check firmware and reset Custom Functions after an update - movlw LOW 0x101 + movlw d'1' movwf EEADR - movlw HIGH 0x101 + movlw d'1' movwf EEADRH call read_eeprom ; read current version x movff EEDATA,temp1 @@ -123,9 +116,9 @@ bra restart ; x and y are equal -> do not reset cf check_firmware_new: - movlw LOW 0x101 ; store current version in EEPROM + movlw d'1' ; store current version in EEPROM movwf EEADR - movlw HIGH 0x101 + movlw d'1' movwf EEADRH movlw softwareversion_x movwf EEDATA @@ -135,9 +128,23 @@ movwf EEDATA call write_eeprom ; write version y clrf EEADRH ; Reset EEADRH - goto reset_all_cf ; resets all custom functions bank0 and bank1 and jumps to "restart" + +; Reset CF48 + movlw d'1' + movwf EEADRH ; EEPROM Bank1 + clrf EEDATA ; =0 + write_int_eeprom d'191' + write_int_eeprom d'192' + write_int_eeprom d'193' + write_int_eeprom d'194' ; Reset Default and Current Value to zero + clrf EEADRH +; goto reset_all_cf ; resets all custom functions bank0 and bank1 and jumps to "restart" restart: + movlw b'00000011' + movwf T3CON ; Timer3 with 32768Hz clock running + clrf TMR3L + clrf TMR3H bcf LED_red bcf LED_blue ; all LEDs off GETCUSTOM8 d'48' ; time correction value @@ -184,8 +191,13 @@ bsf high_altitude_mode ; No, Set Flag! ; Should we disable sleep (hardware emulator) - movlw .0 - cpfsgt EEDATA ; >256 +restart_loop: + btfss 0xF81,0,A + bra restart_loop + btfss 0xF81,1,A + bra restart_loop + movlw 0x80 + cpfslt 0xFB3,A bsf nsm ; NO-SLEEP-MODE : for hardware debugging call gassetup_sort_gaslist ; Sorts Gaslist according to change depth @@ -224,6 +236,16 @@ cpfseq EEDATA bcf debug_mode ; clear flag if <> 1 +; Check if logbook has been converted already (Internal EEPROM 0x100=0xAA) + movlw LOW 0x100 + movwf EEADR + movlw HIGH 0x100 + movwf EEADRH + call read_eeprom ; read byte + movlw 0xAA + cpfseq EEDATA ; is 0xAA already? + call logbook_convert_64k ; No, convert now (And write 0xAA to internal EEPROM 0x100) + goto surfloop ; Jump to Surfaceloop! diff -r 93c0cb14b0d2 -r 0e0cf4701c17 code_part1/OSTC_code_c_part2/p2_deco.c --- a/code_part1/OSTC_code_c_part2/p2_deco.c Fri Jun 10 01:14:38 2011 +0200 +++ b/code_part1/OSTC_code_c_part2/p2_deco.c Thu Jun 23 01:37:59 2011 +0200 @@ -989,14 +989,17 @@ { assert( 0 <= char_I_current_gas && char_I_current_gas <= (NUM_GAS+1) ); - if( (char_I_current_gas <= NUM_GAS) // Gas6 == manual set. - && char_I_deco_gas_change[char_I_current_gas-1] - ) + if( char_I_current_gas <= NUM_GAS ) // Gas1..Gas5 { - 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 = ??? + sim_gas_last_used = char_I_current_gas; + + // Note: if current is first gas, we must find it, but not set + // last depth change to surface. + if( char_I_deco_gas_change[sim_gas_last_used-1] ) + sim_gas_last_depth = char_I_deco_gas_change[sim_gas_last_used-1]; } + else + sim_gas_last_used = 0; // Gas 6 = manual set } ////////////////////////////////////////////////////////////////////////////// @@ -1038,7 +1041,7 @@ if( switch_deco < deco_gas_change[j] ) { switch_deco = deco_gas_change[j]; - switch_last = j+1; + switch_last = j+1; // 1..5 } } } @@ -1083,7 +1086,7 @@ { assert( 0 <= sim_gas_last_used && sim_gas_last_used <= NUM_GAS ); - if( sim_gas_last_used == 0 ) + if( sim_gas_last_used == 0 ) // Gas6 = manualy set gas. { calc_N2_ratio = N2_ratio; calc_He_ratio = He_ratio; diff -r 93c0cb14b0d2 -r 0e0cf4701c17 code_part1/OSTC_code_c_part2/p2_deco.o Binary file code_part1/OSTC_code_c_part2/p2_deco.o has changed