FM Stereo Broadcaster...
Posted: Fri May 16, 2008 10:06 am
Just finished the code and a breadboarded version of a 'Part 15' FM Stereo Transmitter.
I have two good AM transmitters - one I'd built using a single 6888 Tube plus an old KnightKit Broadcaster that I'd refurbished. FM Stereo, however, is a bit more difficult.
I wanted to avoid the poor frequency control of the Ramsey FM-10C, and the poor modulation of the little iPod FM transmitters you find for use in the car - although frequency control is quite good on these, the audio on these is just terrible. I've had about 3 of these iPod transmitters and they were all unusable.
You can get really GOOD FM transmitter kits but you have to go on up to $140+ to find a kit with suitable audio quality and frequency stability (see: Ramsey FM-25B).
SparkFun sells a single IC solution: the NS73M module (http://www.sparkfun.com/commerce/produc ... ts_id=8482). Problem is, it needs a controller to setup the pre-emphasis, modulation level, frequency and power level. And, if you're going to use a controller, you might as well include an LCD so you can know what frequency you're on.
I used a Modern Device Bare-Bones module to provide the Arduino as a controller. I found some initial code built by Cai Maver on the SparkFun forum. After some back-and-forth, he switched it to use the I2C protocol (Wire.h). I added the 4-bit LCD interface and did some fancy handling of the up/down/set buttons so you can take the transmitter offline, change frequencies, and put it back on the air.
Code is at: http://www.mikeyancey.com/files/arduino-fm/
Photo(s): http://picasaweb.google.com/mikeyancey/ ... 1531329938
The LCD4bit library was altered in only two spots:
1. Disable the RW Pin - the LCD RW pin is tied to ground (LOW). We're only 'writing'.
2. Change the Enable Pin from '2' to '11' (use the unused RW pin).
The BBB pins are used this way:
Digital Pins -
D12 = RS (from LCD)
D11 = RW (NOT USED - The RW pin on the LCD is tied LOW)
D11 = Enable (from LCD)
D10, 9, 8, 7 = 4 data bits for LCD
D6, 5, 4 = UP, DOWN, SET buttons
Analog Pins:
A4 = SDA, A5 = SCL
Results:
Frequency stability is tip-top - I connected a frequency counter and it NEVER drifted.
Transmitted Audio quality is superb - I don't hear much hiss at all and the audio has great dynamic range, so FM modulation is quite good.
Range - I didn't expect much, but with proper input volume (iPod nano, about 60% volume), and a short (read: legal!) antenna it reaches my living room about 50 feet away!
Frequency Agility - I've tested it down to 87.5 and up to 107.9 and other than some very small 'rounding' inaccuracies, it reaches all of the channels on the US FM broadcast band.
Cost - was probably similar to the Ramsey FM-10C, including the BBB, the FM module, an LCD module and some parts on hand (buttons, a 3.3v regulator, resistors, trimpot for LCD contrast). I still need to package it in a suitable enclosure.
Mike Yancey (from original code by Cai Maver)
Dallas, Texas
I have two good AM transmitters - one I'd built using a single 6888 Tube plus an old KnightKit Broadcaster that I'd refurbished. FM Stereo, however, is a bit more difficult.
I wanted to avoid the poor frequency control of the Ramsey FM-10C, and the poor modulation of the little iPod FM transmitters you find for use in the car - although frequency control is quite good on these, the audio on these is just terrible. I've had about 3 of these iPod transmitters and they were all unusable.
You can get really GOOD FM transmitter kits but you have to go on up to $140+ to find a kit with suitable audio quality and frequency stability (see: Ramsey FM-25B).
SparkFun sells a single IC solution: the NS73M module (http://www.sparkfun.com/commerce/produc ... ts_id=8482). Problem is, it needs a controller to setup the pre-emphasis, modulation level, frequency and power level. And, if you're going to use a controller, you might as well include an LCD so you can know what frequency you're on.
I used a Modern Device Bare-Bones module to provide the Arduino as a controller. I found some initial code built by Cai Maver on the SparkFun forum. After some back-and-forth, he switched it to use the I2C protocol (Wire.h). I added the 4-bit LCD interface and did some fancy handling of the up/down/set buttons so you can take the transmitter offline, change frequencies, and put it back on the air.
Code is at: http://www.mikeyancey.com/files/arduino-fm/
Photo(s): http://picasaweb.google.com/mikeyancey/ ... 1531329938
The LCD4bit library was altered in only two spots:
1. Disable the RW Pin - the LCD RW pin is tied to ground (LOW). We're only 'writing'.
2. Change the Enable Pin from '2' to '11' (use the unused RW pin).
The BBB pins are used this way:
Digital Pins -
D12 = RS (from LCD)
D11 = RW (NOT USED - The RW pin on the LCD is tied LOW)
D11 = Enable (from LCD)
D10, 9, 8, 7 = 4 data bits for LCD
D6, 5, 4 = UP, DOWN, SET buttons
Analog Pins:
A4 = SDA, A5 = SCL
Results:
Frequency stability is tip-top - I connected a frequency counter and it NEVER drifted.
Transmitted Audio quality is superb - I don't hear much hiss at all and the audio has great dynamic range, so FM modulation is quite good.
Range - I didn't expect much, but with proper input volume (iPod nano, about 60% volume), and a short (read: legal!) antenna it reaches my living room about 50 feet away!
Frequency Agility - I've tested it down to 87.5 and up to 107.9 and other than some very small 'rounding' inaccuracies, it reaches all of the channels on the US FM broadcast band.
Cost - was probably similar to the Ramsey FM-10C, including the BBB, the FM module, an LCD module and some parts on hand (buttons, a 3.3v regulator, resistors, trimpot for LCD contrast). I still need to package it in a suitable enclosure.
Mike Yancey (from original code by Cai Maver)
Dallas, Texas