Home‎ > ‎

Two Tone Paging Decoder

An inexpensive two-tone decoder for scanner monitoring 

For an older tone decoder design with more parts and less features, see this page

For a software two-tone decoding program that runs on Windows, see this page.


Some of Uniden's newer scanners feature a fire tone out feature that lets the scanner act like a pager. The scanner doesn't make any noise until the fire department you want is toned out, at which time it alerts. It's a neat feature, and I wanted to see if I could build something similar that could be added on to any existing scanner or receiver.

What I needed was a two-tone decoder. These are commercially available from companies like Midian Electronics for about $120 or less, but I didn't want one badly enough to buy one, and I wanted to tackle the challenge of building my own, just to see if I could do it.

 This page describes a homebuilt 2-tone decoder designed for scanner listening and other non-mission critical applications.  Currently, the decoder has the following features: 

  • Computer programmable via serial port and Hyperterminal program
  • Decodes up to seven two-tone pairs and a single long tone (group call)
  • Momentary and latching outputs
  • Support for interfacing with scanner “SCAN” and “HOLD” buttons (currently untested….this feature is designed to repeatedly activate the “SCAN” button until a tone set is detected.  It will then “HOLD” the scanner for 30 seconds, and then resume scanning.  This allows tone detection across multiple radio frequencies with a single receiver.)
  • Serial port output of tone detection specifies which tone was received

Possible future enhancements include:

  • Limited control of some scanners that support serial port commands
  • Support for more long tones or two-tone pairs
  • Other suggestions??

Theory of operation

The tone decoder’s input is audio from a scanner or other radio receiver.  This audio is fed into a non-inverting operational amplifier.  Since the op-amp is powered from a single supply, it will only amplify the positive half-cycles of the incoming signal.  The gain of the amplifier is set to 26, which means that any voltage over 100 mV coming into the amplifier will be greater than 2.5V at the output, which is connected to a counter input on a PIC microcontroller.  Anything over 2.5V is detected as a logic “high” or “1” by the PIC.  The whole purpose of the amplifier is to covert the incoming audio signal into digital pulses, which is why it doesn’t matter that the amplifier saturates quite often.  

The PIC counts how many low-to-high transitions are detected on its counter input every one fifth of a second.  By comparing how many pulses are counted with a nominal value for the tone that it is looking for, it can determine whether the tone is being received or not.  It’s essentially a frequency counter.  To prevent random noise or audio from falsing the detector, the correct pulse count must be detected several times in a row in order for the tone to be considered valid. 

Once a valid tone set has been detected, the PIC activates both a momentary and latching output.  The momentary output resets automatically after a few seconds, while the latching output is reset by pushing the RESET button.  Either of these outputs can be connected to a relay that can turn on an alarm or switch audio signals. 

*Note* - there are other ways to implement tone detection.  To see another method that works, see this page

Programming Tones

To program the tones sets that the decoder will detect, you must connect the decoder to the serial port of a computer and use a terminal program such as Hyperterminal.  The settings for the terminal program are:

Baud Rate:  9600

Data Bits:  8

Parity:  None

Flow Control:  None

To put the decoder into programming mode, power up the circuit while holding the RESET button.  The decoder will prompt you to enter a hexidecimal code for Tone 1A.  To calculate the hexidecimal code that correlates to a tone frequency, use this webpage.   After you enter the correct hexidecimal code for Tone 1A, hit "Enter".  The decoder will then prompt you to enter the hex code for Tone 1B.  Continue this procedure until all tones have been programmed.  Every time programming mode is entered, all tones must be reprogrammed.  After the tone hex codes have been successfully saved, the decoder will notify you and then go into normal operation mode.

Construction & Use 

Currently, this design is still in the prototyping stage, and all construction to date has been on a breadboard.  However, a schematic and preliminary PCB layout are shown below.  Assembly code for the PIC processor can be found here (not well commented at this time, sorry) and a .hex file for PIC programming can be found here.  To build a tone decoder, you’ll need to be able to flash a PIC processor.  Depending on interest and demand, I may be able to provide pre-flashed PICs for people who want to build their own decoders.  Please check back often, as I’ll be adding material to this page regularly.

Schematic Diagram of Tone Decoder


Preliminary PCB Layout

For a PDF of the copper layer of this PCB layout, click here.  This PDF is not mirrored, so it can be used with ink-transfer PCB etching methods.  If you use a photo-resist method, you'll need to first create a mirror image.

Additional Resources

This document explains how to use an open source audio editor called Audacity to find the tone frequencies used in two-tone sequential pages.