Practical PIC Projects


Power LED Strobe
for PIC12F629 / 675



This project functions as a simple strobe for driving a high power type LED.  The output driver provides current limiting suitable for use with either 350mA / 1 Watt LEDs or 700mA / 3 Watt LEDs.

Output from these LEDs is extremely bright and visible from a considerable distance, even in daylight.

Four jumpers provide options for changing the pulse width, strobe repeat interval and single or double strobe flash.  There is also a Strobe Inhibit input that can be used to stop the strobe pulse using a switch.  The programmer ready code has default timings which are easily customised by editing values in the PIC's EEPROM at programming time.

Warning.  The light output from Power LEDs is very intense. Avoid looking directly at the LED when operating.



Download schematic in PDF

Circuit Description

The circuit provides a LED strobe function with jumper selectable operating modes.  Firmware running in the PIC microcontroller produces precise control of the strobe output pulse while an inhibit input allows an external signal or switch to inhibit operation. 

The strobe interval can be configured using 4 jumpers for 1,2,3 or 4 seconds; strobe on time of 30mS or 100mS and single or double strobe pulse.  Timings are stored in the PICs EERPOM and can be customised as needed.  

High power LEDs ideally need driving with a current source to maintain a constant fixed current through the LED.  In this application I've used a simple linear current limiter around Q1 and Q2.  Since the LED is driven with very short pulses and relatively long intervals between them the average power dissipation is very low and  neither the LED or the output MOSFET require heatsinks.

Resistors R2+R3 set the current limit.  With R2 = 1 ohm and a wire link for R3, current is set to 700mA.  Using a 1 ohm resistor for both R2 and R3 (for a total of 2 ohms) sets the limit to 350mA.  

LED1 connects between the positive supply and the drain of logic-level MOSFET Q2.  The source of Q2 connects to ground via R2+R3.  When Q2 turns on the current passing through the resistors R2+R3 causes a voltage drop to appear across them.  (Ohms law V= I x R ).  The base of Q1 is connected across the resistors and when the voltage reaches about 0.7 volts, Q1 begins to turn on.    The collector of Q1 is connected to the gate of Q2 so so as it turns on it pulls the voltage on the gate of Q2 towards ground, which starts to turn Q2 off.  This settles at a point where a constant current is passed through R2/R3. 

The strobe LED can either be installed on the PCB in position LED1 or off-board via connector CN3.  If the off-board option is used do not install a LED into position LED1 on the PCB. 

Capacitor C1 is used to decouple the 5 volt power supply rail.  If you are building the circuit on a breadboard or stripboard you should ensure it is located close to the PICs Vdd connection (pin 1).

Capacitor C2 and C4 are required by the LDO voltage regulator to stabilise its output.  The original design uses an LM2931-5.0 LDO regulator designed for automotive applications.  It can withstand reverse polarity connection and 60 volt spikes at the input.  You can substitute other LDO regulators or a 78L05.  If you use a 78L05, minimum input voltage needs to be 7.5 volts.

The input voltage should be between 5.5 and 9 volts smoothed DC.  The power supply needs to be able to supply in excess of 700mA, so a supply rated at 1 amp or greater is ideal.  You can use batteries to power the circuit but they will need to be able to supply the high currents required by the LED.  The 7.2 volt rechargeable battery packs used with RC models would be ideal for this.

Power LED strobe prototype   

photos above show development of the power LED strobe

Strobe inhibit control

The GPIO5 input to the PIC functions as a Strobe Inhibit.  When the input is held low, the strobe output is inhibited.  If you don't need this feature, you can omit resistors R5 and R6 and leave the pin disconnected as it has internal weak-pull enabled. 

Mode Jumpers

The Strobe operating modes are selected by using jumper block JP1.  If you are building the strobe for a specific application you may want to hardwire inputs to ground as required rather than fit the jumper pin header. 

LED1 Options

