'Alti-variometer by Manfred Mornhinweg, 1998. 'Continued February 1999. Flying VAR bit Sound VAR bit ReInit VAR bit Light VAR bit Atime VAR word ATsum VAR word Last1 VAR word Last2 VAR word Last3 VAR word MaxAlt VAR word Gain VAR word Offset VAR word FlyTime VAR word TOAlt VAR word Counter VAR nib Text VAR byte(5) 'Text string for formatting output TLen VAR Counter 'Reused variables! MomByte VAR Atime.LOWBYTE Ctr VAR Atime.LOWBYTE 'EEROM variables: OSL CON 0 'Offset low byte OSH CON 1 GL CON 2 'Gain low byte GH CON 3 CB CON 4 'Contrast byte 'Init: HIGH 6 ' maintain power after button 3 is released! LOW 7 ' terminate unused inputs LOW 10 LOW 11 LOW 12 LOW 13 LOW 14 LOW 15 'Audio off 'ReadEEROM cfg values READ OSL,Offset.LOWBYTE READ OSH,Offset.HIGHBYTE READ GL,Gain.LOWBYTE READ GH,Gain.HIGHBYTE Light=0 Init: ReInit=0 'LCD setup pause 500 Start: READ CB,Ctr serout 0,16416,[254,"X",254,"C",254,"F",254,"P",Ctr,"ASL=",254,"G",12,1,"ATO=",254,"G",1,2,"Var=",254,"G",10,2,"FT=00:00:00",254,"G",1,4,"Takeoff Menu Sound"] IF Light=1 THEN LightOn Sound=0 'new SEROUT 0,16416,[254,"F"] GOTO LightOff LightOn: SEROUT 0,16416,[254,"B",0] LightOff: Main: ATsum=0 for Counter=1 to 6 'was 8 input 9 pulsin 8,1,Atime high 9 pause 10 Atime = Atime / 6 'was >> 3 ATsum=ATsum + Atime GOSUB Buttons IF ReInit=1 THEN Init 'new NEXT Atime= ATsum**Gain 'Atime used for high word here! Atime=Atime<<1 ATsum=ATsum*Gain ATSum=ATSum>>15 ATSum=ATSum|Atime ATSum=ATSUm-Offset 'This is current altitude *10 'Set TO altitude while on the ground IF Flying=1 THEN NoTO TOAlt=ATSum GOTO MaTOShown NoTO: 'Print rel alt ATime=ATSum+Offset IF ATime=0 THEN OverRel ATime=TOAlt+Offset/10 Text(0)=ATime.LOWByTE Text(1)=ATime.HIGHBYTE ATime=ATSum+Offset/10 ATime=ATime-Text(0) ATime=ATime-(Text(1)*256) GOSUB PrintATime SEROUT 0,16416,[254,"G",16,1,STR Text\5] GOTO NotOverRel OverRel: SEROUT 0,16416,[254,"G",16,1,"Over!"] NotOverRel: FlyTime=FlyTime+1 Text(0)=FlyTime/36000+48 'Show time ATime=FlyTime//36000 Text(1)=ATime/3600+48 ATime=ATime//3600 SEROUT 0,16416,[254,"G",13,2,STR Text\2] Text(0)=ATime/600+48 ATime=ATime//600 Text(1)=ATime/60+48 ATime=ATime//60 SEROUT 0,16416,[254,"G",16,2,STR Text\2] Text(0)=ATime/10+48 Text(1)=ATime//10+48 SEROUT 0,16416,[254,"G",19,2,STR Text\2] IF MaxAlt>ATSum THEN NoRecord If ATSum+Offset29940 THEN NoBraap 'Comparison values are 30000 +-m/s * 3 HIGH 14 HIGH 15 GOTO Silent NoBraap: IF ATime>30006 THEN NoStill LOW 15 GOTO Silent NoStill: IF ATime>30090 THEN Pipp INPUT 14 HIGH 15 GOTO Silent Pipp: LOW 14 HIGH 15 Silent: ATime=ATime-30000 Text(0)= ATime.BIT15 *13 + 32 'space or - ATime=ABS Atime ATime= ATime MAX 297 Text(1)=ATime/30+48 Text(3)=ATime//30/3+48 Text(2)="." serout 0,16416,[254,"G",5,2,STR Text\4] Last3=Last2 LAst2=Last1 Last1=ATSum HIGH 2 'External signal for checking remaining time in loop Synchro: GOSUB Buttons IF ReInit=1 THEN Init IF IN1=1 THEN Synchro LOW 2 goto main '======================================================================= Buttons: IF IN3=1 then No1 IF Flying=1 then DontFly Flying=1 SEROUT 0,16416,[254,"G",1,4,"Flying "] SEROUT 0,16416,[254,"G",2,3," "] FlyTime=0 MaxAlt=TOAlt 'was 0 PAUSE 500 GOTO No1 DontFly: Flying=0 SEROUT 0,16416,[254,"G",1,4,"Landed Menu"] MaxAlt=MaxAlt-TOAlt/10 SEROUT 0,16416,[254,"G",2,3,"Max Alt ATO = ",DEC MaxAlt] PAUSE 500 No1: IF IN5=1 THEN No3 IF Sound=1 THEN SoundOff Sound=1 SEROUT 0,16416,[254,"G",16,4,"SOUND"] PAUSE 500 GOTO No3 'was No2 by error.. SoundOff: Sound=0 SEROUT 0,16416,[254,"G",16,4,"Sound"] LOW 15 PAUSE 500 No3: IF IN4=1 THEN No2 IF Flying=1 THEN No2 '======================================================================== Menu: ReInit=1 SEROUT 0,16416,[254,"X",254,"G",1,4,"Change Next Exit"] Menu0: SEROUT 0,16416,[254,"G",8,2,"POWER"] Pause 200 Menu0a: IF IN4=0 THEN Menu1 IF IN5=0 THEN EndMenu IF IN3=1 THEN Menu0a INPUT 6 'Shut power off!!!!!!! GOTO Menu0a Menu1: IF Light=1 THEN ON SEROUT 0,16416,[254,"G",3,2,254,"F Light "] GOTO OFF ON: SEROUT 0,16416,[254,"G",3,2,254,"B",0," LIGHT "] OFF: PAUSE 200 Menu1a: IF IN4=0 THEN Menu2 IF IN5=0 THEN EndMenu IF IN3=1 THEN Menu1a Light= Light+1 'invert bit PAUSE 200 GOTO Menu1 Menu2: READ CB,Ctr SEROUT 0,16416,[254,"G",3,2,"Contrast=",DEC(Ctr)," "] PAUSE 200 Menu2a: IF IN4=0 THEN Menu3 IF IN5=0 THEN EndMenu IF IN3=1 THEN Menu2a SEROUT 0,16416,[254,"G",1,4,"Lighter Enter Darker"] PAUSE 200 Menu2c: IF IN3=1 THEN NoLighter Lighter: Ctr=Ctr-1 SEROUT 0,16416,[254,"G",12,2,DEC(Ctr)," ",254,"P",Ctr] PAUSE 200 IF IN3=0 THEN Lighter NoLighter: IF IN5=1 THEN NoDarker Darker: Ctr=Ctr+1 SEROUT 0,16416,[254,"G",12,2,DEC(Ctr)," ",254, "P",Ctr] PAUSE 200 IF IN5=0 THEN Darker NoDarker: IF IN4=1 THEN Menu2c WRITE CB,Ctr PAUSE 200 GOTO Menu Menu3: SEROUT 0,16416,[254,"G",3,2,"Altitude=",DEC(Last1/10)," "] PAUSE 200 Menu3a: IF IN4=0 THEN Menu4 IF IN5=0 THEN EndMenu IF IN3=1 THEN Menu3a Last1 = Last1 / 10 Last2 = Offset / 10 GOSUB DownUp Offset = Last2 * 10 SEROUT 0,16416,[254,"G",1,2," Altitude set! "] WRITE OSL,Offset.LOWBYTE WRITE OSH,Offset.HIGHBYTE PAUSE 1000 GOTO Menu Menu4: SEROUT 0,16416,[254,"G",3,2," Gain=",DEC(Gain)," "] PAUSE 200 Menu4a: IF IN4=0 THEN Menu IF IN5=0 THEN EndMenu IF IN3=1 THEN Menu4a Last1=Gain GOSUB DownUp Gain=Last1 SEROUT 0,16416,[254,"G",5,2," Gain set! "] WRITE GL,Gain.LOWBYTE WRITE GH,Gain.HIGHBYTE PAUSE 1000 RETURN 'needed to recalc alt with new gain EndMenu: No2: RETURN DownUp: SEROUT 0,16416,[254,"G",1,4,"Down Enter Up "] PAUSE 200 DownUpC: IF IN3=1 THEN NoDown MomByte=1 LessAlt: Last1=Last1-MomByte Last2=Last2+MomByte SEROUT 0,16416,[254,"G",12,2,DEC(Last1)," "] PAUSE 200 MomByte=10 IF IN3=0 THEN LessAlt NoDown: IF IN5=1 THEN NoUp MomByte=1 MoreAlt: Last1=Last1+MomByte Last2=Last2-MomByte SEROUT 0,16416,[254,"G",12,2,DEC(Last1)," "] PAUSE 200 MomByte=10 IF IN5=0 THEN MoreALt NoUp: IF IN4=1 THEN DownUpC RETURN PrintATime: Text(0)=ATime.BIT15*13+32 'Sign ATime=ABS(ATime) Text(1)=ATime/1000+48 ATime=ATime//1000 Text(2)=ATime/100+48 ATime=ATime//100 Text(3)=ATime/10+48 ATime=ATime//10 Text(4)=ATime+48 For Counter=1 TO 3 If Text(Counter)<>48 THEN ZeroOut Text(Counter)=Text(Counter-1) 'blank or minus Text(Counter-1)=32 'blank NEXT ZeroOut: RETURN