This is correct.
The 944/951 stuff is really not fresh in my mind anymore. And I'm not going to comb through the previous 20 pages in this thread. But what else do you want to know?
This is correct.
Well hello there and welcome to Carpokes! It's been a while!! We've been slogging through the various maps and and such and have a pretty good understanding of where the maps/variable are and how to adjust them. Part of the process has been to make an effort to reverse engineer the code (thanks to johnb, dave w, whalenlg, and the Open DME project) to provide a deeper community understanding of what's going on. That's why I was asking about the BIN-20 formula -- just trying to see where in the code (if anywhere) that happens -- mostly an academic, knowledge is power kind of question.Rogue_Ant wrote: Mon Sep 29, 2025 12:43 amThis is correct.
The 944/951 stuff is really not fresh in my mind anymore. And I'm not going to comb through the previous 20 pages in this thread. But what else do you want to know?
Code: Select all
1cae: lcall map_lookup ;
1cb1: add a,r5 ; add register r5 to accumulator A
1cb2: clr c ; clear carry
1cb3: subb a,#14h ; subtract immediate 0x14 (20 decimal) with borrow (carry=0, so simple subtract)
1cb5: mov r5,a ; move result back into r5
1cb6: ret ; returnI can add some context around the 0x655 map if this helps. I just finished going through and documenting the entire ISV routine and the logic for that map works like this (see 1BA9):Tom wrote: Mon Sep 29, 2025 4:25 pm Ah, thank you! Found it! I'll sleep better now.![]()
While we have you, maybe you can help me understand why you used (BIN*2)/5 in the deadtime tables of the XDF in your DIY bundle. I couldn't make sense of the resulting numbers shown in TunerPro (37 and 11), and starting here we came to believe the BIN represents time in MS*100....Code: Select all
1cae: lcall map_lookup ; 1cb1: add a,r5 ; add register r5 to accumulator A 1cb2: clr c ; clear carry 1cb3: subb a,#14h ; subtract immediate 0x14 (20 decimal) with borrow (carry=0, so simple subtract) 1cb5: mov r5,a ; move result back into r5 1cb6: ret ; return
And, at the risk of pressing my luck, I'm curious why you pointed your idle rpm table to 0x655? We had a long discussion about idle maps above, and there are clearly alternate idle maps depending on configuration, but none of them appear to be at 0x655 on the stock image? Any chance that was left over from a different map or from one or your proprietary code changes? Here's the upshot of what we found: "I tested on the car, and this theory seems correct. With a Bosch DME and the same chip image, the idle on my car is controlled via the 3-cell map Dave used (0x5FE, 0x5FF, 0x600). With the fTech DME, that map has no effect on idle and instead the 4 bytes starting at 0x5F5 controls the idle. This is consistent with johnb's code analysis, since it strongly appears that pin 28 no longer grounds that ADC in the ftech DME."
Code: Select all
if rpm > target but current load < the value from 0x655:
do not allow the closed loop routine to reduce air (via 20h.4)
Awesome, thanks for that. I had confidence in our approach for both, but in light of your prowess on this stuff, it's great to hear we weren't missing something.Rogue_Ant wrote: Mon Sep 29, 2025 7:45 pm Regarding the Injector deadtime, the equation I have is (X * 5) / 500
So, it looks like you guys came up with the same.
For the DIY .xdf, likely I just didn't get that copied over correctly from my non-public xdf.
The idle stuff in the original DME is a mess. I have lost some of my notes / disassembly over the years. But one earlier disassembly I have this in my notes:
DME_Idle_code.PNG
I don't recall exactly why I chose that table, IIRC I tried to consolidate the multiple idle tables into one.
Thanks for the reply! It's odd that my measurements don't match then - my coil (and entire car) are stock. I don't have the ability to measure the inductance, so maybe it is off.Rogue_Ant wrote: Mon Sep 29, 2025 8:26 pm @johnb
I took a look at your comments on my old ignition / coil tech thread. Your conclusion is wrong.
Using just V = L di/dt ignores resistances and other voltage drops, which in a 12v system is going to significantly change the result.
In particular, there is a significant voltage drop across the Darlington transistor driving the coil. There are connector and line resistances. There is also discrete resistors in the low-side path in the DME.
When I tested the coils, I tested them at the various voltages in the table's columns, 6.0 8.0 10.0 12.0 14.0 16.0 16.4 volts.
I even built an replica circuit in LTspice:
DME_Ignition.PNG
This very closely matches with what I measured. I tried reducing the resistances, but it still won't charge as fast as your measurement.
My conclusion is that your coil has less inductance compared to what I measured for the stock coils.
Additionally, the time to charge is not 1/(2*rpm/60). This affords no time for the coil to actually discharge and the circuit to stop ringing. Typically, a 1mS 'blanking window' should be applied to account for this time.