The design will work with either 350mA or 700mA LEDs.  If a 350mA LED is used, populate R2/R3 with 1 ohm, 0.25 watt, 1% resistors.  If a 700mA LED is used, substitute a wire-link for one of the resistors and use a single 1 ohm, 0.6 watt 1% resistor for the other.

We avoid the need for heatsinks on the LED and output MOSFET by using a very short duty cycle.  It is important not to allow the LED to remain on continuously either through a fault or by modifying the pulse width/repetition rate

You can drive up to three LEDs in series using CN3 to make the external connection.  The power supply input voltage needs to be greater than the sum of the forward voltages of the LEDs + 1 volts

For example:  If you are using two white LEDs with a forward voltage of 3.6 volts, the power supply input voltage should be: 2 x 3.6 volts + 1 volt = 8.2 volts.  In this case a 9 volt power supply would be ideal.  For three LEDs in series use a 12 volt power supply.


This circuit is designed around a logic-level MOSFET for Q2 which has a gate threshold voltage of around 2.5 volts.  You may find standard, non logic level MOSFETs with higher gate threshold voltages can't turn on sufficiently to provide 700mA of current to the LED.  Although the LED will be on and may appear very bright, it won't be operating at the desired 700mA current.

I've tested this circuit with STP36NF06L, STP20NF06L and NTD5867NL.   The NTD5867NL comes in IPAK-369D through-hole and DPAK smd package types so doesn't fit the PCB layout but is ideal if you want to do your own compact design.

Strobe Operating Modes

This section refers to the default timings used in the programmer ready firmware download.

The pulse width, interval and strobe mode are user selectable using the JP1 jumper block.  There are two strobe modes, single and double pulse.  The double mode has a (default) 175mS off-time between the two pulses.  As shown in the diagram below, the interval is measured from the end of one pulse group to the start of the next group. 

Default timing

Jumper Settings

Strobe Mode
JP1 (1-2)


Pulse Width
JP1 (3-4)


JP1 (5-6,7-8)

Customising the strobe timing

The timers for the pulse width, interval and double mode gap are all configurable by editing the values in the PICs EEPROM before writing the HEX into the PIC.  This is nice and easy to do and doesn't require reassembling the code or anything complicated.  Just load the HEX file from the firmware download section into your programmer application.  Edit the values in the EEPROM as shown below and then write the code and EEPROM data into the PIC.

Suppose you want a pulse width of 40mS (40 x 1mS) and an interval of 1.3 Seconds (13 x 100mS) you would set the data in address 00 to 28 (40 decimal == 28 hexadecimal).  For the 1.3 second interval change the data in address 03 to 0D (13 decimal == 0D hexadecimal).

Values shown in the example above are the default values in the firmware download.  If you don't modify them it will uses these timings.

Converting decimal values to hexadecimal
Depending on your programmer the values you need to enter will probably be in hexadecimal, easiest way to convert decimal values to hexadecimal is Google, see example below.  The prefix 0x in the result simply tells us the value is in hexadecimal (hex for short).

PCB Layout


Download PCB artwork in PDF

Download PCB overlay in PDF

Component List

You can buy all the parts needed to build this project from most component suppliers world wide. In the UK you can get everything from Rapid Online and I've included a parts list with their part numbers below.


All Rapid parts/descriptions correct at 11 September 2013.  You should check part# and descriptions are correct when ordering in case I've made a mistake transferring them onto this page.

