Now that we are starting to get settled into a routine life with our new baby boy Eli, I’ve been able to sneak in some more work on the OpenBeacon project. The beta test is going fairly well, but I made a poor design decision in choosing a USB Micro-B connector and also made some schematic errors which needed to be patched for the beta PCBs. After we got home from the hospital and while Jennifer had her mom around to help, I was able to get back to Kicad, make the necessary changes and fixes, convert the USB Micro-B into a plain vanilla B and resubmit the files to Seeed Studio for rapid prototyping (also converted my EtherProg AVR programmer side project to USB B as well). Slightly less than two weeks later, and I had the nice circuit boards in hand!
First, I put together the EtherProg board to make sure that my new USB connector footprint was OK. A very quick assembly showed that everything was actually good this time! This gave me a bit of hope that maybe I completed the OpenBeacon PCB correctly this time. A bit nervously, I assembled the power supply and digital side of OpenBeacon, which rewarded me with some nice blinkenlights and proper USB enumeration on the PC. The analog side also went together quite nicely, although I needed to make a few component value tweaks in order to get the desired output power (about 300 mW) and enough harmonic suppression (maximum harmonic content of -45 dBc). A joyous day! Two successful PCB spins!
Now that the hardware is pretty much 100% nailed down, it’s time to turn my attention completely to finishing the firmware. The basic beacon stuff is already in place, such as the QRSS, DFCW, Feld Hell, and CW modes. I still need to add extras such as multi-mode operation, custom glyphs, and multiple messages. But something has been whispering in the back of my mind lately. All of the previously mentioned modes are cool, but they lack the automatic reporting of some of the newer modes. It’s particularly aggravating right now that there aren’t many operational 30 meter grabbers in North America. It would be really cool to be able to add WSPR to the OpenBeacon repertoire so I can just set it and forget it. That seemed like a big challenge, but I have been following WA0UWH and KO7M having all kinds of beacon fun with their Propeller boards, and their efforts make it seem workable.
Thanks to an excellent blog post by KO7M, I was able to suss out the basics of the WSPR protocol and how to implement it in the relatively simple OpenBeacon hardware. The OpenBeacon uses non-linear varactor tuning of a VXO, while KO7M’s Propeller beacon uses very precise frequency synthesis. I wasn’t even sure if it would be possible to fake the necessary phase continuous 4-FSK modulation with the OpenBeacon, but I figured it was worth a shot to at least try to fake it.
Long story short, due to the robustness of K1JT’s protocol and decoding software, I managed to pretty easily get a pre-generated message to transmit correctly with almost no tweaking of the transmitter. In fact, getting the transmit interval timing correct proved more challenging to me than the actual sending of the WSPR message symbols. The firmware is currently very bare-bones, with a hard-coded WSPR symbol string, hard-coded transmit interval (every 10 minutes) and the necessity to turn on the WSPR mode at precisely an even minute interval. Finishing out the firmware will require adding in the ability to change the WSPR message just like the standard message buffer, access to all of the WSPR parameters via the PC client program, and the ability to start the transmission with the pushbutton instead of doing it via the client program. Configuring the WSPR parameters will be a bit manual, but the beacon should be able to just sit there and do its thing once you’ve got that all setup.
So now the goal is to finish the firmware soon and get the Gerber files sent off to my PCB production house for a real production run. And get ready for my talk at FDIM! I know that these last two months are going to go awfully fast.
In the mean time, I’ll be running the WSPR beacon for a while to see what captures I can get off 300 mW on 30 meters. It will also be a good test to see that the firmware can keep the transmit intervals synchronized over long periods of time. If I get any spots in the WSPR DB, I’ll post them here as an update.
Edit: Here are my spots as of 0400 – 19 Mar 2012:
5 spots:
Timestamp | Call | MHz | SNR | Drift | Grid | Pwr | Reporter | RGrid | km | az |
---|---|---|---|---|---|---|---|---|---|---|
2012-03-19 02:24 | NT7S | 10.140125 | -15 | 0 | CN85nm | 0.02 | NO6W | CM98 | 797 | 168 |
2012-03-19 02:18 | NT7S | 10.140125 | -24 | 0 | CN85nm | 0.02 | NO6W | CM98 | 797 | 168 |
2012-03-19 01:06 | NT7S | 10.140125 | -17 | 0 | CN85nm | 0.02 | NO6W | CM98 | 797 | 168 |
2012-03-19 00:26 | NT7S | 10.140129 | -24 | -1 | CN85nm | 0.02 | NO6W | CM98 | 797 | 168 |
2012-03-18 22:34 | NT7S | 10.140126 | -21 | 0 | CN85nm | 0.02 | NO6W | CM98 | 797 | 168 |
The power is a lie, I’m actually at 200 mW, not 20 mW. Need to fix my WSPR symbol string.
25 Mar 2012 Update: I updated the firmware and client software to allow a WSPR transmission to start on command from the client. This allows me use the much more accurate PC clock to sync the transmissions. When only using the ATtiny85 timer, the best I could do was keep the beacon in sync for about 6 hours before it would drift fast or slow too much. With the PC tethering, I’ve been running overnight and all morning, and have managed to pick up a bunch of spots with my 300 mW.
42 spots:
Timestamp | Call | MHz | SNR | Drift | Grid | Pwr | Reporter | RGrid | km | az |
---|---|---|---|---|---|---|---|---|---|---|
2012-03-25 18:24 | NT7S | 10.140170 | -19 | 0 | CN85nm | 0.02 | NO6W | CM98 | 797 | 168 |
2012-03-25 18:18 | NT7S | 10.140169 | -19 | 1 | CN85nm | 0.02 | NO6W | CM98 | 797 | 168 |
2012-03-25 18:12 | NT7S | 10.140168 | -16 | 1 | CN85nm | 0.02 | NO6W | CM98 | 797 | 168 |
2012-03-25 18:06 | NT7S | 10.140167 | -18 | 1 | CN85nm | 0.02 | NO6W | CM98 | 797 | 168 |
2012-03-25 18:00 | NT7S | 10.140167 | -17 | 1 | CN85nm | 0.02 | NO6W | CM98 | 797 | 168 |
2012-03-25 17:54 | NT7S | 10.140168 | -15 | 0 | CN85nm | 0.02 | NO6W | CM98 | 797 | 168 |
2012-03-25 17:36 | NT7S | 10.140132 | -13 | 0 | CN85nm | 0.02 | WA7KGX | CN85no | 9 | 0 |
2012-03-25 17:36 | NT7S | 10.140167 | -13 | 0 | CN85nm | 0.02 | NO6W | CM98 | 797 | 168 |
2012-03-25 17:24 | NT7S | 10.140167 | -18 | 1 | CN85nm | 0.02 | NO6W | CM98 | 797 | 168 |
2012-03-25 17:18 | NT7S | 10.140132 | -16 | 1 | CN85nm | 0.02 | VE6PDQ/1 | DO33fl | 1110 | 34 |
2012-03-25 17:18 | NT7S | 10.140132 | -16 | 1 | CN85nm | 0.02 | WA7KGX | CN85no | 9 | 0 |
2012-03-25 17:12 | NT7S | 10.140142 | -21 | 1 | CN85nm | 0.02 | KC6KGE | DM05gd | 1189 | 165 |
2012-03-25 17:00 | NT7S | 10.140132 | -18 | 1 | CN85nm | 0.02 | WA7KGX | CN85no | 9 | 0 |
2012-03-25 17:00 | NT7S | 10.140130 | -23 | 1 | CN85nm | 0.02 | KL7UK | BP51ip | 2468 | 326 |
2012-03-25 17:00 | NT7S | 10.140131 | -21 | 1 | CN85nm | 0.02 | VE6PDQ/1 | DO33fl | 1110 | 34 |
2012-03-25 17:00 | NT7S | 10.140168 | -29 | 0 | CN85nm | 0.02 | NO6W | CM98 | 797 | 168 |
2012-03-25 16:54 | NT7S | 10.140131 | -17 | 1 | CN85nm | 0.02 | KL7UK | BP51ip | 2468 | 326 |
2012-03-25 16:48 | NT7S | 10.140133 | -25 | 2 | CN85nm | 0.02 | KC0TRX | EN34 | 2335 | 82 |
2012-03-25 16:48 | NT7S | 10.140133 | -17 | 0 | CN85nm | 0.02 | WA7KGX | CN85no | 9 | 0 |
2012-03-25 16:36 | NT7S | 10.140145 | -14 | 1 | CN85nm | 0.02 | KC6KGE | DM05gd | 1189 | 165 |
2012-03-25 16:06 | NT7S | 10.140147 | -23 | 1 | CN85nm | 0.02 | KC6KGE | DM05gd | 1189 | 165 |
2012-03-25 16:00 | NT7S | 10.140138 | -22 | 1 | CN85nm | 0.02 | KC0TRX | EN34 | 2335 | 82 |
2012-03-25 16:00 | NT7S | 10.140146 | -23 | 1 | CN85nm | 0.02 | KC6KGE | DM05gd | 1189 | 165 |
2012-03-25 15:36 | NT7S | 10.140147 | -23 | 1 | CN85nm | 0.02 | KC6KGE | DM05gd | 1189 | 165 |
2012-03-25 15:30 | NT7S | 10.140139 | -21 | 1 | CN85nm | 0.02 | KC0TRX | EN34 | 2335 | 82 |
2012-03-25 15:24 | NT7S | 10.140147 | -21 | 1 | CN85nm | 0.02 | KC6KGE | DM05gd | 1189 | 165 |
2012-03-25 15:18 | NT7S | 10.140147 | -23 | 0 | CN85nm | 0.02 | KC6KGE | DM05gd | 1189 | 165 |
2012-03-25 15:06 | NT7S | 10.140135 | -25 | 2 | CN85nm | 0.02 | KC0TRX | EN34 | 2335 | 82 |
2012-03-25 14:54 | NT7S | 10.140147 | -20 | 1 | CN85nm | 0.02 | KC6KGE | DM05gd | 1189 | 165 |
2012-03-25 14:30 | NT7S | 10.140147 | -17 | 0 | CN85nm | 0.02 | KC6KGE | DM05gd | 1189 | 165 |
2012-03-25 14:24 | NT7S | 10.140147 | -20 | 1 | CN85nm | 0.02 | KC6KGE | DM05gd | 1189 | 165 |
2012-03-25 13:48 | NT7S | 10.140136 | -17 | 1 | CN85nm | 0.02 | WA7KGX | CN85no | 9 | 0 |
2012-03-25 13:42 | NT7S | 10.140136 | -16 | 1 | CN85nm | 0.02 | WA7KGX | CN85no | 9 | 0 |
2012-03-25 13:36 | NT7S | 10.140136 | -17 | 1 | CN85nm | 0.02 | WA7KGX | CN85no | 9 | 0 |
2012-03-25 13:18 | NT7S | 10.140136 | -17 | 1 | CN85nm | 0.02 | WA7KGX | CN85no | 9 | 0 |
2012-03-25 13:12 | NT7S | 10.140136 | -17 | 1 | CN85nm | 0.02 | WA7KGX | CN85no | 9 | 0 |
2012-03-25 13:06 | NT7S | 10.140136 | -17 | 1 | CN85nm | 0.02 | WA7KGX | CN85no | 9 | 0 |
2012-03-25 11:36 | NT7S | 10.140134 | -19 | 0 | CN85nm | 0.02 | KC9NBV | EM69oe | 3020 | 91 |
2012-03-25 11:24 | NT7S | 10.140134 | -16 | 1 | CN85nm | 0.02 | KC9NBV | EM69oe | 3020 | 91 |
2012-03-25 11:18 | NT7S | 10.140134 | -17 | 1 | CN85nm | 0.02 | KC9NBV | EM69oe | 3020 | 91 |
2012-03-25 11:00 | NT7S | 10.140135 | -2 | 1 | CN85nm | 0.02 | KC9NBV | EM69oe | 3020 | 91 |
2012-03-25 09:12 | NT7S | 10.140136 | -12 | 1 | CN85nm | 0.02 | KC9NBV | EM69oe | 3020 | 91 |