How to Get a GREAT Idle.........

I haven't tried it yet (maybe this weekend) but there is a related thing that's been buggin' me for awhile. Your post just reminded me of it.

Carl, you mentioned that the rom code just checks one of the Integrator limits and not the other. That's because there's a bug in the program. (or a bug in the listing we got from gnttype).

In the code at $EFF6, we grab the Integrator value. It is then compared to $3430 (like you said) to see if its below the "Low O/L Threshold". If its above that (stock is 122), the next instruction at $EFFD, compares the Int. to the MSB of the Warm C/L Timer (??) at $3401 :confused: Doesn't make any sense.

The instruction at $EFFD should be B1 34 31 not B1 34 01. If it was, then a check would be made to see if the Int was below the "High O/L Threshold". If so, we drop into the O/L idle stuff.

So how do we change the rom or prove the listing is bogus?
 
I wondered about that. I use o/l idle in my chip and it will not drop into o/l until the int is between the high and low. Example: If I reset the ecm so all blms are 128, then restart the car and warm up, it won't go into open loop idle until blm cell 0 learns up to 133 and the int stabilizes between the 122 and 134 setpoints. I guess there is a good possibility that the listing is wrong.
Good catch.

Eric
 
Hmm. I'll have to look at that when I get a chance. There is a dump and rough disassembly with no comments (I think) of a 7148 ecm with n/a eprom at the www.diy-efi.org site, and of course the rom code should be the same so you can check that. I'm behind a firewall here at work and can't ftp, sigh, or I'd check it now. Good catch, Dennis. It sounds like a typo in the listing, not a bug in the code, based on Eric's results. So, Eric, you are using the open loop idle this way? How long do you let it stay closed loop? Did you change the open loop far's or just keep the stock numbers? How smooth is it?
 
Its a mistype

EFFD B1 3431 is the correct code like Dennis thought.
 
The idle is pretty smooth in open loop. I have the "delay before open loop idle" set to almost nothing, .2 seconds or something. It seems to be fine this way because it won't go into open loop until its done learning anyway. On my car, it likes the idle around .800mv on the scanmaster. To get that rich, I kept bumping the O/L idle mixtures richer until I got to 12.5:1. It does ok leaner than that, but the car "seems" more responsive off idle with the richer idle (might be in my head:) ). Also, I had to move the "max speed for o/l idle fuel mode" up or it would never drop into open loop for some reason. The stock value is .3 mph I think, and I moved mine up to about 15mph just to get that factor out of the way. Finally, it wants to come out of open loop if you leave cell 0, so bumping up the cell 0 boundary is helpful. (or you could jump over that part of the code with a patch to make it easier to get into o/l idle).
As long as I'm typing... I tried another method where I wrote some code that made it go open loop any time the car was under 25 mph (where it would shift out of 1st at wot). Then, I modified the code to activate table 34E5 (a/f vs. lv8) any time open loop was on. This gave me independent fueling of 1st gear and open loop idle and I found it was fairly easy to adjust for off idle stumbles and such.
Fun stuff:)

Eric
 
Coming out of Cell 0.........

Eric,

If you are coming out of Cell 0 using the stock boundries, then do you have your idle speed set at around 900 rpm or above?? I'm actually hoping to get my idle smooth, with the stock cam, at about 750-800 rpm. I wouldn't think that this would be too much trouble with the stock cam or do these things just not like to idle that low??

All,

Also, what is the concensus on the best way to richen up the O/L idle?? As typical of many other parameters, there are several ways to skin this cat. Any opinions??

TG
 
The stock cell boundary for cell 0 is 800rpm (at least in ACXA0942). Sometimes it takes a few seconds for the idle to settle down when coming to a stop. This would cause a delay before open loop would come on, so I bumped up the boundary to 900 or 1000rpm to make sure there was no question about it being in cell 0. Mines idles at 750rpm, but I think it'll idle pretty good lower than that also, depending on injector size.

I think the only way to adjust the o/l idle fuel is $342C and $342D. Unless maybe you adjust the MAF tables, but then you'd be falsifying the airflow (not that there's anything wrong with that).
 
That "glitch" has been buggin me for a long time, but I feel better now. There's another one that involves the EGR error detection, but we can analyze that one latter...

This O/L idle sounds like the way to go. But we need to put some thought into how to best apply it. Now if we use the factory code, then the conditions for entering O/L Idle are:
1. Coolant temp > $3405 - C/L Min Temp (76 degF)
2. ECM not in ALDL Mode
3. BLM Cell Offset = 0 (using cell 0)
4. TPS% < $367D (1.6%)
5. adjusted MPH < $342E (0.3125 mph)
6. Integrator between $3430 & $3431 (122-133)
7. O/L Timer has elapsed (is FF but needs to be at least 01)

OK, so the original coder went to a lot of trouble to ensure the car wasn't moving and the driver wasn't trying to scare the Mustang owner next to him at the light. :D

I like the idea of 2 different AFRs because I'm thinking start the car with AFR = 14.7 and control fuel with existing tables. After initial warmup, switch to something richer, then use a 3rd AFR for norm operating temp. What do you think?
 
