The Overly Complicated Frog/Points Power Controller

The Overly Complicated Frog/Points Power Controller


If you have Shinohara or similar turnouts, you've almost certainly had power problems on the points and frog. Most people either just clean the contacts and live with it, or wire via the turnout motor contacts. Then there's me, always seeking the pinnacle of overkill solutions...

I'm presented with a layout that has a number of Shinoharas, and I admit, they look good. Too bad they're an eternal source of operational issues due to poor point contact, and thus dead rails from the point through the frog.

So, the obvious solution is to use the turnout motor to route power. The problem with this is that the point motor doesn't always switch over at the same time the points move, thus creating a temporary short on a DCC system. That causes either the booster or, in our case, the electronic circuit breakers to trip off, stopping all trains in that segment. That's just plain annoying during an operating session, even if short-lived. So, some solve it with an automotive bulb in series with the frog/points power. That would prevent tripping off the booster, but the short still would cause a temporary occupancy indication and throw off the CTC system. (Basically the occupancy would be detected as a train, and thus drop any clearance through the OS.)

Like I said, I practically specialize in overkill. So, discarding any cheap and rational solution, I give you the "Overly Complicated Frog/Points Power Controller". It ties into the power to the slow-motion switch machine (in my case, a mix of Tortoises and Switchmasters). When it detects a reverse in polarity on the motor, it immediately cuts power to the points/frog and waits a prescribed amount of time. At the end of that delay, it reconnects the right power rail to the frog/points.

Now, for those analog guys who wonder why I didn't use a couple of 555s to solve this, it's really simple: a 555 in small quantities costs about $0.50. A Microchip PIC12F629 costs about $0.82, and requires almost no passives (resistors, caps, etc.) to make it work - plus I can make it do all manner of complex timing routines.


The module requires a power source - I'd recommend at most 12-15V DC, as any more will cause quite a bit of heating in the regulator. After that, you'll need to connect the "Turnout Power" inputs to the lines running to your switch motor. At that point, you're ready to hook up the fixed rails (or the power bus feeding them) to the "Rail A" and "Rail B" inputs, and the "Frog/Points" connection to the frog/points.

If this causes a short, the module is not aligned to turnout (meaning it thinks the turnout is normal when really it's diverging, etc.) Either reverse the connections from the turnout motor, or reverse the Rail A / Rail B connections.

LED Indications:

  • Solid green - Turnout should be lined, and the frog/point power is on
  • Blinking yellow - Turnout change detected, frog/point power off
  • Solid yellow - Final stage of turnout change, when polarity relay should be lined correctly, but power has not yet been applied to the track.

Source Code Notes

Despite being a small program for a small PIC, I'm still completely lazy, so it's written in C, not assembly. The source was built with the BoostC 6.87 compiler, but it should be adaptable to most PIC C compilers.

For those who don't want or need to compile the source themselves, the binary image for the PIC (suitable for feeding to MPLAB or your favorite programmer control environment) is also included in the zip file.

To change the time delay between the last edge detected and when power is reapplied to the track, adjust the value in EEPROM location 0x00. The delay is in 40ms increments, so a value of 25 (decimal) is equal to 1 second of delay. At least 2 seconds (value of 50) is a recommended minimum.


Source code and binary

  Questions? Email Nathan Holmes
© NDHolmes, but freely usable under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License.
Last modified on May 11, 2008, at 10:15 PM
Edit Page | Page History