woj
|
|
« Reply #15 on: April 17, 2020, 12:10:02 PM »
|
|
|
The free ADC - I missed the obvious MAF input, I admit. Still, quite useful to be able to keep it running for testing the MAP based development.
O2 input, not sure about ME that has a 10bit ADC, but IIRC there were older ECUs that had a voltage amplifier on O2 input to improve the signal resolution.
I can't say for sure how is the ADC channel sampling done, the code is a bit contrived, I am tired, and nobody is paying me for this, but... the actual ADC sampling is done somewhere in the "depths" of the ECU along with all other channels. The value copying to udss variable (pure MAP voltage signal) seems to be done crank synced (not 100% sure), what I noticed it happens together with the bunch of procedures, where one of them is the one that uses "TRD - Tooth period time for reverse rotation during stop" parameter on my ECU if that helps you locating the right procedure vector on your ECU. But, I did not really commit to verifying this, and have no idea what TRD is for, could as well be I found something totally unrelated.
For filtering - I see n-last values averaging when converting udss into pdss (or whatever it is properly called), but I have to look at it again to be sure and get the exact figures.
EDIT: OK, the averaging seems to be on the number of reads of udss snapshots that happened since the last crank sync, which makes me suspicious of when is the udss read from ADC that I just described above, could it be tooth sync instead?...
|
|
« Last Edit: April 17, 2020, 12:20:26 PM by woj »
|
Logged
|
|
|
|
prj
|
|
« Reply #16 on: April 17, 2020, 12:47:47 PM »
|
|
|
Why dumb if the original loom reach the sensor and have the same pin as the new connector? Just need to repin a single wire in the ECU connector for supplying 5V and its all good to go.
Because you're replacing the MAF, so the only thing that it makes sense to use is the MAF wires. Simply extending them and changing the connector, which costs peanuts is nothing. Another thing - NA cars have IAT in the MAF (which when converted to turbo and SD is still needed). Anyway you do how you want it, but MAF ADC is the only reasonable option, because it's how it's done from the factory - everything else IS really dumb. That said, changing the ADC channel is super is easy. So if you want to make a huge hack then go on, use the rear o2. O2 input, not sure about ME that has a 10bit ADC, but IIRC there were older ECUs that had a voltage amplifier on O2 input to improve the signal resolution. It's a normal 0-5V input like any other on ME7.
|
|
|
Logged
|
|
|
|
noice
Newbie
Karma: +16/-3
Offline
Posts: 23
|
|
« Reply #17 on: April 17, 2020, 01:22:33 PM »
|
|
|
The free ADC - I missed the obvious MAF input, I admit. Still, quite useful to be able to keep it running for testing the MAP based development.
O2 input, not sure about ME that has a 10bit ADC, but IIRC there were older ECUs that had a voltage amplifier on O2 input to improve the signal resolution.
Rear O2 is direct connected to the ADC. This works, it is already wired up and tested. I can't say for sure how is the ADC channel sampling done, the code is a bit contrived, I am tired, and nobody is paying me for this, but... the actual ADC sampling is done somewhere in the "depths" of the ECU along with all other channels. The value copying to udss variable (pure MAP voltage signal) seems to be done crank synced (not 100% sure), what I noticed it happens together with the bunch of procedures, where one of them is the one that uses "TRD - Tooth period time for reverse rotation during stop" parameter on my ECU if that helps you locating the right procedure vector on your ECU. But, I did not really commit to verifying this, and have no idea what TRD is for, could as well be I found something totally unrelated.
For filtering - I see n-last values averaging when converting udss into pdss (or whatever it is properly called), but I have to look at it again to be sure and get the exact figures.
EDIT: OK, the averaging seems to be on the number of reads of udss snapshots that happened since the last crank sync, which makes me suspicious of when is the udss read from ADC that I just described above, could it be tooth sync instead?...
If this is correct, the sampling is not running crank-synchronous. Can you post your original bin? Because you're replacing the MAF, so the only thing that it makes sense to use is the MAF wires.
You are missing one point: My code doesn't work yet. So why remove my MAF for something that not even works yet? Changing the ADC channel later on is as simples as changing 2 bytes. Another thing - NA cars have IAT in the MAF (which when converted to turbo and SD is still needed).
Anyway you do how you want it, but MAF ADC is the only reasonable option, because it's how it's done from the factory - everything else IS really dumb. That said, changing the ADC channel is super is easy. So if you want to make a huge hack then go on, use the rear o2.
This is not a professional solution, my dude. I am not a "pro tunner". I am only a bored engineer with some knowledge in ASM.
|
|
|
Logged
|
|
|
|
woj
|
|
« Reply #18 on: April 17, 2020, 01:34:56 PM »
|
|
|
If this is correct, the sampling is not running crank-synchronous.
Can you post your original bin?
Not sure it is correct, but prj has not yet implied I am idiot , so it could be. From what I saw, raw ADC channels are sampled collectively, "quite often" (an engineering term for you . The most recent data collection seems to happen at every crank wheel tooth, and at every crank rotation it is averaged to get a reading for the inlet pressure variable. This makes sense to me at least, regardless of engine speed, you get consistent results for the whole engine rotation cycle. Bin attached.
|
|
|
Logged
|
|
|
|
prj
|
|
« Reply #19 on: April 21, 2020, 10:56:03 AM »
|
|
|
This is not a professional solution, my dude.
I am not a "pro tunner". I am only a bored engineer with some knowledge in ASM. You already know more than most so called "pro tuners" who can only shift boxes left to right in winols. Trust me. Sampling isn't crank-sync, evaluation of samples and filtering is. It's not important to get it that super right - sampling is done every 1ms, as long as you get the sample more or less roughly at the same time each time for each cylinder/cycle then it'll be more or less the same signal.
|
|
« Last Edit: April 21, 2020, 10:57:57 AM by prj »
|
Logged
|
|
|
|
Blazius
|
|
« Reply #20 on: April 21, 2020, 12:59:22 PM »
|
|
|
Also a thing. NA 1.8 (of this platform) specifically does NOT have the standalone IAT in the MAF sensor, but separate just like 1.8T.
|
|
|
Logged
|
|
|
|
prj
|
|
« Reply #21 on: April 21, 2020, 01:31:01 PM »
|
|
|
Also a thing. NA 1.8 (of this platform) specifically does NOT have the standalone IAT in the MAF sensor, but separate just like 1.8T.
Which is irrelevant, because no one with a 1.8 NA will ever need this. Everything that is worth turbocharging has IAT in MAF.
|
|
|
Logged
|
|
|
|
woj
|
|
« Reply #22 on: April 22, 2020, 04:41:34 AM »
|
|
|
sampling is done every 1ms
So that is what I was seeing... Indeed, every crank wheel tooth, though technically possible, seemed a bit too optimistic.
|
|
|
Logged
|
|
|
|
DT
Full Member
Karma: +20/-1
Offline
Posts: 184
|
|
« Reply #23 on: April 22, 2020, 10:19:08 AM »
|
|
|
------ C16x specs, minimum conversion time is like ~8us @25MHz which is enough time to handle ADC every tooth. But as prj said above the correct interval is 1ms. Apology to woj further down the thread.
|
|
« Last Edit: April 22, 2020, 04:31:38 PM by DT »
|
Logged
|
|
|
|
woj
|
|
« Reply #24 on: April 22, 2020, 11:35:49 AM »
|
|
|
So where is the flaw in my calculations then? Assumption 60 tooth crank wheel. One engine rotation at 7500rpm:
60sec * 1000 ms = 60000 ms
60000 / 7500 = 8 ms duration of one engine rotation
8 ms = 8000 us
Divide that by 60 you get ~133 us.
How did you come up with 2us???
|
|
|
Logged
|
|
|
|
noice
Newbie
Karma: +16/-3
Offline
Posts: 23
|
|
« Reply #25 on: April 22, 2020, 04:16:37 PM »
|
|
|
You already know more than most so called "pro tuners" who can only shift boxes left to right in winols. Trust me.
Sampling isn't crank-sync, evaluation of samples and filtering is. It's not important to get it that super right - sampling is done every 1ms, as long as you get the sample more or less roughly at the same time each time for each cylinder/cycle then it'll be more or less the same signal.
Nice, the code in the first post will work then. Just need to move the accumulator to the 1ms raster and move the V to P conversion to the sync raster. Also need to figure out how to filter the signal. So that is what I was seeing... Indeed, every crank wheel tooth, though technically possible, seemed a bit too optimistic. There is only one entry in your bin that is relevant to track the ADC sampling timming, if your assumption was right, all ADC channels would be sampled at every tooth. That is insane.
|
|
|
Logged
|
|
|
|
DT
Full Member
Karma: +20/-1
Offline
Posts: 184
|
|
« Reply #26 on: April 22, 2020, 04:18:10 PM »
|
|
|
So where is the flaw in my calculations then? Assumption 60 tooth crank wheel. One engine rotation at 7500rpm:
60sec * 1000 ms = 60000 ms
60000 / 7500 = 8 ms duration of one engine rotation
8 ms = 8000 us
Divide that by 60 you get ~133 us.
How did you come up with 2us???
Sorry woj, I was a bit quick there. 2,2us was my result but didn't take the 60sec/min into consideration.
|
|
|
Logged
|
|
|
|
noice
Newbie
Karma: +16/-3
Offline
Posts: 23
|
|
« Reply #27 on: May 08, 2020, 01:10:13 PM »
|
|
|
Had some drawbacks last weeks and couldn't spend much time on this. Attached to this post is a revised file. There is basically two functions: This first one is a simple accumulator for the sensor voltage. It runs on the 1ms raster. Bosch original code was used to read the ADC, only changing the target RAM address. seg003:000A1D00 umap_acu: ; CODE XREF: Raster_1ms+1C seg003:000A1D34 mov r4, word_FA48 seg003:000A1D38 mov r5, word_FA4A seg003:000A1D3C add r4, umap seg003:000A1D40 addc r5, ZEROS seg003:000A1D44 jmpr cc_NC, loc_8A1D4C seg003:000A1D46 mov r4, #0FFFFh seg003:000A1D4A mov r5, r4 seg003:000A1D4C seg003:000A1D4C loc_8A1D4C: ; CODE XREF: uhfm_umap_acu+44 seg003:000A1D4C mov word_FA48, r4 seg003:000A1D50 mov word_FA4A, r5 seg003:000A1D54 sub word_FA4C, ONES seg003:000A1D58 rets The main function is above. It will take the mean of all readings and convert it to pressure. Than it will filter the signal using a lowpass filter with a variable factor for compensating the variable sample rate. Don't know if this will work, but I implemented this in 5 minutes, so I think its worth trying. After that dspfg_w is calculated and the map value is limited by psmx_w before being write to ps_w. Function is called using the CALLS from bgsrm_bps in the sync raster. In the end, the function jumps to next instruction after ps_w calculation in bgsrm_bps. seg003:000A1E00 SpeedDensity: ; CODE XREF: Raster_sync+50 seg003:000A1E00 seg003:000A1E00 ; FUNCTION CHUNK AT seg003:00060716 SIZE 00000088 BYTES seg003:000A1E00 seg003:000A1E00 push PSW seg003:000A1E02 atomic #4 seg003:000A1E04 or PSW, #0F000h seg003:000A1E08 and PSW, word_E008 seg003:000A1E0C nop seg003:000A1E0E sub r3, r8 seg003:000A1E10 mov r4, word_FA48 seg003:000A1E14 mov r5, word_FA4A seg003:000A1E18 mov word_FA54, r4 seg003:000A1E1C mov word_FA56, r5 seg003:000A1E20 mov r2, word_FA4C seg003:000A1E24 mov anzumap_w, r2 seg003:000A1E28 mov r4, ZEROS seg003:000A1E2C mov r5, #0 seg003:000A1E2E mov word_FA48, r4 seg003:000A1E32 mov word_FA4A, r5 seg003:000A1E36 mov word_FA4C, ZEROS seg003:000A1E3A pop PSW seg003:000A1E3C mov r4, anzumap_w seg003:000A1E40 cmp r4, ZEROS seg003:000A1E44 jmpr cc_NZ, loc_8A1E4C seg003:000A1E46 mov r5, #1 seg003:000A1E48 mov anzumap_w, r5 seg003:000A1E4C seg003:000A1E4C loc_8A1E4C: ; CODE XREF: SpeedDensity+44 seg003:000A1E4C mov r4, anzumap_w seg003:000A1E50 mov r5, word_FA54 seg003:000A1E54 mov r2, word_FA56 seg003:000A1E58 mov MDH, r2 seg003:000A1E5C mov MDL, r5 seg003:000A1E60 divlu r4 seg003:000A1E62 jmpr cc_V, loc_8A1E6A seg003:000A1E64 mov r3, MDL seg003:000A1E68 jmpr cc_UC, loc_8A1E6E seg003:000A1E6A ; --------------------------------------------------------------------------- seg003:000A1E6A seg003:000A1E6A loc_8A1E6A: ; CODE XREF: SpeedDensity+62 seg003:000A1E6A mov r3, #0FFFFh seg003:000A1E6E seg003:000A1E6E loc_8A1E6E: ; CODE XREF: SpeedDensity+68 seg003:000A1E6E mov map_v, r3 seg003:000A1E72 exts #81h, #1 ; 'ü' seg003:000A1E76 mov r4, MAPGRAD seg003:000A1E7A shl r3, #5 seg003:000A1E7C mulu r3, r4 seg003:000A1E7E mov r5, MDL seg003:000A1E82 mov r9, MDH seg003:000A1E86 jmpr cc_N, loc_8A1E92 seg003:000A1E88 shl r9, #2 seg003:000A1E8A jmpr cc_C, loc_8A1E92 seg003:000A1E8C shr r5, #14 seg003:000A1E8E or r9, r5 seg003:000A1E90 jmpr cc_UC, loc_8A1E96 seg003:000A1E92 ; --------------------------------------------------------------------------- seg003:000A1E92 seg003:000A1E92 loc_8A1E92: ; CODE XREF: SpeedDensity+86 seg003:000A1E92 ; SpeedDensity+8A seg003:000A1E92 mov r9, #0FFFFh seg003:000A1E96 seg003:000A1E96 loc_8A1E96: ; CODE XREF: SpeedDensity+90 seg003:000A1E96 exts #81h, #1 ; 'ü' seg003:000A1E9A mov r3, MAPOFS seg003:000A1E9E jmpr cc_N, loc_8A1EAA seg003:000A1EA0 add r3, r9 seg003:000A1EA2 jmpr cc_NC, loc_8A1EB0 seg003:000A1EA4 mov r3, #0FFFFh seg003:000A1EA8 jmpr cc_UC, loc_8A1EB0 seg003:000A1EAA ; --------------------------------------------------------------------------- seg003:000A1EAA seg003:000A1EAA loc_8A1EAA: ; CODE XREF: SpeedDensity+9E seg003:000A1EAA add r3, r9 seg003:000A1EAC jmpr cc_C, loc_8A1EB0 seg003:000A1EAE mov r3, #0 seg003:000A1EB0 seg003:000A1EB0 loc_8A1EB0: ; CODE XREF: SpeedDensity+A2 seg003:000A1EB0 ; SpeedDensity+A8 ... seg003:000A1EB0 mov map_uf, r3 seg003:000A1EB4 mov r12, #3E14h seg003:000A1EB8 mov r13, #205h seg003:000A1EBC mov r14, nmot_w seg003:000A1EC0 calls 82h, Lookup1D seg003:000A1EC4 mov r12, r4 seg003:000A1EC6 mov r13, r3 seg003:000A1EC8 mov r14, word_FA52 seg003:000A1ECC mov r15, word_FA50 seg003:000A1ED0 calls 0, f_lowpass seg003:000A1ED4 mov word_FA50, r4 seg003:000A1ED8 mov word_FA52, r5 seg003:000A1EDC mov map, r5 seg003:000A1EE0 sub r5, ps_w seg003:000A1EE4 jmpr cc_C, loc_8A1EEE seg003:000A1EE6 jmpr cc_NN, loc_8A1EF4 seg003:000A1EE8 mov r5, #7FFFh seg003:000A1EEC jmpr cc_UC, loc_8A1EF4 seg003:000A1EEE ; --------------------------------------------------------------------------- seg003:000A1EEE seg003:000A1EEE loc_8A1EEE: ; CODE XREF: SpeedDensity+E4 seg003:000A1EEE jmpr cc_N, loc_8A1EF4 seg003:000A1EF0 mov r5, #8000h seg003:000A1EF4 seg003:000A1EF4 loc_8A1EF4: ; CODE XREF: SpeedDensity+E6 seg003:000A1EF4 ; SpeedDensity+EC ... seg003:000A1EF4 mov dpsfg_w, r5 seg003:000A1EF8 mov r5, map seg003:000A1EFC cmp r5, psmx_w seg003:000A1F00 jmpr cc_ULE, loc_8A1F06 seg003:000A1F02 mov r5, psmx_w seg003:000A1F06 seg003:000A1F06 loc_8A1F06: ; CODE XREF: SpeedDensity+100 seg003:000A1F06 mov ps_w, r5 seg003:000A1F0A jmps 86h, loc_860716 seg003:000A1F0E ; --------------------------------------------------------------------------- I'm still waiting for parts for my car, so I couldn't test this file in a running engine, but everything works fine on the bench.
|
|
|
Logged
|
|
|
|
golfputtputt
|
|
« Reply #28 on: July 12, 2021, 04:49:05 AM »
|
|
|
How’d this end up working out? Had some drawbacks last weeks and couldn't spend much time on this. Attached to this post is a revised file. There is basically two functions: This first one is a simple accumulator for the sensor voltage. It runs on the 1ms raster. Bosch original code was used to read the ADC, only changing the target RAM address. seg003:000A1D00 umap_acu: ; CODE XREF: Raster_1ms+1C seg003:000A1D34 mov r4, word_FA48 seg003:000A1D38 mov r5, word_FA4A seg003:000A1D3C add r4, umap seg003:000A1D40 addc r5, ZEROS seg003:000A1D44 jmpr cc_NC, loc_8A1D4C seg003:000A1D46 mov r4, #0FFFFh seg003:000A1D4A mov r5, r4 seg003:000A1D4C seg003:000A1D4C loc_8A1D4C: ; CODE XREF: uhfm_umap_acu+44 seg003:000A1D4C mov word_FA48, r4 seg003:000A1D50 mov word_FA4A, r5 seg003:000A1D54 sub word_FA4C, ONES seg003:000A1D58 rets The main function is above. It will take the mean of all readings and convert it to pressure. Than it will filter the signal using a lowpass filter with a variable factor for compensating the variable sample rate. Don't know if this will work, but I implemented this in 5 minutes, so I think its worth trying. After that dspfg_w is calculated and the map value is limited by psmx_w before being write to ps_w. Function is called using the CALLS from bgsrm_bps in the sync raster. In the end, the function jumps to next instruction after ps_w calculation in bgsrm_bps. seg003:000A1E00 SpeedDensity: ; CODE XREF: Raster_sync+50 seg003:000A1E00 seg003:000A1E00 ; FUNCTION CHUNK AT seg003:00060716 SIZE 00000088 BYTES seg003:000A1E00 seg003:000A1E00 push PSW seg003:000A1E02 atomic #4 seg003:000A1E04 or PSW, #0F000h seg003:000A1E08 and PSW, word_E008 seg003:000A1E0C nop seg003:000A1E0E sub r3, r8 seg003:000A1E10 mov r4, word_FA48 seg003:000A1E14 mov r5, word_FA4A seg003:000A1E18 mov word_FA54, r4 seg003:000A1E1C mov word_FA56, r5 seg003:000A1E20 mov r2, word_FA4C seg003:000A1E24 mov anzumap_w, r2 seg003:000A1E28 mov r4, ZEROS seg003:000A1E2C mov r5, #0 seg003:000A1E2E mov word_FA48, r4 seg003:000A1E32 mov word_FA4A, r5 seg003:000A1E36 mov word_FA4C, ZEROS seg003:000A1E3A pop PSW seg003:000A1E3C mov r4, anzumap_w seg003:000A1E40 cmp r4, ZEROS seg003:000A1E44 jmpr cc_NZ, loc_8A1E4C seg003:000A1E46 mov r5, #1 seg003:000A1E48 mov anzumap_w, r5 seg003:000A1E4C seg003:000A1E4C loc_8A1E4C: ; CODE XREF: SpeedDensity+44 seg003:000A1E4C mov r4, anzumap_w seg003:000A1E50 mov r5, word_FA54 seg003:000A1E54 mov r2, word_FA56 seg003:000A1E58 mov MDH, r2 seg003:000A1E5C mov MDL, r5 seg003:000A1E60 divlu r4 seg003:000A1E62 jmpr cc_V, loc_8A1E6A seg003:000A1E64 mov r3, MDL seg003:000A1E68 jmpr cc_UC, loc_8A1E6E seg003:000A1E6A ; --------------------------------------------------------------------------- seg003:000A1E6A seg003:000A1E6A loc_8A1E6A: ; CODE XREF: SpeedDensity+62 seg003:000A1E6A mov r3, #0FFFFh seg003:000A1E6E seg003:000A1E6E loc_8A1E6E: ; CODE XREF: SpeedDensity+68 seg003:000A1E6E mov map_v, r3 seg003:000A1E72 exts #81h, #1 ; 'ü' seg003:000A1E76 mov r4, MAPGRAD seg003:000A1E7A shl r3, #5 seg003:000A1E7C mulu r3, r4 seg003:000A1E7E mov r5, MDL seg003:000A1E82 mov r9, MDH seg003:000A1E86 jmpr cc_N, loc_8A1E92 seg003:000A1E88 shl r9, #2 seg003:000A1E8A jmpr cc_C, loc_8A1E92 seg003:000A1E8C shr r5, #14 seg003:000A1E8E or r9, r5 seg003:000A1E90 jmpr cc_UC, loc_8A1E96 seg003:000A1E92 ; --------------------------------------------------------------------------- seg003:000A1E92 seg003:000A1E92 loc_8A1E92: ; CODE XREF: SpeedDensity+86 seg003:000A1E92 ; SpeedDensity+8A seg003:000A1E92 mov r9, #0FFFFh seg003:000A1E96 seg003:000A1E96 loc_8A1E96: ; CODE XREF: SpeedDensity+90 seg003:000A1E96 exts #81h, #1 ; 'ü' seg003:000A1E9A mov r3, MAPOFS seg003:000A1E9E jmpr cc_N, loc_8A1EAA seg003:000A1EA0 add r3, r9 seg003:000A1EA2 jmpr cc_NC, loc_8A1EB0 seg003:000A1EA4 mov r3, #0FFFFh seg003:000A1EA8 jmpr cc_UC, loc_8A1EB0 seg003:000A1EAA ; --------------------------------------------------------------------------- seg003:000A1EAA seg003:000A1EAA loc_8A1EAA: ; CODE XREF: SpeedDensity+9E seg003:000A1EAA add r3, r9 seg003:000A1EAC jmpr cc_C, loc_8A1EB0 seg003:000A1EAE mov r3, #0 seg003:000A1EB0 seg003:000A1EB0 loc_8A1EB0: ; CODE XREF: SpeedDensity+A2 seg003:000A1EB0 ; SpeedDensity+A8 ... seg003:000A1EB0 mov map_uf, r3 seg003:000A1EB4 mov r12, #3E14h seg003:000A1EB8 mov r13, #205h seg003:000A1EBC mov r14, nmot_w seg003:000A1EC0 calls 82h, Lookup1D seg003:000A1EC4 mov r12, r4 seg003:000A1EC6 mov r13, r3 seg003:000A1EC8 mov r14, word_FA52 seg003:000A1ECC mov r15, word_FA50 seg003:000A1ED0 calls 0, f_lowpass seg003:000A1ED4 mov word_FA50, r4 seg003:000A1ED8 mov word_FA52, r5 seg003:000A1EDC mov map, r5 seg003:000A1EE0 sub r5, ps_w seg003:000A1EE4 jmpr cc_C, loc_8A1EEE seg003:000A1EE6 jmpr cc_NN, loc_8A1EF4 seg003:000A1EE8 mov r5, #7FFFh seg003:000A1EEC jmpr cc_UC, loc_8A1EF4 seg003:000A1EEE ; --------------------------------------------------------------------------- seg003:000A1EEE seg003:000A1EEE loc_8A1EEE: ; CODE XREF: SpeedDensity+E4 seg003:000A1EEE jmpr cc_N, loc_8A1EF4 seg003:000A1EF0 mov r5, #8000h seg003:000A1EF4 seg003:000A1EF4 loc_8A1EF4: ; CODE XREF: SpeedDensity+E6 seg003:000A1EF4 ; SpeedDensity+EC ... seg003:000A1EF4 mov dpsfg_w, r5 seg003:000A1EF8 mov r5, map seg003:000A1EFC cmp r5, psmx_w seg003:000A1F00 jmpr cc_ULE, loc_8A1F06 seg003:000A1F02 mov r5, psmx_w seg003:000A1F06 seg003:000A1F06 loc_8A1F06: ; CODE XREF: SpeedDensity+100 seg003:000A1F06 mov ps_w, r5 seg003:000A1F0A jmps 86h, loc_860716 seg003:000A1F0E ; --------------------------------------------------------------------------- I'm still waiting for parts for my car, so I couldn't test this file in a running engine, but everything works fine on the bench.
|
|
|
Logged
|
|
|
|
Blazius
|
|
« Reply #29 on: July 27, 2021, 02:19:56 PM »
|
|
|
So I have been looking at this recently and noticed a few things with the latest bin posted. If you crossflash this file it wont work out from the box. Some update or whatever would be nice but OP does not seem to check / reply on nefmoto for a while so anyway...
The ADC setup/ variable enable has been changed ofcourse, replaced uushk_w - rear O2 ADC voltage with a custom name for the MAP ADC voltage, set in IRAM ofcourse.
A1D00 is again an accumulator for the voltage, works exactly like maf/ etc voltage ones, except with new free target ram.
Now the main function... This references some maps that are simply not there in the bin, I am not sure if this was intentional or not but yeah.
There is both a gradient and an offset, just like the boost sensor, I assume these should be setup exactly the boost sensor ones, from the looks of it. 17E10 and 17E12.
After, there is 1D lookup with nmot. Map referenced at 17E14 also missing. Now how should this map look ? Bosch function ofcourse uses a 2d map nmot and psspvdkd_w its also maxed out on every value so yeah.
So how should the filtering map look like?
|
|
« Last Edit: July 27, 2021, 04:00:49 PM by Blazius »
|
Logged
|
|
|
|
|