AC-CDI v6.7

[ARCHIVE] This version is discontinued.
Consider to build v7 instead!


  • Adaptable to other single-cylinder bikes.
  • High precision (0.07 degree).
  • Preprogrammed for XT400/550/2strokes (84 or 106 points).
  • Software source unavailable (only .HEX).
  • Need a working charging coil for the capacitor.
  • Need a battery


PIC 16F628A v6.7   1500 to 40000rpm
To make the PCB PCB Eagle v6 files
To build the CDI Schematic Partlist
To burn the PIC Softwares
Source Code ACCDI v6.4.3
Draw the advance curve Excel file

How does it works?

The part CDI (Capacitive Discharge Ignition) is described in the page “fixed ignition“.

Use of a 16f628 (cheaper and better than the 16f84).
No more crystal, internal 4MHz clock instead, no more connector.
Much more accurate and steady than v5.4.

Let us see this in details…

Pulses coming from the 12° pickup directly trigger the SCR via D7 R7 C10. This pulse doesn’t go through the PIC.

At the same time, pulses coming from the 36° pickup are limited to 5 volts by the Zener D9 then trigger the PIC (RB4 – pin 10).
(PIC input detect any tension higher than 1,8 Volts.)

The green LED D1 come on at each correct pulse received from sensor 36°.

A delayed pulse, according to the programmed advance curve, is available on pin 8 (RB2) and trigger the SCR T1 via D2,R7,C10.

If your bike have only one pulsar (pickup), connect it to the 36° input and leave the 12° input unconnected.
The polarity of the pickup is important, don’t hesitate to invert the 2 wires of the pickup.

Ways of the 12 and 36deg signals:

There are 2 sparks by revolution:one before the TDC (from the 36deg pickup)
and another at TDC (from the 12deg pickup – if connected)
This second spark is useless. (wasted spark)

On animation below, one can see the signal from the pickup (white trace, PIC input pin10) and the signal for the SCR (pink, PIC output, between D2 and R7) at various speeds between 1300rpm to 6000rpm

scale (5ms/div 2v/div)

We can see:
– At low rpm: 1300rpmthe output signal is provided a little time after the input signal, therefore at the TDC.
-At high rpm: 6000rpmthe output signal is provided at the same time as the pickup signal, therefore before the TDC.


Max Ignition Frequency 400Hz.

The software can reach 730Hz but SCR is limiting to 400Hz.

Warning! If there is one spark lose, the max rpm is divided by 2

IE: 400Hz = 44000 RPM when only ONE spark by rotation or 22000 RPM if TWO sparks by rotation (one spark is wasted)

Main functions of the software

Easy kickstart
Advance is set for a easy kickstart at 300rpm.

Coil protection
Coil is never on while the engine is stopped.

RPM Limitation: (optional)
Over 10.900 RPM for the 2strokes version or 6510rpm for XT400, ignition is stopped, no more sparks. This limitation can be removed (JP2).

Advance calculation:
Between the maximum and the minimum RPM, the PIC measure the duration between 2 pick up pulses [the number of 4us (four microsecondes) periods between two pulses] to deduce the speed of the engine.
According to the revs, the PIC is calculating the position in the map.

Duration of the spark:
The duration of the spark cannot be adjust on a CDI, it depend of the capacitor value and the coil value.
The duration while the thyristor is on to discharge the capacitor, is set to 1ms (one milli second)

The curve is defined by 80 to 106 points. The accuracy is high: 0.07 degree.

The source code is not available and the software is disued. Please consider V7 instead.

– At startup, Led D1 blinks 4times if map1 is selected, and 3times if map2 is selected.
– When pickup input pin10 is high [>2.4v], D1 led is on
So at each pulse received from the pickup, LED D1 blink.
  If LED D1 stay on, that mean pin10 is always high!
Measure pin10 and try to lower R9 value from 470Kohm to 1.8Kohm or less…

