15VP v4.7.2 Firmware (Flashlight)

By turning the driver quickly on-and-off a number of times, you can access special functionality. Watch for the light show to indicate you’ve reached the click threshold, then stop clicking and keep the driver powered on.

ClicksLight ShowFunctionality
50+Quick double-flashEnter programming menu
75+Low-High rampingFlash out firmware version
100+Furious flashingFactory reset

Programming Menu

The programming menu is self-driven. If you enter it by accident, just let it finish (without turning the driver off) and it’ll exit all on its own. Only turn the driver off in the programming menu if you want to change a setting.

Turn the driver off while on a certain menu item to change that setting. When you turn the driver back on, it will re-enter the programming menu at that setting, and display the new value you’ve set.

SettingLight ShowFunctionality
# of outputs1 blinkSet number of outputs from 1-4.
Output 1 Brightness2 blinksSelect brightness from 24 values.
Output 2 Brightness 3 blinksSame as above. Only appears if # outputs > 1.
Output 3 Brightness 4 blinks Only appears if # outputs > 2.
Output 4 Brightness 5 blinks Only appears if # outputs > 3.
Mode Memory6 blinksStyle of mode memory (none, classic, hybrid)

Programming Menu Details

Number of outputs
The number of outputs the driver will cycle through as you turn it off and on. Most production drivers have 3: low, medium, high.

For each output, choose the brightness from a ramp of 24 possible values. Turn the driver off and on to start ramping. Turn it off and on when you reach the desired output to save it. There is a double-blink at the top of the ramp to indicate when you’ve reached the highest setting, then it rolls back around to the bottom. Ramps twice. If you don’t turn it off at all during those two ramps, no changes are made to brightness.

Mode Memory
Mode memory determines which output slot the driver will power up at during normal use. There are 3 possible values for mode memory. The driver will blink the following number of times to show you which style is currently set:

# BlinksMemory StyleDescription
1NoneAlways powers up at Output Slot #1
2ClassicPowers up at last saved Output, cycles upwards to next slot.
(e.g. 2 -> 3 -> 4 -> 1 -> 2 ->3 -> 4 -> 1)
3HybridPowers up at last saved Output but next cycle starts at 1.
(e.g. 2 -> 1 -> 2 -> 3 -> 4 -> 1 -> 2 -> 3)

Firmware Version

Flashes out the current version of firmware installed on the driver. Different firmwares may behave differently, so this will help you identify which you have so you can find the appropriate documentation.

Flashes firmware numbers in the following pattern:
MAJOR – pause – MINOR – pause – REVISION

So if you click 75x on firmware version 4.7.2 it’ll display:
4 flashes – pause – 7 flashes – pause – 2 flashes

Factory Reset

Resets the driver to its delivered state. A last-ditch attempt to save a problematic driver, or a quick(ish) way to undo undesired programming changes.

Output Levels

For a white power LED (Nichia 219, Cree XP-L, etc) on firmware version 4.7.2, the 24 output levels in the ramp equal approximately the following LED currents:


15VP v4

Version 4 of the 1.5V Project (15VP) is a complete redesign using lessons learned from Version 3. It has the following design goals:

  • Utilize an existing IC (integrated circuit) to handle boost operations
  • Use a true current-control mechanism to regulate LED brightness
  • Performance goal is to provide 1mA – 450mA to the LED
  • Make it all happen on a single double-sided 14mm board

Jump to a Section

Assembling the Driver PCB

PCB’s are manufactured in a large sheet (panelized) and connected to each other via little snap-away ‘sprues’. The sprues leave little holes on the edge of your board (mouse-bites) so a swipe over a file is needed to smooth the edges.

Mouse bites on the edge of a PCB board.
The panelization process leaves “mouse bites” on the edges of the PCB.
Filing the edge of a PCB.
Filing the mouse bites off a PCB.

We’ll be reflow soldering the tiny surface-mount (SMT) components in a toaster oven and the solder dries quickly. Organizing each part into a labeled storage bin makes populating the board quick and precise.

SMT components organized in a plastic container.
SMT components organized in a plastic container.

