SCUBA - Nitrox and Trimix for HP-41 - Printable Version +- HP Forums (https://www.hpmuseum.org/forum) +-- Forum: HP Calculators (and very old HP Computers) (/forum-3.html) +--- Forum: General Forum (/forum-4.html) +--- Thread: SCUBA - Nitrox and Trimix for HP-41 (/thread-6857.html) |
SCUBA - Nitrox and Trimix for HP-41 - 4ster - 09-14-2016 04:25 PM My second hobby lately has been rediscovering my HP-41. I wrote this to support my first hobby. Many SCUBA divers take a NITROX course to enable them to use a higher percentage of oxygen in their breathing gas to extend their time underwater. If you are a real diving junkie you learn how to use TRIMIX which is a mixture of Oxygen, Helium and Nitrogen to extend the depth limits of NITROX or AIR. The math for this is dead simple and can be done with paper and pencil, but it is tedious to remember which term goes where. If you are a NITROX diver this program solves the "Dalton's Diamond" problems in the coursework. The following program works out the best mix for a given target depth. Alternatively, it allows a diver to determine the working limits of an existing mix in a scuba cylinder. The program uses local labels in the top row of keys and a key nemonic on the display to help with visualizing key assignments. SIZE=5, Total Registers=31. For divers outside the US and Canada who think of depth in meters instead of feet, change lines 36 and 105 from 33 to 10. You will also want to change line 110 to label the depth answers as meters and edit line 09 and 10 to FIX 1 SF 29. Edit: ignore the following: (Because the program uses the CLRGX function an extended function module is required.) As Dieter points out in his post below CLRGX is only available on a 41CX, and it has been eliminated from the program listing per Dieter's suggestion. To use, enter two or three knowns using the keys A though E. Find the unknowns using shifted keys a though e. Work the keys from the outside in for the unknowns, as keys b, c and d require that O2 (key A or a) and maximum depth (key E or e) are entered or solved for first. The program does not solve for partial pressure of O2, the diver must enter the target number using key C (for nitrox diving the generally accepted number is 1.4). Key c solves for Minimum Operating Depth and is used when diving hypoxic trimix. For divers using nitrox, just ignore the keys B and b which deal with helium, the helium value is set to zero when the program initializes. Any nitrox mix is breathable all the way to the surface so key c will always return a minimum depth of 0 using nitrox. Definition of terms: O2= % oxygen He= % helium PP= Partial Pressure of oxygen ND= END or Equivalent Narcotic Depth (in feet) D= MOD or Maximum Operating Depth (in feet) Min. OD= Minimum Operating Depth (for Hypoxic Mixes). To be conservative the program considers hypoxic to be below 17% O2. Disclaimer: Do not rely on this program to do any real dive planning. Never exceed your training and check results against the methods you were taught to dive safely. EXAMPLE 1: Of course, USER mode is set to ON for a program that uses single letter local labels. A nitrox diver analyzes her cylinder and finds it contains 32.4% nitrox (32.4% oxygen and 67.6% nitrogen and trace gasses, Air is 20.9%/79.1%). What is her maximum depth if she does not want to exceed an O2 partial pressure of 1.4? What is the Equivalent Narcotic Depth at the maximum depth? XEQ: TRIMIX (The display will read "O2/HePP ND D", which correspond to the top row keys below the display.) Enter Oxygen: 32.4, press "A" (key below "O2" in display), Display: "O2/HePP ND D" Enter Partial Pressure: 1.4, press "C" (key below "PP" in display), Display: "O2/HePP ND D" Press "e" (shifted key below "D" in display), Display: "MOD=110 FT" So the diver will not go below 110 ft. Press "d" (shifted key below "ND" if it was in the display), Display: "END=63 FT" So even though she may dive to 110 ft, she will feel as alert as she would be at 63 feet on air. Example 2: A Trimix diver wants to plan a dive to 300 feet. Air is deadly at that depth: The oxygen partial pressure exceeds safe standards and the nitrogen in air is so narcotic at that depth the diver would be incapable of rational thought. The diver wants the partial pressure of oxygen to be no more than 1.3 at 300 feet and he wants the narcotic effect of nitrogen to be no more than if he were diving to 66 feet. The remainder of the gas will be helium, what is the required mix? What is the shallowest depth that the mixture can be breathed? XEQ: TRIMIX, Display: "O2/HePP ND D" Enter maximum depth: 300, key "E", Display: "O2/HePP ND D" Enter the Equivalent Narcotic Depth: 66, key "D", Display: "O2/HePP ND D" Enter the Partial Pressure of O2: 1.3, key "C", Display: "O2/HePP ND D" Press key "a", Display: "13% O2" Press key "b", Display: "57% He" Press key "c", Display: "MIN. OD=11 FT" The shallowest depth the diver can be to safely breathe this mixture. Note: A standard convention in trimix diving is to label the cylinder with the gas contents as "O2%/He%", in this case "13/57". The nitrogen portion of the mix is left off of the label. That is why the first two key labels in the nemonic on the display are "O2/He" and why there is no solution for nitrogen % in the program. 01 LBL "TRIMIX" 02 CLX 'Clears registers 00 thru 04 03 STO 00 04 STO 01 05 STO 02 06 STO 03 07 STO 04 08 SF 21 09 FIX 0 10 CF 29 11 LBL 00 12 "O2/HePP ND D" 'Key nemonic 13 PROMPT 14 LBL A 'Oxygen % 15 100 16 / 17 STO 00 18 GTO 00 19 LBL B 'Helium % 20 100 21 / 22 STO 01 23 GTO 00 24 LBL C 'PPO2 25 STO 02 26 GTO 00 27 LBL D 'END 28 XEQ 05 29 STO 03 30 GTO 00 31 LBL E 'MOD 32 XEQ 05 33 STO 04 34 GTO 00 35 LBL 05 'Converts feet to ata pressure 36 33 37 / 38 1 39 + 40 RTN 41 LBL a 'Calc O2% 42 RCL 02 43 RCL 04 44 / 45 STO 00 46 100 47 * 48 CLA 49 ARCL X 50 ">% O2" 51 AVIEW 52 GTO 00 53 LBL b 'Calc He% 54 RCL 03 55 RCL 04 56 / 57 RCL 00 58 + 59 1 60 X<>Y 61 - 62 STO 01 63 100 64 * 65 CLA 66 ARCL X 67 ">% He" 68 AVIEW 69 GTO 00 70 LBL c 'Calc Min. OD 71 0.17 72 RCL 00 73 / 74 XEQ 06 75 X<0? 'To keep O2 mixtures > .17 from returning negative values 76 0 77 "MIN. OD=" 78 GTO 10 79 LBL d 'Calc END 80 1 81 RCL 00 82 RCL 01 83 + 84 - 85 RCL 04 86 * 87 STO 03 88 XEQ 06 89 "END=" 90 GTO 10 91 LBL e 'Calc MOD 92 RCL 02 93 RCL 00 94 / 95 STO 04 96 XEQ 06 97 "MOD=" 98 GTO 10 99 LBL 06 'Converts ata to feet 100 1 101 - 102 33 103 * 104 RTN 105 LBL 10 'Output routine for feet 106 ARCL X 107 "> FT" 108 AVIEW 109 GTO 00 110 END RE: SCUBA - Nitrox and Trimix for HP-41 - Dieter - 09-14-2016 09:20 PM (09-14-2016 04:25 PM)4ster Wrote: My second hobby lately has been rediscovering my HP-41. I wrote this to support my first hobby. A few remarks: 1. CLRGX is a CX function and not available on other '41 calculators. Instead of 0,004 CLRGX you should simply use CLX STO 01 STO 02 STO 03 STO 04. That's just five bytes and thus even requires less memory than the CLRGX version. And, more important, it runs on any 41. 2. There are several XEQ 13 calls that obviously are used to display output. But there never is a return from this subroutine as it ends with a jump to LBL 00 (prompt for next input). I looks like you meant GTO 13 in every case that now reads XEQ 13. Or, to be honest, simply replace the two occurences of "XEQ 13" by a simple AVIEW GTO 00. This does the same and it's shorter and faster. After this LBL 13 can be removed completely. The same is true for the XEQ 12s. In both cases this should be GTO 12. 3. The CLA in line 08 is not required. And why do you set flag 29 in line 7 and clear it directly afterwards (without any operation where flag 29 makes a difference)? 4. I don't know anything about diving, but this sounds like a useful program. So why don't you post it to the HP41 Software Library? After some minor changes... ;-) Dieter RE: SCUBA - Nitrox and Trimix for HP-41 - 4ster - 09-15-2016 12:53 AM (09-14-2016 09:20 PM)Dieter Wrote:(09-14-2016 04:25 PM)4ster Wrote: My second hobby lately has been rediscovering my HP-41. I wrote this to support my first hobby. Dieter, Thanks for the input. CLRGX - You are correct. I had an issue running the program on the iphone 41C app that halted the program at the CLRGX instruction with a NONEXISTENT and assumed that it was because CLRGX was an extended memory function. I looked it up after I wrote the post and was hoping to edit the original post before anyone noticed. :-) I'll edit the CLRGX and XEQs and replace them with GTOs in the original post. After all these years I am still confused when CLA is needed and when its not. So I tend to put too many in. Flag 29: Since normal flow in the program is to halt at the PROMPT, it is likely that it leaves flag 29 set, instead of having to reset it outside the TRIMIX program. Your right, it's fluff and SF 29 is no longer in the listing. I wasn't sure what the policy is on adding programs to the libraries. There are some really good programs in there and I didn't want to litter the space. After a few days residing here for more improvements, I'll copy the program over to the HP-41 library if there are no objections. RE: SCUBA - Nitrox and Trimix for HP-41 - rprosperi - 09-15-2016 03:19 AM (09-15-2016 12:53 AM)4ster Wrote: I wasn't sure what the policy is on adding programs to the libraries. There are some really good programs in there and I didn't want to litter the space. After a few days residing here for more improvements, I'll copy the program over to the HP-41 library if there are no objections. For any non-trivial program, I think it's best to include a sample problem with a walk-through of the steps one follows to solve the problem using the program. I know I always appreciate going through an example that reinforces the UI, clarifies the intended sequence, and sometimes even helps educate the user about the problem he/she is using the program to solve. Just a suggestion if you're going to add it to the Library, which I agree is a good idea. RE: SCUBA - Nitrox and Trimix for HP-41 - 4ster - 09-15-2016 06:34 AM I added a couple of examples. Are they clear as mud? RE: SCUBA - Nitrox and Trimix for HP-41 - rprosperi - 09-15-2016 02:36 PM (09-15-2016 06:34 AM)4ster Wrote: I added a couple of examples. Are they clear as mud? Excellent!! Better than most examples IMHO. These not only clarify how to use the program, but also make it seem more interesting and invites folks to try it out. Thanks for taking the time to add these, I think they will bring many more users to evaluate (and use) your program. Also, extra credit for not stereotyping by including a woman as your example diver. RE: SCUBA - Nitrox and Trimix for HP-41 - Dieter - 09-15-2016 10:12 PM (09-15-2016 12:53 AM)4ster Wrote: CLRGX - You are correct. I had an issue running the program on the iphone 41C app that halted the program at the CLRGX instruction with a NONEXISTENT and assumed that it was because CLRGX was an extended memory function. CLRGX is a function that is only available on the CX (like some others). It is not a part of the Standard Extended Functions as they are available in the X-Functions module. So for CLRGX you must have an CX. At least if Ángel did not make some kind of ROM that includes it. ;-) (09-15-2016 12:53 AM)4ster Wrote: After all these years I am still confused when CLA is needed and when its not. Simple. CLA clears the alpha register. This is not required if you enter a new Alpha text because this text overwrites any previous Alpha content that may exist. For instance, the CLA in the current line 77, 90 and 99 is not required, because the "MOD=" etc. text that follows overwrites any other previous Alpha content. CLA is required if you want to start with an empty Alpha register and the next Alpha function *appends* text. This e.g. is the case with ARCL. It *appends* the content of the specified data register to the current Alpha string. For instance "VALUE=" ARCL X produces "VALUE=3.14" if X is Pi. If you want a message that *starts* with the x-value you'd have to clear Alpha first. Otherwise ARCL X would append X to whatever happens to be in Alpha at that point. That's why the CLA in line 48 and 65 is required. Dieter RE: SCUBA - Nitrox and Trimix for HP-41 - 4ster - 09-16-2016 02:46 AM (09-15-2016 10:12 PM)Dieter Wrote:(09-15-2016 12:53 AM)4ster Wrote: CLRGX - You are correct. I had an issue running the program on the iphone 41C app that halted the program at the CLRGX instruction with a NONEXISTENT and assumed that it was because CLRGX was an extended memory function. I write programs like I work on cars... They seem to run better when I have parts left over after putting them back together. ;-) |