Or, for a software two-tone decoding program that runs on Windows, see this page.
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.
There are several different ways that a tone
decoder could be built. The most elegant and cost-effective way to do
it is to use a microcontroller that has enough processing horsepower to
do some simple digital signal processing (DSP). The micro would sample
the audio, determine whether the tone was present or not, and then
alert if the correct tone sequence was received. Unfortunately, I'm
only a novice programmer, so this kind of signal processing is a little
above my head unless I have MATLAB to help me out. Doing it in assembly
language seemed a little too ambitious.
Another option would be to convert the incoming audio waveform to a
digital on/off signal using a simple transistor circuit. A simple
microcontroller could then count the digital pulses over a certain
period of time and determine the frequency of the incoming audio
signal. An example of this is method is a PIC based Morse Code Reader.
This technique works well for pure sine waves, but when hooked to a
radio receiver it has to deal with normal speaking audio when tones
aren't being sent. This method may work for a paging decoder, but I'm
guessing it will be somewhat susceptible to falsing. It could probably
be made to work with a lot of testing and trial and error. *Update* - This technique can be made to work quite well. See this page for a design based on this technique.
The method I chose to use utilizes an an analog filter for tone
detection. Normally analog filters aren't adjustable through software,
but by using a digital potentiometer as part of the RC network, the PIC
microcontroller can adjust the filter on the fly. The tone decoder
circuit is based on an LM567 tone decoder IC. The frequency of the tone
it looks for is set with an RC network, and the output is a transistor
to ground, which is a digital signal. The digital potentiometer I used
is an Analog Devices AD5160, but just about any digital pot could be
used as long as it has enough resolution. I found that a 50k ohm pot
with 256 steps gave me enough resolution for two tone paging and worked
well with a .1uF capacitor.
used a PIC18F1220 microcontroller which is kind of overkill for what I
have so far. However, this PIC has EEPROM and a serial port, which
means that if I ever got really ambitious I could make the tone decoder
programmable from a PC serial port. The way it stands right now it has
to be reflashed with a programmer to change settings.
LM567 tone decoder's bandwidth is very sensitive to input voltage. In
other words, if you drive a very large signal into the input, the
filter bandwidth will be huge. For this reason, it's important to keep
the input peak to peak voltage around 75 mV. Input potentiometer R2 is
used to set the input audio level. The decoding center frequency is
also very sensitive to capacitor tolerance (see LM567 datasheet).
A 10% capacitor at the edge of its tolerance band can change the decode
frequency enough to really mess things up. For this reason it's
important to do an individual characterization of the filter using a
signal generator before trying to program the PIC. Part to part
variability will influence what values the digital potentiometer needs
to be set to.
The PIC commands the digital potentiometer over
a three-wire SPI bus. The potentiometer terminals are connected to the
LM567 in place of a fixed resistor.
a quick overview of what the PIC software does. When the unit first
powers up, the PIC sets the digital potentiometer to a value that sets
the tone decoder to look for the first tone of the two-tone paging
sequence. It then looks at the output of the tone decoder. If the
tone is detected, the PIC sets the digital potentiometer to a value
that sets the tone decoder to look for the second tone of the two-tone
sequence. After waiting a few milliseconds to let the digital
potentiometer stabilize, the PIC looks at the tone decoder output
again. If the second tone is present, the PIC turns on the LED. If
the second tone is not detected within four seconds, the PIC resets the
digital pot to look for the first tone and goes back to looking for
that tone. Multiple tone sets can be detected, as well as single tone
"group call" pages. Sample source code can be found here. This code is pretty bare-bones, but it can be enhanced easily to add functionality.
circuit seems to work pretty well. As I mentioned earlier, the
decoding bandwidth is sensitive to input voltage, so make sure to
adjust the input signal for about 75 mV peak to peak. I've only built
it on a breadboard so far, and all it does is turn on an LED, so it's
really not very useful. However, with some packaging, interfacing, and
software enhancements this could work very well for scanner listeners
or remote control applications.
Printed Circuit Board - this is the most obvious and most needed.
Having this sitting on a breadboard isn't very useful except for
testing and debugging.
2) Computer programmable - if the serial
port and EEPROM on the PIC are put to use, it would be possible to
program the desired tones using Hyperterminal or something similar.
That would make it useful for a lot more people who don't have the
hardware or know-how to program PICs.
3) Multiple Outputs - how
about having a couple of outputs tied to the "scan" and "manual"
buttons on an old scanner, along with an audio switching relay. When
no tones are detected the PIC could periodically (once every half
second or so) trigger the "scan" button to make sure the scanner
doesn't stop on a busy channel. This would help ensure that no pages
are missed even when scanning multiple frequencies. Then, when a page
is received, the PIC could trigger the "manual" button to stop scanning
for a predetermined amount of time (30 seconds or so) and activate a
relay that would let the audio go into a PC running VOX recording
software. With this setup the PC would record all fire pages on
multiple frequencies but none of the other traffic. Just an idea.