Mercurial > public > mk2
diff code_part1/OSTC_code_asm_part1/altimeter.asm @ 170:0f7ca37b1412
Altimeter: auto reset
+ when ref not in [900..1100] mbar (checked on 8bits).
+ display only mbar (not 1/4 mbar), and +/- 1mbar.
+ added menu default to 1013(.25) mbar.
author | JeanDo |
---|---|
date | Mon, 31 Jan 2011 21:21:53 +0100 |
parents | 80de93d72a17 |
children | 53b16a746166 |
line wrap: on
line diff
--- a/code_part1/OSTC_code_asm_part1/altimeter.asm Wed Jan 26 19:19:02 2011 +0100 +++ b/code_part1/OSTC_code_asm_part1/altimeter.asm Mon Jan 31 21:21:53 2011 +0100 @@ -29,24 +29,23 @@ altimeter_calc: movlb HIGH(pressureAvg) - movlw HIGH(4*.1100) ; Is presure ref lower than 900mbar - cpfslt pressureRef+1 - bra altimeter_1 ; No: ok it is valid... + movlw HIGH(4*.900) ; Is presure ref bigger than 900mbar + cpfsgt pressureRef+1 + bra altimeter_reset ; No: Should do a reset now. movlw HIGH(4*.1100) ; Is ref pressure bigger than 1100mbar ? cpfsgt pressureRef+1 bra altimeter_1 ; No: ok it is valid... -altimeter_0: +; Reset computation. Eg. after a sleep, enables to faster restart with correct +; values... +altimeter_reset: + movlb HIGH(pressureAvg) movlw LOW(4*.1013+1) ; Init see level at 1013,25 mbar. movwf pressureRef+0 movlw HIGH(4*.1013+1) movwf pressureRef+1 -; Reset computation. Eg. after a sleep, enables to faster restart with correct -; values... -altimeter_reset: - movlb HIGH(pressureAvg) clrf pressureSum+0 ; Init averaging area clrf pressureSum+1 clrf pressureCount @@ -233,7 +232,7 @@ WIN_TOP .1 STRCPY_PRINT "Set Altimeter:" - movlw 3 ; Start menu on line 3. + movlw 2 ; Start menu on line 2. movwf menupos altimeter_menu_2: @@ -254,38 +253,19 @@ bsf leftbind output_16 - PUTC '.' - movff pressureRef+0, hi ; Decimal part is constructed - clrf WREG ; from the 2 lower bits. - btfsc hi,0 - addlw .25 - btfsc hi,1 - addlw .50 - movwf lo - output_99x - - STRCAT_PRINT "mbar " +; PUTC '.' +; movff pressureRef+0, hi ; Decimal part is constructed +; clrf WREG ; from the 2 lower bits. +; btfsc hi,0 +; addlw .25 +; btfsc hi,1 +; addlw .50 +; movwf lo +; output_99x + + STRCAT_PRINT " mbar " - WIN_TOP .65 ; Second line: - STRCPY "Alt: " - movff altitude+0, lo - movff altitude+1, hi - btfss hi,7 ; Is altitude negativ ? - bra altimeter_menu_3 ; No: just print it - - PUTC '-' ; Yes: print the minus sign - comf hi ; And do a 16bit 2-complement. - comf lo - infsnz lo - incf hi - -altimeter_menu_3: - bsf leftbind - output_16 - bcf leftbind - STRCAT_PRINT "m " - - WIN_TOP .95 ; Action enable + WIN_TOP .65 ; Action enable STRCPY "Enabled: " GETCUSTOM8 .49 btfss WREG,0 @@ -296,13 +276,34 @@ STRCAT_PRINT "OFF" alt_menu_2: + WIN_TOP .95 ; Action reset + STRCPY_PRINT "Default: 1013 mbar" WIN_TOP .125 ; Action add - STRCPY_PRINT "+0.25 mbar" + STRCPY_PRINT "+1 mbar" WIN_TOP .155 ; Action sub - STRCPY_PRINT "-0.25 mbar" + STRCPY_PRINT "-1 mbar" WIN_TOP .185 ; Action exit STRCPY_PRINT "Exit" + WIN_LEFT .85 ; Bottom right. + STRCPY "Alt: " + movff altitude+0, lo + movff altitude+1, hi + btfss hi,7 ; Is altitude negativ ? + bra altimeter_menu_3 ; No: just print it + + PUTC '-' ; Yes: print the minus sign + comf hi ; And do a 16bit 2-complement. + comf lo + infsnz lo + incf hi + +altimeter_menu_3: + bsf leftbind + output_16 + bcf leftbind + STRCAT_PRINT "m " + alt_menu_loop: call PLED_menu_cursor ; Display cursor bcf switch_left ; reset buttons state @@ -338,7 +339,7 @@ movlw .7 cpfseq menupos ; Below last line ? bra alt_menu_loop - movlw .3 ; Yes: back to line no 3. + movlw .2 ; Yes: back to line no 2. movwf menupos bra alt_menu_loop @@ -346,8 +347,10 @@ alt_menu_do_it: movf menupos,W ; test line value - addlw -3 - bz alt_menu_enable + addlw -2 + bz alt_menu_enable ; 2 --> reset + dcfsnz WREG + bra alt_menu_reset ; 3 --> +1 dcfsnz WREG bra alt_menu_plus1 ; 4 --> +1 dcfsnz WREG @@ -366,21 +369,28 @@ call write_eeprom bra altimeter_menu_2 +;---- Reset sea level pressure to reference ---------------------------------- +alt_menu_reset: + rcall altimeter_reset + movlb 1 ; Go back to normal bank1 + bra altimeter_menu_2 + ;---- Increment sea level pressure ------------------------------------------- - alt_menu_plus1: movlb HIGH(pressureRef) ; Setup our own ram bank - infsnz pressureRef+0 ; 16bit inc. - incf pressureRef+1 + movlw 4 + addwf pressureRef+0,F ; 16bit inc. + movlw 0 + addwfc pressureRef+1,F bra alt_menu_recompute ; then recompute altitude. ;---- Decrement sea level pressure ------------------------------------------- - alt_menu_minus1: movlb HIGH(pressureRef) ; Setup our own ram bank - decf pressureRef+0 ; 16bit decrement - movlw 0 - subwfb pressureRef+1 + movlw -4 + addwf pressureRef+0,F ; 16bit decrement + movlw -1 + addwfc pressureRef+1,F alt_menu_recompute: rcall compute_altitude ; Recompute altitude