– You can remove D1 + R6 to lower the current consumption.
– At each pulse from the PIC (output pin8) going to the SCR, LED D2 blink.
– D2 is a High sensibility LED
– You can replace D2 by a 1N4148 if you don’t like blinking led.

JP1: no jumper => use first curve (map1), jumper ON => use second curve (map2).
JP2: no jumper => no RPM limitation, jumper ON => RPM limitation.



Click here for more info
(works with v6.6 hardware.
jumper JP1 ON = map1)
Source .HEX
(ASM unavailable)
PIC 16F628
for XT400-550(1953-6510rpm)
PIC 16F628
for DR800(1723-6510rpm)
PIC 16F628
for 2 strokes(3170-10900rpm)
PIC 16F628
for 2 strokes(3446-13020rpm)
PIC 16F628A
for DTLC125
57U – 1987(1386-10200rpm)
PIC 16F628A
for karting Zanella 125cc(2083-15625rpm)
PIC 16F628A
for Honda Cub 110cc(989-13021rpm)
PIC 16F628A
for a 2 strokes RC model engine(1023-9014rpm)
PIC 16F628A
for a 4 strokes scooter(1023-9014rpm)
PIC 16F628A
for Honda CM400(977-15625rpm)
(works with v6.6 hardware. jumper JP1 ON = map1)
Source .HEX (Source code .ASM unavailable)
PIC 16F628A
for Honda S50(989-11719rpm)
PIC 16F628A
for XT400-550(1037-8082rpm)
PIC 16F628A
for FML163
Chinese 200cc(1005-10653rpm)
PIC 16f628A
for Yamaha XT200(1037-8081rpm)
v6.7 Source .HEX (ASM unavailable)
PIC 16F628A
for scooter 50cc
Honda Lead AF20(989-11719rpm)
PIC 16F628A
for Honda Cup 110cc(988-13040rpm)
PIC 16F628A
for FML163
Chinese 200cc 4 strokes2 maps


Printed Circuit Board.

Warning: PCB for version 6 is different than the one for v7 !


Compatibility with others pickups.

Starting from v6.5, PCB has been modified in order to be triggered either by a positive-first pickup signal or a negative-first signal. Just use and weld the appropriate components:

For positive-first pickup signal

Yamaha, Kawasaki

Remove: Q1, Q2, R10, R11
Add : D4, D9, R9, C3

For negative-first pickup signal

Honda, Suzuki

Remove: D4, D9, R9, C3
Add : Q1, Q2, R10, R11



  • Remove the PIC16F628 of its support.
  • Take out the spark plug from the engine and connect it to the spark plug wire.
  • Ground the metal part of the spark plug to the bike’s frame by touching a good metal part.
  • Hook up the CDI to the alternator and to the spark coil
    (Don’t connect neither the +12v, nor the sensor, nor the kill switch)
  • Kick start several times to charge the big C11 condensator.
  • Measure the tension between Anode and Kathode of thyristor T1. You must read around 150Vdc. (the tension slowly decreases because the condensator is discharging into the multimeter…)
    Test point
  • Wait 30sec, measure again: the tension should not drop while the multimetre is disconnect.
  • Kick start several times to reload the big C11 condensator.
  • Touch the 12deg input with a wire connected to the +12v battery to trigger the SCR.
  • You’ll see a spark at the spark plug.
  • Connect all the wires from the pickup.
    (But don’t connect the +12v and don’t connect the kill switch)
  • Kickstart, the 12deg pickup pull out a pulse each turn, this pulse trigger the SCR T1 through D7, R7, C10 and produce a spark.
  • Insert the PIC16F628 in its support, in the good position! Plug in the +12v power.
  • Since V6.5, test LED is blinking 4 times at startup, meaning that PIC+programmation+software are OK.
  • Screw the spark plug on the engine,ensure everything is hoocked up (ground, +12volts, alternator, pickup, spark coil, spark plug) and start the engine
  • You can test the CDI with my Pickup Simulator



Click here for more info
– V5 ignition fitting a scooter:

