Joined
·
30 Posts
If the ECM does not acknowledge fuel over 100 mm3, why do the boost tables all go to 125 mm3.
This's because of how the data's stored in the ECM; everything eventually brakes down to assembler code, in binary; 2^15=32768, the last address is either unusable, or the data starts at 0 (0-32767=32768 places).Flashscan;1595652; said:There are many stange things, for example, we limit the pulse times to 5000uS, the ECM can actually calculate out to 32767uS (insane!).
If the table needs to hold values of 100, it has to have space for 128 (2^7); the next smallest address would be 2^6=64.Dickysticky;1595623; said:If the ECM does not acknowledge fuel over 100 mm3, why do the boost tables all go to 125 mm3.
I wasn't going to get that technical, it only confuses people moreschulte;1595701; said:This's because of how the data's stored in the ECM; everything eventually brakes down to assembler code, in binary; 2^15=32768, the last address is either unusable, or the data starts at 0 (0-32767=32768 places).
Flashscan;1595652; said:Good point, to know the real answer to that we would need to ask the software team at GM (like they would tell you anyway!)
There are many stange things, for example, we limit the pulse times to 5000uS, the ECM can actually calculate out to 32767uS (insane!).
It may have even been a situation where a different programmer was working on the boost control code and he decided to make he's table go up to 125, 130mm3. Or, that boost routine is used on another ECM that will go out to 130mm3.
Cheers,
Ross
"To the nth power"; I.E. 2^7 means "2 to the 7th power", or 2x2x2x2x2x2x2.markmac3;1595936; said:OK, I cant stand it any more! What does the ^ in the equations mean???
I'll bet 32 seconds would fill a whole cylinder... thats a whole new definition of "hydrolocked", especially if it happend at 3600RPM .Flashscan;1595957; said:...we don't get to read of someones disastrous test results of using a 32767us pulse...
I apoligize, I guess my explanation wasn't as clear as it seemed to me.markmac3;1596036; said:Thanks, now I'm really lost!!!
Adam, here's the rather technical explanation on how the mm3 values are used on B0720 & B0721 and this will hopefully make some people think about how things are done.malibu795;1595978; said:here is a question i can command up to 200mm3 on my tbiq but both the b0720 and b0721 tables only go to 100mm3???
my max injection quality warm is 120mm3 max is 200mm3
my current tune i logged 105mm3 with 157mpa with 1950uS????? i would liek to know were that calculatin came from.....i aksed a couple other memebers.. i dont think i was able to convey the info correctly
adam
:iamlost:Flashscan;1596112; said:Adam, here's the rather technical explanation on how the mm3 values are used on B0720 & B0721 and this will hopefully make some people think about how things are done.
I'm going to use just the 10 - 100mm3 values as an example. (schulte will like this I'm sure).
To get the lookup value the ECM does this process.
Gets the currently commanded mm3
Scales it to suit the table lookup routine
Gets pulse value based on the mm3 value (and RP).
Now the maths behind that (easily seen in the assembly code).......
Assume 10mm3
10mm3 in hex = $8280 (these are signed numbers)
Multiply by $100 = $828000
Divide by $280 = $3433
Add $CBCD = $10000
Now, just take the word value to get the correct mm3 cell to use, in this case that = $0000, so, use cell 0
Some more examples -
Assume 50mm3
50mm3 in hex = $8C80 (these are signed numbers)
Multiply by $100 = $8C8000
Divide by $280 = $3833
Add $CBCD = $10400
Now, just take the word value to get the correct mm3 cell to use, in this case that = $0400, so, use cell 4
Assume 90mm3
90mm3 in hex = $9680 (these are signed numbers)
Multiply by $100 = $968000
Divide by $280 = $3C33
Add $CBCD = $10800
Now, just take the word value to get the correct mm3 cell to use, in this case that = $0800, so, use cell 8
Now, this is where it gets interesting, if you command over 100mm3 looks what happens......
Assume 130mm3
130mm3 in hex = $A080 (these are signed numbers)
Multiply by $100 = $A08000
Divide by $280 = $4033
Add $CBCD = $10C00
Now, just take the word value to get the correct mm3 cell to use, in this case that = $0C00, so, use cell 12.
BUT, there is no cell 12, so what GM have done is to put a check in this part of the code that if the commanded mm3 scaled result is above $0900 (see below) then that is what it will be limited to or else the ECM would attempt to look at a value outside of the table.
FYI, the final example -
100mm3 in hex = $9900 (these are signed numbers)
Multiply by $100 = $990000
Divide by $280 = $3D33
Add $CBCD = $10900
Now, just take the word value to get the correct mm3 cell to use, in this case that = $0900, so, use cell 9.
So, looking at table B0720, count how many mm3 cells there are from 10mm3 to 100mm3 (start the count at 0, not 1), you will find 100mm3 is cell count #9.
So hopefully you can see from all the above, any commanded mm3 value above 100mm3 will still result in the ECM using the pulse time in this table from the 100mm3 row.
For those that can read CPU32 assembler, here is the exact code that does the above scaling -
move.l d7,d5 ; Move Commanded mm3 into d5
lsl.l #8,d5 ; Multiply by 256 ($100)
divu.l #$280,d5 ; Divide by 640
add.w #$CBCD,d5 ; Add 52173
move.w #$900,d7 ; Table cell count limit value (9)
cmp.w d7,d5 ; Compare to scaled mm3 value
bcs.s loc_30B4E ; Skip next if less than, Else...
move.w d7,d5 ; Set mm3 look up value max to cell #9
Cheers,
Ross
Ross's post explains why this is true. In short, GM's error checking prevents commands over 100mm^3 from producing any difference in operation than commanding 100mm^3- there are only 10 cells (addressed 0-9), so anything over 100 would theoretically refer to a cell that doesn't exist (if there was no error handling).Kennedy;1596255; said:The example Ross gave just shows how EASY it is with EFI Live.
I do at least know from experience that commanding over 100mm3 is fruitless...
Kennedy;1596255; said:The example Ross gave just shows how EASY it is with EFI Live.
I do at least know from experience that commanding over 100mm3 is fruitless...
schulte;1596281; said:Ross's post explains why this is true. In short, GM's error checking prevents commands over 100mm^3 from producing any difference in operation than commanding 100mm^3- there are only 10 cells (addressed 0-9), so anything over 100 would theoretically refer to a cell that doesn't exist (if there was no error handling).
Oh I see, the ECM will still internally process values higher than 100mm3 as your saw on the scanner, however, what I tried to show was that although the ECM might be working with the figure of 105mm3, or even 200mm3, it also limits these values internally based on the way the table is set up it needs commanded mm3 values for. So what you see on the scanner is correct, but for some tables the ECM ignores values above the set limits.malibu795;1596335; said:yet i have a log saying i got more than 100mm3.....105mm3 to be exact
i was just asking how.......
Very Cool!!! Thanks for explaining the gory details!! It's been a long time since I looked at assembler code.Flashscan;1596112; said:For those that can read CPU32 assembler, here is the exact code that does the above scaling -
move.l d7,d5 ; Move Commanded mm3 into d5
lsl.l #8,d5 ; Multiply by 256 ($100)
divu.l #$280,d5 ; Divide by 640
add.w #$CBCD,d5 ; Add 52173
move.w #$900,d7 ; Table cell count limit value (9)
cmp.w d7,d5 ; Compare to scaled mm3 value
bcs.s loc_30B4E ; Skip next if less than, Else...
move.w d7,d5 ; Set mm3 look up value max to cell #9
Cheers,
Ross