Some components have their legs hidden completely beneath the part. Others have hair-thin legs < 0.5mm wide. Soldering these by hand is quite literally impossible. A company called OSHStencils can cut you a beautiful stainless-steel stencil to apply your solder paste for reflow soldering.

SMD stencil
Stainless steel stencil for surface mount soldering.

Solder paste is a mix of tiny balls of metal (in this case, lead) and flux. The flux is an acid which scours the PCB pad clean so that the lead can flow smoothly across it. If you look closely in the pictures you’ll see the tiny balls of lead suspended in the flux. Once the paste has been squeegee’d through the stencil, the components are carefully placed on top.

Applying solder paste to stencil.
Preparing to swipe the solder paste across the stencil.
Solder paste applied to PCB.
Solder paste applied to PCB.
SMD parts on solder paste.
Surface-mount components placed on solder paste.

The boards are placed on a baking sheet and slid into a small convection toaster oven. By carefully managing the heat we can reflow all our solder without burning the boards or any components. After reflow, the board is inspected under a magnifying glass to ensure all solder joints are sound.

PCBs awaiting reflow
PCBs on baking sheet awaiting reflow.
Reflowing PCBs in toaster oven.
PCB’s in the oven being reflowed.
Freshly-reflowed PCB
Freshly-reflowed PCB

At-home reflow soldering can only do one side of a board, lest all the components fall off when you flip it over and heat it again. As a result, the other side needs soldered by hand.

Soldering by hand took me 54 minutes, but thanks to this convenient timelapse video, you can follow along in far less. 🙂

With the soldering complete, we can connect a AA power source and take the converter for a test-drive.

Testing the 15VPv4 LED driver.
Testing the 15VPv4 LED driver.


Assembling the Programming Interface

Unlike 15VP versions 1-3, the new v4 uses an ATtiny45 microcontroller which cannot be programmed using a SOIC clip. Instead, contact pads have been created and pogo pins will be used to flash the firmware into memory. To aid in this endeavour, a custom ‘programming harness’ has been designed to precisely position the driver and make flashing firmware as easy as pushing a button.

Circuit boards and components.
All the components for building the 15VPv4 programming interface.

After working with so many tiny surface-mount components, these feel downright enormous to solder. It’s wonderful.

Components on PCB
All the components placed on the board for soldering.
Soldering components to board.
Soldering all the discrete components onto the board.
Soldering complete.
All components have been soldered to the PCB and the leads trimmed.

It’s time to add the 2nd, 3rd and 4th boards to the stack. I’m using 2-56 threaded stand-offs to hold everything together.

2-56 mounting hardware
2-56 threaded hardware to build up our PCB stack.
Programming Interface built
All 4 boards have been built up and secured with the hardware.

Pogo pins are little spring-mounted contacts that we’ll use to connect our programmer to our driver. They are needle-sharp and quite long. Our stack of PCB’s is designed to keep them from flexing side-to-side while keeping them at the perfect height to contact our PCB.

Looking through the PCB stack at the pogo pin holes.
Looking through the PCB stack at the pogo pin holes.
A bit of tape keeps them all level and at the perfect height to touch our PCB.
A bit of tape keeps them all level and at the perfect height to touch our PCB.
With the tape to catch them, we drop a pin into each hole.
With the tape to catch them, we drop a pin into each hole.
The bottoms of the pogo pins are soldered to form a sound electrical path and keep them in place.
The bottoms of the pogo pins are soldered to form a sound electrical path and keep them in place.
When the tape is removed, all pins are neatly level.
When the tape is removed, all pins are neatly level.
The nested boards keep the pins perfectly straight so they each hit their target.
The nested boards keep the pins perfectly straight so they each hit their target.

Not much to do now but test that it works!

Performance Testing

Following assembly and programming, some rudimentary measurements were taken.

Version Battery LED Current (mA) LED Lumens
(approx. /w XP-L Hi V2)
15VPv4 Eneloop (1.2V) 3 1.2
    33 13
    312 135

The good news:

  • The converter circuit works
  • The programming interface works
  • All levels are constant-current regulated (no PWM)

