Still stock.
I can temporary wire the controller for testing with the d580 coils I have.
Still stock.
I can temporary wire the controller for testing with the d580 coils I have.
So it sounds like you should be doing routine maintenance of your opti, which means pulling the water pump and replacing if it's been a while. Open up your opti and see if there's any oil or coolant contamination. Check the bearing for smoothness. Replace the oil seals in the front of the timing cover. Replace the optical sensor if there's no other evidence of a problem. I would replace it regardless because there's so much to remove to get at it. Be prepared to replace the opti sub-harness because the retainer clip on the distributor end gets brittle and tends to break easily.
Switching to this setup will make it run worse or not at all if your optical sensor is dying or there's an arc hole in the trigger wheel.
Getting around lossy / intermittent high res signal will require switching to time based dwell and spark advance, and I've already stated that's not going to happen any time soon. It's so hard to get time to work on what I'm currently trying to accomplish, that I was ready to throw in the towel yesterday.
Last edited by spfautsch; 02-14-2020 at 06:28 PM.
I did some more investigation and found the high res be totally dead. I hook up a led on the high res line while rotating the engine and it is constant 5volts, I hook it to the low res signal and it goes low to high while engine is rotated. I haven`t figure yet, when the line is high=5v, does the beam goes through the slots or at 0volts the beam goes through the slots on the opti wheel.
It looks like the optical sensor is done. I serviced it soon and I hope I didn`t went too much on the sealing.
Changing the optical sensor will be POA, since the wheel is dot welded. Do you have any experience sourcing reliable parts. I found some chinese crap sensors and some so called japan sensors.
It might be because the approach is not headed in the right direction.that I was ready to throw in the towel yesterday.
All pre lt1 pcms were time based spark, which is also inferior due to spark scatter at startup and heavy throttle change. It wasn`t used until ls1 pcm which are much faster and accurate for the time based spark.
I traced some pcm code to see how it handles the loss of high res and it looks it is using some really simple conversion from degrees to ms.
We don`t need good running engine on low res. We need limp home running engine.
I have an idea how to sequence the coils if high res is bad. Measuring the off and on time through 1 low res event and comparing the off and on time to some percentage. Since the different slot widths, a pattern can be made for identifying the cyl id.
Your only hope is to utilize the system timer. I will get you some ideas from the lt1 code, which also uses 16bit timer. It is incremented each cpu clock cycle.
Do you have some info on the avr registers to look at.
I answered these questions in Tom's thread on the F-Body ECM reverse engineering here. See posts 17 and 18.
I put a link to what I'm running in post #589. Mouse over the words "optical sensor". I've had zero issues with these except that they do not fit in the Delphi opti body without some modification to the body or adding washers between the sensor and the body. They fit perfectly in the OE Delco-Remy body.
Edit: It pains me to have to disagree with you, but this setup absolutely requires the hi res signal to detect sequence, period. Detecting sequence from time is going to be problematic at best because it has to be 100% every time or the PCM will flood the engine firing the injectors in batch mode because it doesn't need to know sequence immediately. Time based (sequence detection) simply wont work because it will take forever and there can potentially be a huge amount of RPM variation during cranking, especially for a cold engine with a less than healthy battery.
The PCM with a mechanical distributor can limp you home with sequence off by any number of degrees. Fueling will be out of whack because EOIT won't be right, but it will still fire and get you home. We have no such luxury with spark timing in a coil-per-cylinder setup. 90 degrees off and it won't run.
Last edited by spfautsch; 02-15-2020 at 03:25 AM.
Thanks for the links. I might need the earlier version of the sensor here.
So in my case the beam is broken all the time and there is no ground path applied. It looks like the light emitting part is gone, or the light receiver part can`t interpret light. Did any one tried to replace some of these inside the sensor.The high res pin (adjacent to low res pin) conducts when the beam is not broken. Since I'm 100% positive the ecu doesn't care about the "polarity" of the high-res signal it wouldn't matter. But you learn something new every day.
Under some driving experience with the high res missing, I conclude that only spark is affected. There is built in logic for following the cylinder id and the fueling is time based and still runs sequential[It needs extra confirmation]. It is running on x8 low res signal. There is some built in sequencer in the TPU that takes long time to synchronized. Because the irq runs on each low res pulse, the eside logic just increase the cyl id by 1 each cycle.
I have to confirm also why the crank times are so long. I suspect the dwell is shut off or the fuel is shut off until the sequence is detected or code is set.
Now when I think more about the code, when cyl id is set to FF, the fuel part is skipped, so it needs to set the error which is set at 40 low res pulses without high res sensed and than the back up codes kick in and sequence the firing cyl id each cycle and allows fuel.
EOIT can also be enlighten in this kind of situation but I have to think more about it.
I will get you a commented code how spark is converted to time also.
I would postulate that crank times are long because the ecu wants to see a steady rpm signal on the low res rising edge.
Also, if I had to guess I'd say it wants to see the same sequence (in addition to steady rpm) for two full cam revolutions (four crank revs) before it wants to consider the data good. As I've mentioned, getting a steady cranking rpm can be problematic with an engine that has cold oil, good compression, and a less than optimal battery.
Looking at the time intervals, there's not a huge difference between the indexed cylinders so just looking at it from my perspective I think they wanted to be "really sure".
#4 - 15.5% (14/90)
#6 - 26.6% (24/90)
#7 - 37.7% (34/90)
#1 - 48.8% (44/90)
I have one that I killed by beating the hub out of the distributor body without removing the pickup. I can try opening it up and see what discrete componentry might be inside.
Last edited by spfautsch; 02-15-2020 at 07:32 PM.
Here is the time conversion of spark. It can also be referenced as end of dwell similar to EOIT usag
Code:RESERVED:5FD6 loc_5FD6: ; CODE XREF: IRQ+D74j RESERVED:5FD6 ldaa byte_149 ; SPARK ADV CALC if high res fail RESERVED:5FD6 ; 149= final spark advance RESERVED:5FD9 bpl loc_5FDC ; branch on advance RESERVED:5FDB nega ; invert on retard ff-* RESERVED:5FDC RESERVED:5FDC loc_5FDC: ; CODE XREF: IRQ+D9Dj RESERVED:5FDC ldab #$B6 ; '¦' ; some scalar RESERVED:5FDE mul ; [advance * $b6] *2*2 RESERVED:5FDF lsld ; This converts spark to multipllier coefficient for low res time RESERVED:5FDF ; 45 degrees roughly equals 1 as a multilpier. RESERVED:5FDF ; 45*=$2d*b6*2*2 = $7ff8[first byte is the multiplier [$80 =1] [0.007813 * X] RESERVED:5FE0 lsld ; a= multipler RESERVED:5FE1 ldx #$A1 ; 'á' ; x=low res time] RESERVED:5FE4 psha ; low res * multiplier result goes 14d RESERVED:5FE5 ldab 1,x RESERVED:5FE7 mul RESERVED:5FE8 adca #0 RESERVED:5FEA pulb RESERVED:5FEB psha RESERVED:5FEC ldaa 0,x RESERVED:5FEE mul RESERVED:5FEF tsx RESERVED:5FF0 addb 0,x RESERVED:5FF2 adca #0 RESERVED:5FF4 ins RESERVED:5FF5 std word_14D ; spark converted to time RESERVED:5FF5 ; example 32* at 6000rpm RESERVED:5FF5 ; 32=$20 ; 6000rpm=2.5ms RESERVED:5FF5 ; multipllier=5b[*0.007813=0.711] RESERVED:5FF5 ; RESERVED:5FF5 ; 2.5ms*0.711=1.777ms RESERVED:5FF5 ; 32* at 6000rpm =1.777ms before TDC or after tdc of previous cyl??? RESERVED:5FF5 ; might be related with dwell also. It could also be traslated as End of dwell RESERVED:5FF5 ; similar to EOIT. RESERVED:5FF8 ldaa word_15F2 ; some system timer needs to be figured how it is used. RESERVED:5FFB nop RESERVED:5FFC ldd word_15F2 ; load some TPU system timer??? RESERVED:5FFF addd word_A1 ; add low res to timer RESERVED:6001 tst byte_149 ; test if retard or advance RESERVED:6004 bpl loc_600B RESERVED:6006 addd word_14D ; add spark time on retard RESERVED:6009 bra loc_600E RESERVED:600B ; --------------------------------------------------------------------------- RESERVED:600B RESERVED:600B loc_600B: ; CODE XREF: IRQ+DC8j RESERVED:600B subd word_14D ; sub spark time on advance RESERVED:600E RESERVED:600E loc_600E: ; CODE XREF: IRQ+DCDj RESERVED:600E std word_1450 ; store time spark at tpu 1450
Bookmarks