Carl, I just looked at that disassembly and I'm seeing 3401, not 3431. Am I missing something? Did I look in the wrong spot?
 
Big sigh, I guess I can't read anymore. I just downloaded a fresh copy of 7148atj and here's the section:

xEFDD _CLRB
_BTSTA $0002,#%00100000 ; B=#0
_BNE @1 ; B=#0
_LDAA $0080 ; B=#0
_BNE @1 ; B=#0
_LDAA $0036 ; B=#0
_CMPA x367D ; A=$0036 B=#0
_BCC @1 ; B=#0
_LDAA $0028 ; B=#0
_CMPA x342E ; A=$0028 B=#0
_BHI @1 ; B=#0
_LDAA $0088 ; B=#0
_CMPA x3430 ; A=$0088 B=#0
_BCS @1 ; A=$0088 B=#0
_CMPA x3401 ; A=$0088 B=#0
_BCC @1 ; B=#0
_LDAB $00A6
_CMPB x3432 ; B=$00A6
_BLS @0 ; B=$00A6
_BSETB $0005,#%01000000
_BRA xF02A
@0 _INCB ; B=$00A6


Sure enough, it says _CMPA x3401, not x3431. Now I have to go home and make sure that copy says the same, but I'm sure it does and I guess I just misread it last night. GM has to have meant to use 3431 but now I do wonder what's in the code. For two bytes like this I'll set the aldl data stream addresses that normally point to the prom id to point to $effe and $efff and fire up turbolink but it may be a couple of days before I get it done. There's probably a way to use directscan too, but I haven't read all of that manual yet :).
 
I can just about 100% gaurentee you (99.999%) that what I posted is the correct code at least for our ECM. As for the other ECM, I can't say but the source code listing I have should be 100% accurate ;)

Mike Pitt's dump, if thats what youre using, has a lot of errors in it.
 
Idle Set-up......Giv'n it a Whirl.......

Well, since I have a little time now, I'm going to give the O/L a whirl and see what I can find. I figure the following should get me started:

Set $340B to $24 (900 rpm)

Set $342C to $5E (12.5:1)

Set $342D to $61 (12.9:1)

Set $342E to $6 (2 mph)

Set $3432 to $1 (0.2 sec)

The only thing that I am still not sure of are the low and high C/L idle fuel correction windows at $3430 and $3431. However, I assume that, based upon my injector constant and my C/L AF ratio, the ECM will learn (in C/L) until BLM 0 is in the 122 - 134 range. Then it should drop into O/L idle and richen to the AF ratios that I specified above. If all goes well and I didn't screw up any of the HEX stuff above, then I should be in O/L and can tweak the AF ratios to get them where I want them.

If anyone sees a fatal flaw in this logic, let me know. Otherwise, I'll see how things go....................

TG
 
You're right. Just a couple things. The blm in cell 0 will learn until the INT is between 122 and 134 (pending confirmation of correct code). The blm could end up anywhere. Once open loop idle is activated however, the int should go to 128.
Also, an A/F of 12.5 and 12.9 would be 83 and 7F.

Let us know how it goes!
 
Jay, I know your listing should be correct as far as what gm intended, but maybe a mistake crept in on the way to the rom. The disassembly on gnttype is based on Mike Pitts' dump, with a fair amount of proofreading by myself and then Dennis Leek (who has further corrections that I don't remember if he's sent to Ken or not). So far as we know the hex in that file is correct and complete but there may still be some errors in the opcode mnemonics (bcs instead of bcc, or jump if < instead of >= in the comments, etc). The dump on Ludis' site for the normally aspirated 3.8 7148 with atj eprom was most likely done by Ludis and is the only other publicly available dump/listing for the 7148 that I know of. Now I definitely have to see this weekend. Oh, I checked and it looks like directscan can't do this job because the user-defined data locations are only one byte addresses (zero page locations). I may try it with a two byte address but I don't expect success.
 
Sent you an email, Carl.
 
Re: Idle Set-up......Giv'n it a Whirl.......

If anyone sees a fatal flaw in this logic, let me know. Otherwise, I'll see how things go....................
[/B]

How are you going to know where you are in any of this?.
Do you have a WB?.
Or, are you you tuning for just best rich idle?.

You'd be alot further ahead by just doing an Open Loop Chip. If you're able to monitor the AFR, and if you don't have a WB then realise you're just guessing about what you're doing.

You're also forgetting the oem code toggles across Stoic to find the BL, and that's used in all the C/L calcs, I beleive. While you might be setting a commanded AFR that might not be what you get.

The toggling is not a 50/50 deal to get the average AFR to 14.7.

If you were to get a WB then you could also see the AE stuff and actually make a decent chip.
 
Okay, did the prom id/turbolink test and indeed the rom has $3431. Hmm, either Mike and Ludis shared a bin dump with an error, or shared a bin dump technique with a flaw???

Several years ago on the gnttype list there was discussion about the speed turn off test on the fan, and the listing shows what appears to be a bug because that test won't ever get done. One poster rigged an led on the fan and said that it never went off from speed (this was pre-ds). Wonder if the listing is correct there?
 
Top