A Simple FM
Return to HOME
using an AVR microcontroller.
A very simple
stereo encoder that produces
good channel separation yet requires only an
inexpensive microcontroller and a few passive components.
Find updates at www.projects.cappels.org
This project appeared in the December, 2007 issue of Info Elektronika Magazine
Before operating a radio transmitter, find out what kind of
transmitter operation, if any, is permitted in your locality. Radio
transmitter operation is a serious legal matter. In the United
States, operation of unlicensed intentional radiators is covered by
Part 15 of Title 47 of the Code of Federal Regulations. This design
can be readily adapted to different frequencies and different power
levels. If you choose to build and operate the transmitter described
here, you do so at your own risk. I'm only publishing this as an
example of what can be done.
Photo 1. In
the picture above,
The parts to the right of the green capacitor are the FM radio
The parts between the 8 pin DIP and the transmitter are the resistor
One capacitor, C5, is mounted on the back of the board, and one other
C11, had not yet been installed. It was later installed just below the
The connector in the upper-left is the unregulated power input. The
connector in the
lower middle is audio input. ATTINY12, ATTINY25, and AT90S2323
were tested on this board
while the ATTINY2313 and AT90S2313 were tested in another breadboard.
I had been fascinated with the idea of making an FM stereo encoder. Not
that stereo means much to me away from the computer. I use an FM
broadcast transmitter to relay the output of my computers to FM radios
in the kitchen, the bedroom, the driveway, and out in the garden.
those circumstances, I find that mono is plenty, whether it is music
or radio programs from over the internet, since I am primarily occupied
with something else anyway. When on my hands and knees in the garden,
all the way up to my elbows in planting a bush,
the music really doesn't seem any more sweet when its stereo. But that
didn't stop me from being fascinated with the idea of making a stereo
Stereo always seemed like a lot of circuitry and bother for
the slight benefit that came with it. That is, until a few weeks ago.
traditional or classical method -What it says
in the textbooks.
Figure 1. Filters have been
omitted from this design.
A proper encoder includes some
carefully designed filters.
A composite stereo signal, as transmitted by FM radio stations, is
composed of at least three parts: A base band mono signal, a double
sideband channel difference signal, and a pilot carrier. The signal
composition is somewhat analogous to an NTSC composite color television
signal. I said "at least three parts" because some stations transmit
other things such as data and background music that our normal FM
receivers do not decode.
The base band signal falls between 30 Hz and 15 kHz. This is the part
the audio signal that comes out of the speaker on a mono receiver, In
the classical encoder, it is made by simply adding the Left and
Right channel audio signals together, and is often referred to as "L+R."
A double sideband channel difference signal, often referred to as "L-R"
is also transmitter. The
information in this signal is the difference between the signals in the
Left and Right channels. In the classical encoder, the channel
difference signal is made by subtracting the Right channel's audio
signal from the Left channel's audio signal. The channel difference
signal is then combined with a 38 kHz carrier in a balanced modulator
to form a double sideband signal centered at 38 kHz.
The third signal, a pilot carrier at 19 kHz, exactly half the frequency
of the carrier used to generate the 38 kHz double sideband signal. The
19 kHz signal is used to regenerate the missing 38 kHz carrier in the
receiver and this 38 kHz carrier is used to demodulate the double
The three separate signals are not intended to affect each other.
Careful filtering can minimize undesirable interactions, most of which
would be some kind of beat between the 19 kHz pilot signal and the Left
and Right channels and their products.
I fiddled with the classical encoder on
paper a number of times over the years. The designs always had
all sorts of neat blocks - an
oscillator and frequency divider, a balanced modulator, one or more
summing amplifiers and a few of filters. In all, something that would
not result in a home project that would be easy to duplicate. The 38
kHz oscillator could be made with a 74HCT60 oscillator/counter chip and
a 38 kHz crystal. The balanced modulator could be made with a Giblert
cell multiplier for something nice, or a set of transmission gates
switching complimentary audio signals, or ever with resistor networks
being switched by micro controller I/O pins. The L+R function could be
achieved with a pair or resistors and the L-R signal by a simple op amp
circuit. If an op amp were to be used to sum all the signals together,
it would have to be quite good - passing the 38 kHz and its sidebands
and maintaining phase with respect to the baseband L+R signal. I had
bought some pretty nice op amps in anticipation of using them, until I
finally understood the simpler method, described below.
Figure 2. This kind of switching
can easily be done using bipolar transistors
I came across a very simple and robust stereo encoder project on Harry
Lythall's website. Harry's amateur radio call sign is SM0VPO, and he
be readily Goggled. The circuit was simple, it was elegant, and
I didn't have clue as to how it worked. After coming back to his
project several times, I realized that I had seen a write-up of this
technique, but I had not understood it well enough to appreciate what I
was looking at.
Harry Lythall's projects can be found at:
The technique that lends itself to such an elegant
implementation is explained at:
<== This will open a new window. The original link,
http://transmitters.tripod.com/stereo.html, stopped working within days
of the first publication of this web page, and I am grateful to
Internet Archive for making it available to us.
What I added to Harry's encoder was a slight twist. That
of using an AVR micro controller to replace the oscillator/counter and
the analog transmission gates. And that is what this circuit does. A
cheap micro controller, an NPN transistor and a handful of
passive components is all that it takes to make a simple stereo FM
as saturated switches, or in Gilbert Cells, or by field effect
approach calls for simply switching the audio channel between the Left
and Right inputs. Each channel is sequentially connected for one half
cycle of the 38 kHz carrier. That produces both the 38 kHz double
sideband signal and the baseband signal. A low pass filter reduces the
"splatter," resulting from harmonics of the switching, on adjacent
radio channels. I understand that this is how one of the low cost
single chip encoders works. It makes sense, this method relies on
matching of components and no precision circuitry. Its nearly fool
Switching in this way generates a 38 kHz double sideband signal and
passes both L and R through the baseband. L and R have opposite
polarities in the decoder because L is allowed through to the
transmitter on one half of the 38 kHz cycle and R is allowed through on
the other half. When L and R are equal, the two signals average out to
zero over each cycle. It could not be simpler.
Photo 2. I just had to look. It really makes DSB.
Spectrum analyzer display of signal across C4 in schematic (figure 4).
Here, the Left channel was driven by a 1 kHz sine wave. Notice that the
really produced 38 kHz double sideband with the carrier suppressed by
I jumpered the Left channel to the Right channel, the sidebands
3. The switch to ground is actually implemented
by two separate I/O pins on a micro controller.
The only tricky part is achieving the 2:1 analog multiplex
function with a micro controller. This needs to be done without
the DC level of the
signal, because that would cause the 38 kHz carrier to feed through.
CMOS Micro controller I/O ports can switch between high impedance and
low impedance states. But when in the low impedance state, the pin can
only be at either ground (logic low) or at the positive power supply
(logic high). That means that the switching action must take place by
mixing the Left and Right signals resistively, then basically shorting
out one, then
the other in alternation. To maintain the condition that the switch not
changing the DC level of the signal, the signal will have to be
around ground or the positive power supply. I chose ground since the
input signal would be referenced to ground.
What the data sheets do not tell us is that the FET that drives the
output pin low, an N-Channel FET, is pretty good a sinking current from
signals above ground and sourcing current from signals below ground.
Let me say that last part again: The
N-Channel FET that drives the output pin can shunt signals below ground
to ground. It is very
much like a low value resistor that can be turned on and off
When the I/O port is in a high impedance state, if the signal tries to
swing too far below
ground, either the ESD protection device on the I/O pin or the
parasitic diode that is intrinsic to the FET will conduct, clipping the
signal. In this circuit, noticeable clipping at the I/O pin starts at
millivolts below ground.
Since the FM transmitter in this circuit only needs a few tens of
millivolts to attain satisfactory modulation, there is no need for
amplification of the output of the multiplexer. There is more about
modulation sensitivity in the part of this section that deals with the
transmitter circuit (click here to
jump to that discussion
To perform the switching between high impedance and low impedance to
ground, the firmware zeros to the corresponding port registers
then at appropriate times, it clears the corresponding data direction
register bits to make a
given pin a high impedance, and at the appropriate times, the firmware
sets the corresponding data direction
register bits to make the a given pin a low impedance to ground.
Figure 4. This is about as simple
build-it-yourself stereo transmitter as
you can make.
The pin assignemnts in the circuit above apply to the
AT90S2323, ATTINY12, and ATTINY25.
Looking at the schematic in figure 4, the micro controller derives its
timing from a 6 MHz crystal. 6 MHz is not an exact integer multiple of
19 kHz. In fact, it is the 315.7894th harmonic of 19 kHz. But there is
no need to worry - we're talking analog here. I just count down by 316
and call it close enough, because the difference is only 0.06%. I used
6 MHz because I have a bag of them on hand. If you wanted to, you
could use a crystal that is an exact integer multiple of 19 kHz. By the
way, even higher frequency clocks can get you
smaller errors. A 20.000 MHz crystal gets
you only 0.04% error - about the same tolerance as many microcontroller
crystals -just remember to modify the firmware to accommodate the
One might ask if using a micro controller to simply replace an
oscillator, counter, and some transmission gates is kind of a waste of
a good processor. It
frustrates me to let most of a very competent RISC processor spend most
of its time in timing loops and doing trivial bit twiddling, but when
looking at the alternatives, use of a micro controller reduces the
count, it is easily obtainable, and in very many cases, a less
expensive solution than most of the other solutions available.
The Left and Right signals are AC coupled through C1 and C2,
respectively. The purpose of AC coupling is remove any DC component of
the source signal to allow the signals at the U1's (the AVR) I/O
pins to operate symmetrically around ground.
At every half cycle of the 38 kHz clock rate, either U1 pin 7 or U1 pin
5 is grounded, while the other pin is left floating, which allows one
signal at a time to get through to the input of the transmitter.
A 19 kHz square wave pilot signal is provided from U1 pin 6. Since the
average DC level at pin 6 is +2.5 volts, a small capacitor is placed in
series to keep this DC component out of the modulator (consisting of U1
pins 7 and 5), so there won't be any 38 kHz carrier.
All three of the signals - Left, chopped by 38 kHz, Right, chopped by
38 kHz of opposite phase, and a low level pilot signal are resistively
mixed at C4. I used the stereo indicator on my portable FM radio to
find the value of R5, which in turn sets the amount of pilot signal in
the composite signal, then I doubled the signal level. This should be
more than enough, but feel free to decrease the value of R5. Cutting
value in half should not result in too much signal for the receiver.
The critical purpose of C4 is bypassing the base of the common base
oscillator, Q1, to ground. The value was chosen so that the 38 kHz
signal would not be rolled of significantly. I first calculated the
maximum permissible value of C4 and then used the next smaller
available size capacitor. After that, I tested it by trying a capacitor
larger than the maximum calculated value and then then listening to a
piece of music that features
high frequency sounds moving from left to right. The larger capacitor
significantly affected the separation of the higher frequency signals.
The .01 uf capacitor shown in the schematic had not audible effect, and
that's good because it wasn't supposed to.
The transmitter itself should look familiar to anybody who has ever
home brewed an FM wireless microphone circuit or one of the FM
transmitter circuits on this site:
An FM Broadcast Audio Transmitter
1.5V Battery Operated FM rebroadcast
An FM transmitter on this site that does not use this same oscillator,
but is crystal controller,
is on this web page:
If the links above don't work, it may
be because you are looking at an
unauthorized copy of this web page. It happens. All of these projects
can be found at http://www.projects.cappels.org
This very simple circuit, the workhorse of the home brew
microphone projects, was pressed into service for the very reason that
is so popular with hobbyists: it doesn't require very many parts, it
can be built with or without a printed circuit board, and usually
with enough tweaking.
In the transmitter, C3 decouples the base to ground through C4.
C7 Can be a few pf above or below 5 pf without throwing things
terribly out of whack. Try to keep the variable capacitor, C6, small.
If you can only find larger capacitors, say 10 to 45 pf, put a 10 or 12
pf fixed capacitor in series with it. Its important to keep this part
of the capacitance of the resonant tank as low as possible. If you
don't have a suitable variable capacitor, you can always just put in a
5 pf fixed capacitor and rely on your ability to tune the circuit
by stretching and distorting L1.
Q1 is a common 2N4401, and it
exhibits a collector to base capacitance
change of about 1.5 pf per volt. This is higher and better for
this application than what you would get from high frequency
transistors with lower output capacitance. The more of the tank
capacitance that comes from Q1's collector-to-base capacitance,
the more frequency modulation of the transmitted signal you will get
for a given audio level. Since the stereo modulator can only handle
several hundred millivolts peak-to-peak without distortion, this
sensitivity is important.
I made L1 by winding 7 turns of #22 Beldsol copper magnet wire around
the smooth part of a 1/4" drill bit (a trick mentioned by the legendary
Harry Lythall), and then slipped the coil off the drill bit. I was
shooting for the lower part of the FM band. Once the coil was wound and
installed, I put C6 in the center of its range and then stretched and
bend the coil until I could hear the transmitter on my FM radio tuned
to the only quiet spot on the dial here, 93.3 MHz. If you want to
use this at the high end of the FM broadcast band, you might want to
try using only 6 turns.
Another trick for winding coils like this, that have to maintain their
shape without a coil form, is to cut off a piece of wire a little
longer than would be needed for the coil, then holding each end of the
wire with a pair of pliers,
stretch the wire slightly to orient the grain so that the wire tends to
stay straight. When you wrap the wire around the drill bit, it will
tend to hold its new shape instead of trying to spring back to its old
shape. Be careful how you hold the wire while stretching it -you
wouldn't want to hit yourself in the face with the pliers should the
wire snap. Happened to me once; its not really funny.
This transmitter does not
have a discreet antenna.
L1 radiates plenty.
external antenna would extend the range, which is probably not what you
really want anyway. It will also complicate tuning, which is something
you probably don't really want. I get nearly 10 meters to three of my
FM receivers with this. It could be stronger, but 10 meters is more
than enough. My neighbors don't really need to know what I am listening
The firmware is quite possibly quite likely the simplest piece
of functional code that I have ever written. It merely sets the 19 kHz
signal pin high, waits a bit, then sets one of the 38 kHz pins to high
Z while it sets the other 38 kHz pin to low Z. It delays a little more,
then makes the high Z pin low, and the low Z pin high, waits some
more... I think you get the idea. The modulator outputs switch between
high and low impedance at 38 kHz,
the 19 kHz output is a 19 kHz square wave. It was a bit tedious, to
test in AVR Studio, but worth it.
The code is very simple. Just wait
loops padded out with some no ops, separating changing of the state of
the I/O pins. The tiny little program only a few very basic
instructions, no long
jumps, interrupts or special functions, relying only on the reset
and these seven assembly language instructions:
The three signals are output on Port B as follows: Left =>
Port B bit 2; Right => Port B bit 0; 19 kHz subcarrier => Port B
which in the schenatic are Pins 7, 5, and 6 respectively. I have
provided links at the bottom of this page to
code for the
ATTINY12, ATTINY25, the ATTINY2313 / AT90S2313, and the AT90S2323. I
have tested all five of these chips in this circuit and found them to
all work as expected. I guess that's one of the benefits of keeping
You should be able to use this technique on most other, if not all CMOS
micro controllers with I/O pins that are capable of being placed in a
high output state. If you realize success with a PIC or another small
controller, please drop me a note at the email address at the bottom of
I built mine on a piece of punched phenolic board that had one pad per
hole. The holes are in a 0.1" grid (2.54 mm). The pads help hold
the components tightly to the board, but I am confident that one built
on punched phenolic or fiberglass board, or even built Ugly Bug (A.K.A.
Dead Bug) or
Manhattan style would work just as well. Just make sure that the parts
in the transmitter are mounted solidly to help with frequency stability
and to reduce microphones.
I used a socket for the micro controller. This because I used a
programing adapter that plugged into the socket for the purpose of
programming the controllers, and also to let me change the controllers
to verify that the other controllers would work. You don't need a
socket, but it might give some peace of mind and some forgiveness of
If you use a socket for the controller, don't put the controller into
the socket until you have verified that the power supply is wired
properly. Apply unregulated power to the input of the 78L05 and
measure pin 8 of the micro controller. It should be + 5 volts. Verify
that pin 4 of the micro controller is grounded.
Tune a nearby FM radio receiver to a quiet spot on the dial, where you
would like the transmitter to reside.
Tune C6 to the center of its range and touch L1 with your fingers. If
you heard a signal go swishing though the band pass of your FM
it means that the transmitter is tuned at a frequency higher than that
which the FM receiver is tuned to. If you didn't hear the signal, then
stretch the coil lengthwise SLIGHTLY.
At some point, between the effects of stretching the coil and touching
it with your fingers, you should be able to bring the transmitter's
frequency to be very close to that which the reviver is tuned to. At
this point, you should be able to use C6 to fine tune the oscillator to
the right frequency
After you get the transmitter tuned in, Verify that the transmitter is
transmitting at the frequency that your radio is tuned to, and not to
image frequency. Do this by bringing your finger close to L1. When you
do this, the frequency will shift. If the transmitter shifts to a lower
frequency on your radio dial, then the transmitter is tuned to where
you think it is. If the transmitter seems to shift up in frequency,
then you are looking at an image and need to re-tune the transmitter.
The procedure above might be tricky, and often requires some finesse.
patient, it will pay off.
It might be handy to have an un-tuned field strength meter at hand,
to be able to determine if the transmitter is oscillating at all. I
relied upon one several times during this project. Here are a some
filed strength indicator projects on this site:
RF Field Strength Probe using Atmel AT90S1200A AVR controller
<= This one uses a micro controller to zero the circuit.
A Simple Field Strength
<= This one does not require a micro controller.
Digital RF Field Strength Indicator with
LED display using Atmel AT90S2313 AVR Processor
<= This is
the one I used on this project.
Field Strength Meter Using A Biased Schottky Detector
<= This is a newer design, which is quite sensitive.
The "L" and "R" designations on the audio connector are, to my
on possible improvements
First off, one might consider adding ESD protection to the audio inputs.
Filters with sharp 10 to 15 kHz audio cutoff on the Left and Right
audio channels might help with some audio sources. This would prevent
signals that might be in the audio from beating with the 19 khz pilot
Pre-empahsis, a 6 db per octave boost at about 3 kHz on the Left and
Right audio channels will compensate for the de-empahsis rolloff in
commercial receivers. North American receivers expect one frequency,
the rest of the world, something slightly different. You might be able
to achieve a similar effect with a graphic equalizer ahead of the
transmitter. Using an equalizer in the receiver will restore the
frequency response, but will not improve your high frequency signal to
noise ratio as pre emphasis was intended.
Circuit Board Design for 8 pin AVR controllers
In the photo above, Jeff attached
a clip lead to the coil on his transmitter
in order to increase the range a
little bit. Note that the inductor is a sufficient
antenna for most uses and the extra antenna is not recommended.
Jeff Heidbrier, in Texas, has come up
with a pretty nice printed circuit board design for this simple FM
Stereo Transmitter. Jeff's layout accomodates 8 pin AVR controllers.
The layout is intended to accept resistors mounted vertically, as shown
in the photograph, so you have some flexibility in that you can use any
size from 1/8 up to about 1/2 watt sizes.
This layout only requires three
jumpers in order to make a single-sided board.
As for the dots per inch, Jeff wrote "Opening the file up with
Microsoft paint and printing out the image gives 7.5 mm from the center
of pin 1 to the center of pin 4." Its a good idea to verify the
dot pitch in your own system (As an example, I use a Macintosh, so the
dots per inch would probably need to be adjusted.) When everything is
scaled properly, the distance between centers on U1, the 8 pin dual
inline package, should be 0.1 inches (2.54 mm),
Several different AVRs are directly
supported. Read the text.
(February, 2012) Note: The AT90S2323 and AT90S2313 are no longer
manufactured, but the ATTINY parts are still in production.
The eight pin devices, AT90S2323, ATTINY12, and ATTINY25 use the
following output pins:
Port B bit 2; Right => Port B bit 0; 19 kHz subcarrier => Port B
bit 1, as shown in the schematic.
AVR Studio 4.x assembler source file for ATTINY12
AVR Studio 4.x assembler hex file for ATTINY12
AVR Studio 4.x assembler source file for ATTINY25
AVR Studio 4.x assembler hex file for ATTINY25
AVR Studio 4.x assembler source file for AT90S2323
AVR Studio 4.x assembler hex file for AT90S2323
The twenty pin devices, AT90S2313 and ATTINY2313 use the following
Port D bit 6 (pin 11) ; Right => Port D bit 4 (pin 8); 19 kHz
subcarrier => Port D bit 5 (Pin 9).
AVR Studio 4.x assembler source file for ATTINY2313 and AT90S2313
AVR Studio 4.x assembler hex file for ATTINY2313 and AT90S231
Find updates at www.projects.cappels.org
Contents ©2007, 2008, 2010, 2011, and 2012 Richard Cappels All
Reserved. Find updates
Some images, as indicated thereon, copyright 2008 by Jeff Heidbrier.
First posted in April, 2007. Updated
January,2008, February 2008, April, 2008, June 2010, July 2011, January
. You can send email to me at
"(at)" with "@" before mailing.
Here are some terms to make it easier for search engines
to identifiy this project:
FM Stereo Transmitter, FM Stereo Transmission, FM Stereo Encoder
Multiplexor, FM Stereo Encoder, FM Stereo Circuit, FM Transmitter,
Radio Transmitter, FM Stereo Multiplexor, FM Stereo Multiplexer, FM
Stereo Encoder Multiplexer, FM Stereo multiplex encoder.
presented on this page is for personal, nonprofit educational and
use only. This material (including object files) is copyrighted by
Cappels and may not be republished or used directly for commercial
For commercial license, click
and intellectual property notice
(Summary: No warranties, use these pages at your
own risk. You may use the information provided here for personal and
educational purposes but you may not republish or use this information
for any commercial purpose without explicit permission.) I neither
express nor imply any warranty for the quality, fitness for any
particular purpose or user, or freedom from patents or other
restrictions on the rights of use of any
software, firmware, hardware, design, service,information, or advice
mentioned,or made reference to in these pages. By utilizing or relying
on software, firmware, hardware, design, service,information, or advice
provided, mentioned, or made reference to in these pages, the user
takes responsibility to assume all risk and associated with said
activity and hold Richard Cappels harmless in the event of any loss or
expense associated with said activity. The contents of this web site,
unless otherwise noted, is copyrighted by Richard
Cappels. Use of information presented on this site for personal,
educational and noncommercial use is encouraged, but unless explicitly
with respect to particular material, the material itself may not be
or used directly for commercial purposes. For the purposes of this
copying binary data resulting from program files, including assembly
code and object (hex) files into semiconductor memories for personal,
educational or other noncommercial use is not considered republishing.
desiring to use any material published in this pages for commercial
should contact the respective copyright holder(s).