The bad news:

  • Performance is no better than most AA boost drivers from 4 years ago. With the Manker T01 able to reach 700 lumens for 30 seconds, I’d like to try harder for our initial 450mA goal

Upgrading the Test Power Supply

I noticed an interesting behaviour during testing: wiggling the wires to the battery changed the brightness. This got me questioning exactly how much resistance my power supply setup was introducing into the driver circuit, and whether it would perform better with a lower resistance supply.

The old power supply was built in ~15 minutes back in 2013. Featuring a AA battery holder and an unknown clicky switch, it was wired up with very thin 24 gauge wire and held together with solder and electrical tape. The LED is an old XP-G2 floating in thin air on a wafer-thin aluminum MCPCB (again sporting 24 ga. wiring).

Old battery holder with switch and LED
Old battery holder with switch and LED

The new power supply makes a few changes: thicker 18ga. wiring, a different switch, brass terminal posts and features the triumphant return of the stained oak base from 15VPv1. The Nichia 219 LED sits on a thick copper Sinkpad MCPCB which is mounted to an aluminum heatsink. Both assemblies have integrated heavy-duty alligator clamps.

New power supply
New power supply

Side-by-side, you can see the beefier components of the new build, which should (hopefully!) return improved performance during testing.

Old test rig on left vs. new test platform on right.
Old test rig on left vs. new test platform on right.

Hooking the 15VPv4 driver up to these test components resulted in the high mode increasing from 320mA to 415mA – a near 30% increase in performance and stability just by ditching my 4 year-old test rig.

15VP v4.1

The new power supply puts us above ~400mA, but I’d still like to squeeze a bit more power out of the battery. To that end, a few revisions were made and we now have 15VP v4.1.

The boards arrived and a test driver was constructed. I have good news and bad news.

The bad news is that v4.1 suffers from a candlelight flicker at low drive currents. It’s tough to capture on video so I’ve included the multimeter to show the fluctuating milliamp drive current (tap to play).

The oscilloscope shows the likely culprit:

Noise and voltage spikes in 15VP v4.1 circuit at 100us interval.
15VP v4.1 candle flicker waveform

Yellow is LED voltage. The wavy center line is expected and averages ~30mV. That waveform is not likely to be causing the flicker. The tall spikes are a different story. Those are high-frequency noise and average ~150mV. I suspect they are the culprits.

That entire image occurred in 1.2 milliseconds. If we increase the monitoring window to 6 seconds, it looks like this:

Noise and voltage spikes in 15VP v4.1 circuit at 500ms interval.
15VP v4.1 candle flicker waveform

The solid yellow core is our wavy line (albeit compressed). I’m not overly worried about it  – we simply can’t avoid a bit of ripple in a boost converter, especially at low current. The ragged yellow lines extending above and below though – that’s bad. It’s switching noise being transferred through the LED and (most likely) manifesting as the flicker in the video.

A few weeks were spent further modifying the PCB layout and switching components. 15VP v4.2 has now been sent to fab and I hope to have it back soon. Fingers crossed the changes eliminate some of the noise and flicker!

But not all is lost as I did say there was some good news. 😉

15VP v4.1 max output current.
15VP v4.1 700mA output

A bit better than 400mA eh? Now we just need to make sure we heatsink this bad boy, because after a couple seconds the board gets too hot to hold.

15VP v4.2 should arrive soon. Thanks for reading and check back later!

15VP v4.2 (and 4.3)

Apologies for the long delay between updates! Life’s been busy so I’ve been plunking away at 15VP as I’m able.

Being as the circuit is 90% complete (the only remaining issue is the flickering on low) I don’t have much to show! Troubleshooting the flicker hasn’t been very interesting. I did hire an EE to take a look but he wasn’t able to correct it either, sadly.

can show you a couple things! After 10 years I’ve replaced my trusty Weller with a Hakko iron. It’s a luxurious soldering experience. 🙂

Upgraded to a Hakko FX888D!
Upgraded to a Hakko FX888D

A pretty little shot from the oscilloscope. Dark blue is the LED voltage. It needs to be a touch more flat than it is now.

Scope readings from 15VPv4.3
15VP v4.3 waveforms

