Saturday, December 14, 2013
Kanga/M0XPD DDS shield
While in the UK last time I bought the "Kanga / m0xpd DDS Shield" DDS shield that fits onto an Arduino Uno. It uses one of the $5 chinese AD9850 DDS modules as the RF generator along with an 16x4 LCD with IIC interface and rotary encoder. Using the Occams beacon software of M0XPD I turned it into a trimode QRSS/CW/WSPR beacon as described at http://m0xpd.blogspot.co.uk/2013/10/occams-beacon.html. It took around 30 minutes to build the shield and I stacked it on a genuine Arduino Uno. I only had a 20x4LCD so the sketch needed modifying to accomodate its layout. It did not have an IIC interface but they were available off ebay for $6
The M0XPD sketch needs modifying to accomodate the WW2R callsign. As suggested in the sketch I used the 'WSPRcode.exe' programme available from G4JNT web site to generate the WSPR code. Unfortunately the output format cannot be "cut and pasted" into the sketch and after numerous failed transposition attempts I looked for an alternate method. Luckily I remembered the W3PM "WSPRMSG.EXE" programme at http://www.knology.net/~gmarcus/ which allows cut and pasting the output directly into the sketch
An issue with the software is that the timing is derived by counting the processor clock which runs at 20MHz. Using the default timing count value (60000) WSPR decodes stopped after 40 minutes as the WSPR transmission start time had drifted out of acceptable range. By measuring the time delta over 10 cycles, (monitoring the output on the ANAN-10 and Argo software), the correction factor was calculated and used (60127) This stopped the time drift issue for the time being.
As the Beacon has no idea of clock time the Arduino is reset at the start of an even minute and starts its internal clock from there. This is a little tricky but after practice i could get the start within 0.5S.
Obviously these issues could be eliminated by using a GPS receiver to get accurate timing. M0XPD has been looking into this, but while waiting for the result I have started looking at the code W3PM used in his Arduino beacon shield.
The final issue was the frequency of the DDS clock oscillator. This is nominally 125MHz which is the parameter used by the sketch. However my WSPR transmissions were initially outside the range of the WSPR decoding programme. The value had to be adjusted to get the output frequency correct as measured on a GPS locked counter. Initiially I also had drift issues (df=2 on WSPR) but by putting a tent (a towel!) over the dds board to stabilise the temperature the issue went away
Note the shield only produces -12dBm so it would be hard to spot if transmitting into a non optimum antenna, The AD9850 DDS produces output all the time, unlike the AD9851 the AD9850 has no provision to mute the RF output. A keyed amplifier will need to be the next project