Sunday 20 January 2013

Multi-mode Beacon on the RPi

Inspired by some comments from Jim on Bill Meara's Soldersmoke Blog, I dusted off the m0xpd PayPal account (again!!!) and splashed out on one of the AD9850 DDS Modules from eBay...

Of course, you also need some kind of controller to make any use of these little synth modules. Fortunately, inspired by their beer-budget price, the modules are generating quite a buzz at the moment, so there's a lot of supporting software out there.

Andy Talbot, g4jnt, has written about the eBay modules in the current number of RadCom (but the dear old RSGB hasn't got around to updating their website at the time of blogging, so the link points to the previous edition - funny how the paper copy can be more up -to-date than electronic news!).

You can find Andy's PIC-based controller on-line - start with his description here .

Rather than follow the rest of the flock with a PIC controller (having already played with a PIC controller for DDS devices), I thought I'd like to use my new Raspberry Pi, so I had a further sniff about the 'net and found Ron, nr8o's blog, where he presents an Arduino sketch for setting up the AD9850.

I hacked that Arduino sketch into a piece of Python code for the Pi, which might be useful for others... 

Having got the synth to run, I wanted something to do with it - so I built up a "beacon" transmitter...

You can see (from the left) my GPIO breakout (here in the "High Rollers' edition"), then a quad bi-directional level converter module I made to couple the 3V3 signals from the RPi into the 5V world. Next there's the eBay module.

Its signal goes to a little QRP PA I knocked together (drawing on the PA stage in my "Funster Plus" rig) and a low-pass filter for 40m. Currently, I'm measuring 5.8V RMS at the output of the filter which (if we were to allow ourselves to be comforted by the delusion that the load thereafter is 50 Ohms) implies that I'm throwing a rather healthy 600mW at my half-g5rv. I'll throttle back to more sociable power levels when I get a chance.

Here's the amplifier...

and here's the filter...

See how my obsession with Plugin Modules is getting worse!

With the work I'd already done on sending Morse Code from the RPi, it was easy to get the system to send my call (this time at QRSS speeds, with a 3 second dit length).

Here's the first spot (in the red box) of my transmissions at pa9qv's "Double Dutch" grabber...

With all the processing resource of the RPi, it was also easy to transmit Hellschreiber messages making this a multi-mode beacon (in the spirit of my original).

Here's my multi-mode signal arriving in the Netherlands...

I've added the annotation in red to help you see it! I only transmitted the rather flamboyant "Raspberry Pi" element of the message for fun. After the buzz subsides, I'll go back to sending just my call!

I guess the next step is to get the RPi beacon to send WSPR as well - but first, I must get onto 30m - there are more grabbers on that band - so more chance of seeing my Raspberry Pi proclaim itself to a waiting world!.

 ...-.- de m0xpd

Update :-

The beacon is now even more "multi-mode" than before ... in addition to FSK-Morse and "Hellschreiber", it now also transmits the digital "WSPR" mode.


  1. Nice write-up.

    Got myself a RasPi and the DDS module, too, so may try the set up at some stage.

    Good to see that my Double Dutch grabber is useful.

  2. Nice! I've just found your blog from the G+ Ham Radio community.

    I've also just ordered myself a few AD9850s from Ebay and was wondering what I could do with the spares - this sounds like a good plan!

    I'm also planning to try doing WSPR without using them - the basic idea is from

    Your PA and filters look perfect to go with them!

    Dan MD1CLV

    1. I tried using the RPI as an FM transmitter from this article. Its alright for nbfm on 4m but nowhere near stable enough for WSPR



    2. Hi Dave,
      The tuning resolution isn't good enough either - it's only theoretically possible to run WSPR on 136 or 479kHz. I've got a couple of bugs in my code to work out and then need to build a LPF before I can do real world testing to see if it will work.

      Because at the lower frequency any wobble in the 500MHz reference will be divided down then there is a chance it'll be OK, but I won't hold my breath!

  3. Paul, nicely done all around! I love my Pi's, but both of them are being used as raspbmc media servers. Anyway, I may build up that qrp amplifier and use the output as a xtal replacement for an old 6 meter AM xmitter that I'm restoring. Lots of great info on your blog.
    Ron NR8O

  4. Paul, Nice writeup. What did you use for the level converters? cannot make it out from photos



    1. The Level Converter is a homebrew module, using BSS138 MOSFETs. The beauty is that its bi-directional. The schematic (for a single channel at least) is here :

      I'm intending to write it up in a separate post (along with my PCB layout) - but haven't had chance yet.

      Of course, the well-heeled can buy these ready made from Sparkfun and similar suppliers.

  5. Where can I find the schematic for the QRP PA?

    1. You can't! But it is a direct development of Wes Hayward, W7ZOI's 'Ugly Weekender', which is described here and elsewhere.

  6. A very useful post. I've also got one of the DDS boards featured by Andy and a Raspberry Pi. I had been thinking along exactly the same lines of implementation and now I can be lazy!! 73, de G0OER (Paul)

  7. Paul, nice work. I just found these a couple of days and got one up and running today under the basic control of an Arduino Uno. My interest was in using them to revive otherwise uneconomical-to use crystalled ex-PMR radios. Their main limitation seems to be the lack of an easy way to frequency-modulate them with a realtime analogue signal, ie, audio. It would theoretically be possible to have a very fast microcontroller sampling an input audio signal and manipulating the output frequency plus and minus on-the-fly, especially if parallel data input mode were used on the DDS. Fancy taking that up as a challenge?