– V6.5 ignition fitted an XT550

– V6.5 ignition fiting an Honda CL50 – 4strokes:

– V6.5 ignition fitted a DTR:

– V6.5 ignition fitted a Honda S50

– V6.5 ignition fitted a 250cc (167FMM):

– Benchmark:

– V6.5 tested on strobe:

– V6.6 without advance:



Version 6.0:
Version 6.0: XT400
Version 6.5: P1040260.jpg


Click here for more info
  • Version 1.0:
    • Initial release.
  • Version 1.1:
    • [hard.] U3D and U3B swap.
    • [soft.] Modification of the comments.
  • Version 2.0:
    • [hard.] Adding R15+R16. value of R2,R7,R10,C7. JP7=ground
    • [hard.] Adding R15+R16, JP7=gnd, pin connection of bridge D4,
      thyristor Q1, U4, moving SIOV RV1
    • [soft.] Advance calculation correction.
  • Version 2.1:
    • [hard.] Value of C7, C9
    • [soft.] Excel sheet version= XLSA1.3
  • Version PCM2.2:
    • [soft.] Advance calculation modification.
      (15000RPM max, dwell=2ms)
    • [soft.] Excel sheet version= XLSA1.4
  • Version PCM2.8:
    • [soft.] Modification of register definitions.
    • [soft.] Excel sheet version= XLSA2.2
  • Version PCM3.0:
    • [soft.] Advance calculation correction.
      (26000RPM max at dwell=1ms)
    • [soft.] Possibility of large advance values.
    • [soft.] Excel sheet version= XLSA3.0
  • Version PCM3.2:
    • [soft.] Advance calculation correction.
      (80000RPM max at dwell=1ms)
    • [soft.] Excel sheet version= XLSA3.2
  • Version PCM4.2:
    • [soft.] simplification, 4MHz crystal, suppression extra pluses at low RPM, reliabily. 1000 to 8000rpm
    • [soft.] Excel sheet version= XLSA4.2
  • Version PCM4.3:
    • [soft.] same as PCM4.2 but 1500 to 16000rpm. 2 strokes curve.
    • [soft.] Excel sheet version= XLSA4.3
  • Version 5.0:
    • [hard.] With DB9 connector
  • Version 5.1:
    • [soft.] Corrections in software for XT400.
  • Version 5.2:
    • [hard.] Suppress D4. Change R6,R7 values.
  • Version 5.3:
    • [soft.] 2 map selectables. – ASM for 16f628 available
  • Version 5.4:
    • [hard.] Improve RESET circuit R7+C12
  • Version 6.0:
    • [hard.] Remove DB9 connector
    • [soft.] Rewriting for a better accuracy.
  • Version 6.1:
    • [soft.] Updated software.
  • Version 6.2:
    • [soft.] Adding software for 2 strokes.
  • Version 6.3:
    • [soft.] Software written for better precision (0.07°).
  • Version 6.4:
    • [hard.] Add D4. (To don’t disturb the Rev-counter)
  • Version 6.5:
      • [hard.] PCB include voltage inversion.
      • [hard.][soft.] Add shift LED.
      • [hard.][soft.] Add output for choke relay.
      • [soft.] D1 LED blinks 4 times at startup.
      • [soft.] Version number written in .HEX file.
    :0400000041300E2854 (41h = 65d => v6.5)
  • Version 6.6:
    • [soft.] Led D1 is on when RPM is outside the excel map.
    • [soft.] Bug fixed. (bad timing between 920 and 980rpm)
  • Version 6.7:
    • [soft.] Led D1 is on when pickup is high.
    • [soft.] Internal pull up resistors ON.
    • [soft.] Error corrected. (jumpers off = map1 and no RPM limit)
    • [soft.] D1 LED blinks 4 times at startup when map1 is selected.
    • [soft.] D1 LED blinks 3 times at startup when map2 is selected.
    • [hard.] R9 goes from 470K to 4.7K