The next step is to switch a couple connections around on the board and send it to fab. Check back (hopefully not too much) later to find out how that goes.

Cheers for now!

15VP v4.4

I once again have good news and bad news.

The bad news first: I’ve given up on trying to use the boost IC that offers such amazing performance on High. I’ll be switching the circuit to a different boost IC which will likely not reach the same high output levels.

The good news: I’m totally ok with it! I’ve learned an enormous amount troubleshooting this issue. Every other component in the circuit is working perfectly, so I’m pretty comfortable saying that this IC is a poor fit and moving on. It feels good.

The cause of the ripple is pretty simple. At low drive currents, the boost IC automatically enters “PFM” mode (Pulse Frequency Modulation), which gives greatly increased efficiency at the cost of unpredictable switching waveforms. The ripple can be minimized through filters and capacitors, but only so much: the chip has a hysteresis window that appears to be exactly 100mV. This much ripple is visible in the LED, which needs only a tiny voltage change to flicker at such low brightnesses.

The picture below illustrates the issue. Even with a perfect feedback waveform (yellow), the output voltage (blue) is still swinging by 100mV between 2.67V and 2.57V. It wouldn’t be a big deal at 2Mhz, but at a frequency like 6kHz, it’s noticeable in the LED output.

15VPv4.4 Waveforms
15VP v4.4 PFM ripple

The next step will be to swap out the boost IC (and some minor circuit changes that come with that) and see how a different chip will fare.

Thanks for following along and stay tuned!

15VP v4.5

Swapping the boost IC has improved stability and reduced output, exactly as expected. I’m moving on to tackle the last big problem with the circuit: it pre-flashes briefly when turned on, just as the early 47’s lights did.

You can see the issue in the picture below: the yellow peak on startup is a full 0.5V higher than it’s supposed to be. This is because the boost circuitry is coming online before the control circuitry. That extra half volt manifests as nearly 100mA across the LED so it’s quite the little flash.

15VPv4.4 Waveforms
Pre-flash on 15VP v4.5 circuit startup

I’ve made a small change to the circuit that should eliminate the pre-flash. Unfortunately it requires nearly 5 new components so the board has been very slightly expanded from 14mm to 15mm diameter to accommodate.

As soon as the 15VP v4.6 boards arrive in the mail I’ll post here, so check back later!

15VP v4.6

New boards arrived and the pre-flash fix mostly works. Certainly a lot better than it was. That fix uncovered an underlying issue however: the circuit does *nothing* for 300ms after powering on. It’s only 1/3rd of a second, but it’s noticeable. You can see it in the image below (the flat blue line just before the squiggles):

300ms pause on converter startup

I removed most of the “extra” components from the board trying to isolate the issue and couldn’t. It was time to dig into the datasheets, where I eventually found this little gem of a chart:

300ms calibration delay

There it was! 300ms are spent “calibrating” before the device goes to full output. I guess the lesson is to carefully read every single chart in every datasheet – a tall order when those documents can number 300+ pages. The 300ms delay simply isn’t going to work for the finished driver, so I’ve removed it and replaced it with a similar device (with no start-up calibration) that I hope will work.

Onwards, to version 4.7!

15VP v4.7

Version 4.7 of the 15VP driver has two major changes:

  • [SUCCESS!] Swap the chip with the 300ms startup delay for a different one
  • [ALMOST!] Remove any remaining pre-flash

The new chip works wonderfully. It now powers up so quickly that a different part of the circuit has introduced a slight pre-flash. It’s barely noticeable and only present at sub-mA drive levels though so I can live with it. Did I mention this chip has pins smaller than the point of a pin? Easily the smallest and hardest part I’ve ever had to solder.

Tiny GPIO pins (smaller than a pinpoint) on the top chip
Tiny GPIO pins (smaller than a pinpoint) on the top chip

The aforementioned tiny pre-flash can be seen in the scope image below. It’s 1ms long, only at sub-mA drive currents, and I think I have an idea how to squash it. If not, I can live with it.

15VP v4.7 startup into sub-mA drive current
15VP v4.7 startup into sub-mA drive current

