DC-CDI 89C2051

A great job from  Thomas Schattat from Germany.





Designed for a TT600R, this ignition produces itself the high voltage necessary to the load of the CDI capacitor (Capacitive Discharge Ignition). It doesn’t need a alternator.

Circuit MC34063
DC-DC converter control circuit” switch on/off the primary coil of the L1 transformer at 25KHz.

At the secondary of the L1 transformer, one can find the primary voltage multiplied by 10 then rectified by the B1 bridge. One get approximately 160Vcc which charges the C2 capacitor.
The energy in the spark is E=0.5 * C * U*U (joules,farad,volts)

At 12.000 rpm, the time available to charge a capacitor of 1uF is 5ms
To goes from 0 to 320volts in 5ms, it need:

E=0.5 * C * U*U
E=0.5 x 1 x 10-6 x 3202
E=0.5 x 1 x 10-6 x 102400
E=0.05 joules

0.05J for 5ms => Then for 1 second (1000ms):
1000/5 x 0.05 = 10 joules
To convert in Watt, 1 joule = 1 Ws (watt second) so 1joule/1second = 1 watt
E=10 watts.

The positive shape of the pickup signal is shorted by D12 diode.
Only the negative part of the signal is used. The dividing bridge R16 + R18 fixes the potential at AIN0 entry to 2.9volts.
D9 and D10 protects the entry from over-voltage.

The negative pulse is detected by the processor, which calculates the necessary delay then provide a zero volt pulse to Q1 transistor.
The transistor than become ON and blocks the inverter circuit MC34063 so that it does not produce any more high tension and trigger at the same time T2 thyristor.
The thyristor discharges the charged capacitor C2 in the ignition coil.
The coil amplifies this tension by approximately 100, and provides 20.000volts to the spark plug which generates a spark.



Source Excel
for TT600R
cdi8.ZIP mapXLSB10.XLS

Download: right click / Save link as…

Compiled with http://www.batronix.com/
You can remove the line “INCLUDE 89C2051.mc” if your compiler doesn’t need it but make sure that the ports I used are known by the assembler, otherwise you’ll get a different error.
Also the syntax may not completely be accepted by your compiler and you may have to tweak a bit.



RPM Limitation:
Over 8000 RPM, the ignition is switch off (line 54)
Under 588 RPM, the ignition is switch off (line 56)

Advance calculation:
Between the maximum and the minimum RPM, the ATMEL measure the duration
between two pick up pulses in 400us units (four hundred microseconds)
to deduce the speed engine in RPM.

According to the speed, the processor calculate the position
in the map. (line 59)

At this position of the map (a 256 values table, lines 105 to
116) the ATMEL found a delay value.

Then the ATMEL is waiting during this delay [in 100us units
(hundred microseconds)].

At the end of the delay, a 400us duration pulse is sent to the
thyristor.(line 90)

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. After all we can adjust the duration of the pulse that trigger the thyristor.
This pulse duration can be change line 85, but without impact on the spark duration.

You can change directly the values from the table (lines 105 to 116)

And don’t forget:
The timing delays in the assembler program are based on a pickup coil mounted about 58° before highest piston position, different bikes may have different positions here!!



Assembling the .ASM file in a .HEX file with a assembler:



Atmel DC-CDI
for TT600R
Schematic Eagle v4.11 Composants
Schematic.PDF Schematic.SCH liste.txt


Atmel DC-CDI for TT600R Circuit imprimé.PNG Eagle V4.11
Cuivre & composants.PDF Cuivre & composants.BRD



L1: naked transformer available at Conrad Electronics

order #:51 66 43
Primary coil : 25 turns 0.5mm wire
secondary coil: 160 to 180 turns 0,15mm wire

Important : Leave a little air-gap between the 2 metal parts by slipping a bit of paper for example.

Another How-To build the transformer.


– This ignition on a BMW F650 Enduro:

7 Comments on "DC-CDI 89C2051"

  1. Hi all.
    It’s a very simple design I will try to build.
    I have done a search in Conrad electronics for the transformer parts and I can’t find it with this part number. Please, could you please send the links?


  2. Hi guys,
    Can you help me? This CDI fitted on my own Gilera Rc 600 electric starter 12V (1989)?
    My motorbike (4 strokes, one cylinder)had an DC-CDI Denso.
    Factory advance values are: 7° a 1200rpm – 30° at 4000rpm (one output for low rpm and one for high rpm)

    • Hi,
      It should probably work using the high rpm output. But it depend on how is the pickup signal (tension, polarity) and if he is referred to ground…
      In some cases, it can need a input interface.

  3. hola me podriais alludar con la programacion del AT89C2051?
    gracias un saludo

  4. hi 2 questions

    1st, will a ATMega328 chip as used in the Ardino platform work with the code?
    for use on twin cylinder machine with 2 pick-ups (one for each cylinder) how would the code be adapted to deal with 2 channels? im also considering instead of the capacitor system maby use a transistor (something like DIP132 Bosch coil driver) to drive a DC coil

    • Hi,
      – No it’s not the same code between this 89C2051 and the ATMega that power the Arduino
      – it’s must be entirely rewrite! Or you may use 2 separate cdi, one for each cylinder.
      – Then it will no more be a DC-CDI but a TCI meaning the electronic AND the software are differents!

Leave a comment

Your email address will not be published.


8 + 3 =