DC-CDI 89C2051

A great job from  Thomas Schattat from Germany.



  • Adaptable to other single-cylinder bikes.
  • Tuning of the advance curve (255 points).
  • Software source available (.ASM).
  • 7.500RPM max
  • Compact & economic.
  • Don’t need a alternator.
  • Need a battery


Designed for a TT600R, this ignition is generating the High Voltage needed to load the capacitor.
It doesn’t need a AC 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 B1 bridge. One get approximately 160Vcc that charges 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 go 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 = 50mJ

50 to 100millijoules are enough to get a spark.

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 during 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.



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:



Schematic Schematic Eagle v4.11 Composants
Schematic.PDF Schematic.SCH liste.txt


PCB Circuit imprimé.PNG Eagle V4.11
Cuivre & composants.PDF Cuivre & composants.BRD


Software Source Excel
cdi8.ZIP mapXLSB10.XLS

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.


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:

22 thoughts 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)

    1. 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. 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

    1. 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!

  4. Hello friends, I am looking for help from you. I can not handle HEX file for TT600R if any of you has a working I will be very grateful to send it to me !!

  5. Hello,
    I need DC CDI without any delay or advance (controlled by external electronic unit).
    How can i use this schematic to build it without 89C2051?

    1. Hello,
      The “external unit” must be able to drive the SCR and put the DC converter off during the spark.
      It could be connected to R1 and replace the ATMEL processor.

        1. Hi,
          The link is in Chinese and I don’t read it…!
          I suppose EFI stands for Electronic Fuel Injection
          There is nothing common between EFI and CDI! I mean some “black boxes” can drive both CDI (inside the bbox) and EFI but mine are JUST a CDI and cannot drive a EFI.
          Sorry I really don’t understand what you are trying to connect…
          It’s impossible to draw a schematic of smth I don’t know and I don’t understand.

          1. Thierry,
            All i need is a standard analogue DC CDI module without any advance.
            This Electronic Fuel Injection system controls advance by generating standard pickup signal to DC CDI box (with calculated delay in Engine Control Unit).
            I know that i can buy the cheapest DC CDI for GY6 but i didn’t know if there is any advance (even 2 steps) in this modules.
            Maybe now You can understand me?

            I’m from Poland in Europe.
            I don’t understand Chinese to
            I’m using google translate.

  6. Thank You Thierry, i will try it.
    One more thing, can i replace D3:BA189 with something else (i couldn’t get it)?

  7. Hi Thierry,
    do you have scheme and asm file for 4 cylinder’s CDI? it use total 2 coils ( one coil for two spark plugs). from the manual it has ignition timing 13* BTDC below 1500 +- 150 r/mins and 35* BTDC above 2350 +- 150 r/mins.

    1. Multi-cylinders:

      If the sparks distribution is mechanical with the use of an Delco distributor
      =>my CDI works BUT 2000rpm in the XLS file for 1cyl equal 1000rpm for 4cyl.

      but if there is distributorless with multiples coils (ie: 4 coils for 4 spark plugs, 2 coils for 4 spark plugs) the CDI must drive each coil at the right moment but my CDI cannot, there are just able to drive only one coil (or 2 coils in parallel).
      =>my CDI won’t works


      my CDI works on BMW as they are opposed twin/4 strokes, and needs only one spark every 360°, the very same as a single cylinder/2 strokes.
      HT coil is double, so it generates at the same time 2 sparks, and one is wasted as the other cylinder is on its exhaust stroke.
      =>my CDI should works

      For bi that are not opposed, => my CDI won’t work


      If there is no separate pickup and the timing is done by using the High Voltage of the alternator
      =>my CDI won’t works

      If there is a separate pickup providing at least 3 volts
      =>my CDI should works
      but you eventually have to reverse the signal to get a positive signal first in order to have a good timing.

  8. Hello Thierry,

    I am facing a problem with compiling the file CDI8.asm. I am using two programs: Batronix Prog Studio and Keil uVision 5. There are two syntactical errors. I am not familiar with programming and I would like to ask you to send me a ready hex if possible.

    1. Hell Billi
      Sorry but I don’t know about AVR, as I wrote this soft is not mine. The author said in the comment section:
      “;Also the syntax may not completely be accepted by your compiler and you may have to tweak a bit.”
      The new/other syntax is certainly not too hard to find.

      Also you can use and adapt the ATTiny which is better and simpler:


  9. Hi Thierry,

    I am French residing in Hungary, having strong problem as follow…
    Please help to resolve incredible problem created by lack of ignition (CDI-DC type) for my motorbike Regal Raptor DD 125E (from 2008, copy of Honda Rebel) absolutely new, bough as scam in Austria and actually uselees !
    Thank you to say which of ready to use of your kits cna by adapted to my problem ?
    Please answer, after which I will send you some pics.
    Thank you andhave anice day

    1. Hi,
      Why don’t you give ALL information ?
      I had to google for this unknown brand to discover it’s a 2cyl !
      All CDIs here are for ONE cyl with ONE pickup.
      Depending on the architecture, it can work on TWO cyl if there have only ONE pickup.
      See: https://transmic.net/v9/doc_cylinders_strokes.pdf

      https://transmic.net/2016/07/17/dc-cdi-16f628-v2/ is a DC-CDI and use a software that let you program the advance curve with a PIC programmer.
      For more discussion PM me directly.

Comments are closed.