The lack of an AC idle-up feature on the MS-1 is a real PITA, especially here in Texas in July. I've tried all the tricks listed in the stickies. For the most part, they "help" but aren't enough to solve the problem of AC idle droop (compounded, no doubt, by my 1.6 and R-134A conversion).
Most of you have gotten smart by now and moved on to MS-2 or 3. But I'm stubborn and cheap. Aside from the AC idle issue, I'm happy with my MSPNP -- it's served me well for years. Given that I'm already doing spark and fuel table switching based on AC clutch engagement (Pin 1J on the 90-93s), how hard could it be to add an idle-up?
As it turns out, not hard at all. But be advised, this is a code hack. One of the great things about MS is that it's "open-source." But that's a double-edged sword. If you're not comfortable with writing software, compiling, loading, etc. -- you probably better steer clear. Otherwise, the change is surprisingly easy.
Prerequisites: The only prerequisite for this change is to mod the MS to perform spark/fuel table switching based upon AC clutch engagement. This is covered in the stickies. More than likely, if you've been struggling with AC idle droop, you've already done this.
Basic Concept: What we are going to do in the software is monitor the input being used to switch the spark table and use it to bump up "Minimum DC" when the input is active. This provides an instant source of extra air to increase idle speed when the AC clutch is engaged. You'll have to experiment with how much bump-up you need (it's hard-coded). In my case, I'm bumping up 11 (from "19" to "30"). This amount of DC gives me about 1000RPM with AC+lights+maximum fan and about 1150RPM with AC+medium fan (my normal closed-loop warm idle target is 900RPM).
The code I started with was the standard MSPNP9093 software, MS1 Extra Version 029v. The attached zip contains both the original MS1 Extra 029v and the modified version. If you're not using 029v, you can at least take a look at what I did and make similar changes in your codebase (the idle code for all MS1 software versions should be similar). My modifications consist of:
1. A small routine called "Idle_done_CL" that is called instead of the normal "Idle_done" when any of the closed-loop idle functions finish. "Idle_done_CL" loads either "minimum DC" or an incremented "minimum DC" (depending upon the state of the AC clutch input) into register A and ensures that variables "Idledc" and "IdleLastDC" are at or above the dynamically set minimum. "Idledc" is the variable that directly controls the output to the idle control valve. "IdleLastDC" is a state variable that gives the idle routine a better starting point after an off-idle excursion. "idlemindc_f" is the "minimum DC" that you set in the closed-loop idle dialogue in MegaTune or TunerStudio.
The following WinMerge screen capture shows "Idle_done_CL":
2. Four places where "Idle_done" is changed to "Idle_done_CL":
So, how does it work? Here are some MegaLog graphs:
This log shows the AC being turned ON and then turned OFF. With the turn ON, you can see the immediate jump in spark angle (from the spark table switching) and idle DC (from the code hack). There is little change in RPM upon engagement, it just smoothly increases from ~900 to ~1150. Upon turning OFF, spark angle returns to normal immediately but idle DC decrements more slowly under the control of the closed-loop idle algorithm. This results in a bit of an RPM increase followed by the re-establishment of a normal idle RPM.
This log shows idle recovery after a throttle blip with the AC OFF (just showing this to establish a baseline -- note the droop to ~750RPM before smoothly recovering to ~900RPM):
This log shows idle recovery after a throttle blip with AC ON, Lights OFF and Fan Speed Medium. Idle speed droops to ~800RPM before recovering to ~1150RPM.
This log shows idle recovery after a throttle blip with AC ON, Lights ON and Fan Speed High (worst case scenario). Idle speed droops to ~700RPM before recovering to ~1000RPM.
So, there you go! Works pretty well for such a simple hack.