Performance is pretty good. Output ranges from 500uA to 415mA, though on high without heatsinking the output quickly sags to 350-375mA.

15VP v4.7 driving N219 @ 500uA
15VP v4.7 driving N219 @ 500uA
15VP v4.7 driving N219 @ 415mA
15VP v4.7 driving N219 @ 415mA

As a coworker is fond of saying: “Perfect is the enemy of good”. The circuit is good enough at this point that I’m moving on to building some housings for it. I have two projects planned for it currently: a new revision of the Spyglass flashlight and something a bit different. Check back once in a while to see how they go!

Focus on Firmware

With the hardware in a pretty good place, I’ve been focusing on the firmware a bit. One of the annoying issues during testing is accidental mode-changing. When the light is bumped hard or the tailcap not screwed down fully, the circuit sometimes changes modes. Dealing with this is known as debouncing. I believe I have a decent firmware solution in place that accepts purposeful mode changes and ignores accidental ones. Here’s a little video of testing the solution by jiggling the connectors. Notice that the circuit stays on low output during the jiggling but goes high when a purposeful mode change is initiated.


A few other quality-of-life improvements made it in as well, including a smoother ramp when setting brightnesses and decreased pre-flash. It’s wonderful being able to reflash firmware in-circuit without dismantling the pill, so the next step will be to reflash a couple prototypes and ensure the debounce timing is good. Stay tuned!

The 1.5 Volt Project

Welcome to my longest running and most obsessive build: The 1.5 Volt Project.

The 15VP project started in 2012 as an attempt to build a 1.5-volt AA-powered flashlight from scratch. With no formal education in any of the required fields, I’ve spent 5 years of my evenings and weekends learning a little bit of everything: electronics, mechanical engineering, drafting, machining and small business administration. It’s been a wild journey that continues to this very day, so follow along by clicking on any of the pictures below!

1.5V Project v1

2012 – 2014

1.5V Project v2

2014 – 2015

1.5V Project v3

2015 – 2017

1.5V Project v4

2017 – present

Organizing Electronic Components

This ongoing project is aimed at organizing the critical mass of electronic components rapidly overflowing onto all surfaces of my workspace.

I previously organized components by project: each batch of parts for a project was stored in their static bags in the cardboard box they arrived in. I later switched to a plastic drawer cabinet. When that cabinet filled, it was back to cardboard boxes, then fishing tackle boxes, then more cardboard boxes…

I eventually had no idea what parts I had or how many. I’d order resistors from Digikey just to find 3 identical bags of them downstairs. Into a cardboard project box they’d go, which I’d gingerly stack on top of 2 similar boxes.


I’ve seen other hobbyists use binders to organize their components and that seems to provide a high-density, low-size, easily-navigable solution, so I’m going with that.

I started with all the smaller surface mount components: transistors, resistors, MOSFETs and IC’s.

Once all the tiny SMT components were nestled in their static bags, I moved on to any small-ish reels of components. If they could still fit in a folded anti-static bag, they went into one. A lot of the reels needed re-wound by hand to tighten them up.

Finally, the large reels of components with 1000+ pcs. These were far too large for the business card sheets, so plastic trading card sheets were used instead.

The 5″ binders proved necessary – some of the plastic sheets are quite thick. They are still quite easy to navigate and parts are very easily identifiable by their stickers.

The end result is fantastic. I started out with…

  • 11 medium-sized cardboard boxes full of static bags
  • 3 fishing line reel boxes full of resistors
  • 4 large drawer cabinets

… and finished with two 5″ binders that sit neatly in less than 1 sq.ft. on my workbench.

Parts binders sitting on workbench

It’s a great start to organizing my workspace and I’m very satisfied with the result. I’m far from done though, so check back later!

PCB Earrings

A Christmas 2014 gift for my wife, these earrings are fully-functional light engines from the Spyglass v1 project. The rings and clasps are .999 silver. The custom jewelry box was manually machined from C660 bearing bronze.

Machined Matchbox

This was a Christmas 2016 gift to my brother-in-law. The material is aluminum bronze (85% copper, 15% aluminum). The compass is a 20mm grade AA button compass. Start-to-finish it took 12.5 hours to complete.