Component Description Part #
R1   1k Cr25 0.25w Cf Resistor - Pack of 100 62-0370
R2,R3 * 1r 1% 1w Metal Film Resistor (each) 62-7890
R4,R5 10k Cr25 0.25w Cf Resistor - Pack of 100 62-0394
R6 120r Cr25 0.25w Cf Resistor - Pack of 100 62-0348
R7 47k Cr25 0.25w Cf Resistor - Pack of 100 62-0410
C1,C4 100nf 2.5mm Y5v Dielect Ceramic Capacitor 08-0270
C2 47uf 16v Radial Electrolytic Capacitor 11-3726
C3 220uf 16v Radial Electrolytic Capacitor 11-3702
Q1 BC548B TRANSISTOR TO92 30V NPN (RC) 81-0066
Q2 ** Stp36nf06l Mosfet Logic N 60v 30a 47-0552
IC1 ** PIC12F629-I/P (RC)  73-3262
IC2 * Lp2950cz-5 Micropower Regulator. 82-0680
LED1 w 3.3v White Power LED 200lm 55-2003
socket for IC1 8 Pin 0.3in Turned Pin Socket 22-1720
CN1, CN3 3 Way 2.54mm KK Molex Straight Header 22-0840
CN2 2 Way 2.54mm KK Molex Straight Header) 22-0838
order 4 OPEN BLUE 2.54MM JUMPER LINK (RC) 22-3555

Parts List Notes

* Rapidonline don't supply some parts I used so I've specified alternative parts which should work.

** Alternate MOSFETs are STP20NF06L, NTD5867NL

***  The PIC12F629 will need programming with the firmware at the bottom of this page.

Construction photos:

Construction is very straightforward.  Fit the components in the order shown in photos Fig 1 to Fig 6.

Fig 3.  The two electrolytic capacitors must be installed the correct way round.  The negative terminal is normally the shorter lead, it is also marked on the side of part.

Fig 6. When you get the board assembled up to figure 6, connect power to the board and check the voltage between pins 1 and 8 of the IC1 socket.  It should measure 4.9 to 5.1 volts, if it doesn't don't continue until you have found out why and rectified the fault.

Pin header C2 is only used if you want to connect an external inhibit switch.

Pin header C3 is only used if you want to connect an external LED.  If you are using an external LED, don't connect the on-board LED as well. It's either on-board or external, not both.

Fig 7. The power LED is soldered to the copper side of the PCB.  Make sure to connect the anode and cathode terminals the correct way round.

Fig 8.  Avoid looking directly at the LED when testing and operating the board.  The intense light output may damage your eyes.

Fig 9.  Fully assembled board with power connected to CN1 and a magnetic reed switch connected to CN2 strobe inhibit input. 


Fig .2

Fig. 3







Power Supply

The LED Strobe circuit ideally needs a DC power supply in the range 5.5 to 9 volts and rated for 1 amp or more.  With the LDO regulator specified you could use  4 x 1.5V AA high capacity Alkaline batteries (Not NiMH rechargeable as 4.8 volts output is insufficient to operate correctly)   If you want to use rechargeable batteries the 7.2 volt battery packs used with Radio Controlled models would be ideal.    


You can use either a PIC 12F629 or 12F675 microcontroller with this circuit. The same firmware code is used with either device. Download the files required below.

The HEX file is ready to program straight into the PIC.  The asm file is the source code which you can modify or just view to see how it works. 

Not got a programmer?  Buy a pre-programmed PIC from the On-line store

Description Filename Download link
Source code for 12F629/675 ledstrobe-PWR.asm download
HEX file ready to program into the PIC
for use with 12F629 & 12F675
ledstrobe-PWR.HEX  V1.0.0 09/09/2013 download

If you need a PIC Programmer I strongly recommend the Microchip PICKit 2, this is available from suppliers world wide or direct from Microchip.  It's reasonably cheap to buy and reliable. 


If the LED outputs blink 3 or 4 times at regular intervals and the jumper settings are ineffective this indicates one of two fault conditions. 

  • The EEPROM data at addresses 07 and 08 must be 0xA9 and 0x56 respectively. If this is not correct the 3 blink error code will be shown.  You can correct the error by reprogramming the EEPROM ensuring these validation bytes are correct.
  • If the OSCCAL calibration word is missing the 4 blink error code will be shown.  You will need to recalibrate the PIC using a PICkit2 programmer, or the recalibration project here


Contact us: