Trials and tribulations of starting up a WSPR station (Part 2)

In my first blog, I discussed getting my WSPR station receiver system working. In this installment, I'll describe the work I've done on a stand-alone WSPR transmitter.

Thanks to Andy G4JNT, I began working on the MJB stand-alone beacon controller designed by Johan Bodin SM6LKM. I implemented the schematic pretty much as shown. I had a small board with a RS-232 to TTL converter on it, a MAX236, so that's where I started. I wired in the PIC 16F628, the DDS-30 board from AmPRO and a hex-inverter for the I2C Clock, Data and Chip select lines. I wasn't sure I needed them, so I tried it both ways, but he definitely inverts the signals in his software so the inverter is necessary. I didn't have a 74HC14 that he recommended so I used a 74LS04 which worked fine. The pin-out is different but he didn't show it so that was an easy change.

When I built the DDS-30 boards, I used a 100MHz oscillator instead of a 120MHz oscillator Johan uses in his design example so I had to calculate the values myself. His instructions are absolutely correct for the DDS-30. Initially I used a transmit value of 10.1401MHz and although it transmitted, I was unable to receive it. I had to change to 10.1402MHz to be in the detection passband of my receiver/computer.

A more difficult problem was the calculation of the 162 bits of transmitted message. The instructions tell you to go get an old DOS version of WSPR and input for example:
C:\WSPR>wspr Tx 0 0.0015 0 SM6LKM JO67 20 11 >MSG.TXT
When I did this, I got a long file of 162 lines of numbers in three columns. I didn't read the instructions very well, as I mentioned the A.D.D. has really set in in my old age. So I had to work on this several times. Finally I saw that he said to use the middle column of numbers. This is very important. It is 162 characters from 0 to 3. I edited away the other stuff and grouped it like he did in four lines of 10 4-character groups with a 5th line of 2 characters. It still didn't work.

In another article on building a WSPR transmitter, I found a different suggestion and it said to enter this line (with my call):
wspr Tx 10.1386 10.140100 0 N5BFB EM13 30 11 >msg.txt
Again, I separated out the second column from the output and put it in a file as he suggested and loaded it into the PIC. This all worked, finally. I have attached my file which I actually called msg_1402.txt.

After getting this all working, I wanted to test it with my receiver/computer which has been working for weeks. Well, I originally programmed it for 10.1401MHz and although there was plenty of signal, it was out of the detection passband so I couldn't decode it 3 feet away, even though I could hear it well. That is when I discovered the second problem. I changed my receive number in "msg.txt" to 10.140200 and nothing happened. I don't know what that represents, but I had to go back to the original calculation of my master oscillator, change it to 10.1402MHz and then put that value into the encoder and finally I got something I could decode.

A couple final points that made this a more difficult project.

First, after reading the instructions and thinking it was probably about working, I wanted to check the frequency of the transmitter. I brought it up, hit the "++++" to put it in the command mode and sent the "L" command. I thought this would put the DDS in the symbol 0 frequency. It does nothing like that. It sets the VCXO to symbol 0 but since I'm not using a VCXO, it did nothing.

Second, I tried to check the frequency of the PIC crystal oscillator. Of course, you can't do that. As I said, my receiver is not accurate enough to use. I have an Agilent Spectrum Analyzer at work, but if you touch the crystal, you throw it off and it's not sensitive enough nor stable enough to check it with a loop of wire. I'm still working on that one.

Finally, I had it all together and connected up the GPS, got it all working but it just didn't transmit. I was sitting there pondering it when all of a sudden it transmitted a message. This was when I was on 10.1401MHz so I didn't decode it but it was long enough and seemed right. I changed frequency and turned it on and it still didn't transmit; for a while. Then it occurred to me; it was waiting a random number of message slots so that I wouldn't cover up everyone in my area on 10.1402MHz. So it is finally working. I only output a couple milliwatts and I only have a 3' piece of wire so you won't receive me till I get a PA on it but it's working anyway.

So what would have made my life easier?
1. Make the L, M, N, and O commands set the DDS as well as the VCXO so that it is possible to check the 4 phases/frequencies with a counter.
2. Output the PIC oscillator on an unused pin. I think this is possible, but I don't know enough about the PIC to be sure.
3. A push-button that will fire off a transmission immediately, regardless of the time slot, GPS time, or anything else. I know this could potentially screw up someone elses transmission, but I don't think people would use it into an antenna but it would be really good for testing.
4. A better utility to generate the WSPR 162 symbol message. As it is now, I am still uncertain I've done it correctly and I don't have any way to disassemble it to prove that I did it right.

There are probably many features I could think of to add, then I'd fill up the PIC and the whole thing would get more complicated. Over all, though, it was a great project and had my own A.D.D. not set in it would have been much more straightforward. As it was, I learned far more than I had expected about WSPR and this project.

I may put a Part 3 on after I get it finished with a 100mW to 1W PA and packaged in a box, but till that time, let me just say, you can do it. Give it a go and you will enjoy the project as much as I have.

Harley Burton

Plain text icon msg_1402.txt566 bytes