Over the past few years I've built a few WSPR transmitters using an Arduino driving an Si5351 clock generator. They work well. I was thinking about the cheapest possible WSPR beacon transmitter and wondered if a Raspberry Pi Pico might be fast enough to toggle a pin at radio frequencies?
Although I've installed and tinkered with the native developer tools, I find the Arduino library convenient and familiar.
The Pico has an interesting capability in that you can create little I/O state machines that run on the pins to take the bit banging overhead away from the CPUs. I found a nice library called RP2040_PWM by khoih-prog.
A few lines of code showed that it could easily generate RF. I tried on 7MHz. Here it is on 3MHz:
A decent waveform! Unfortunately to generate WSPR you need to be able to generate very small frequency steps and I wasn't able to do this with the library. Despite small changes in the float value of the frequency, the actual frequency would jump in quite large steps. I wrote to the author who explained:
"That sounds interesting project, but your concern, IMHO, is more accurate than what the RP2040 can provide.
The TOP register to control PWM is only 16-bit, giving 64K resolution can't provide the 1.4648 Hz increments in MHz range (nearly 32-bit resolution)"
The more obvious approach was to test if the Arduino library had extended the existing functions to fully use the extra speed of the 2040 chip.
I tried the tone() function but it wouldn't go up as high as 20kHz. (Worked at 10kHz and I didn't try to find the actual limit).
Next was simply toggling a pin in the loop() function.
The maximum is 862kHz. If I put the toggle code in a while(1) dead loop I could squeeze 957kHz out of it.
3 comments:
Guess you could key a bit-banged carrier at 137kHz or 472kHz. A novelty but may be worth trying.
Pico and rf. I haven’t tried this yet.
I look at the wspr parameters for the tiny fsk shift, and the time to dwell on each of the bits.
I then look at the $4 usd bare Pico price, and I wonder about a 2 knz shift, for multiple seconds, ifneeded to settle to the new tone,all matched by an identical receiver parameter decidersetup.
The $4 calls to me.
Also, wspr and 4 tones, while beautiful is starting to be superseded by 64 tone schemes with lots more forward error correction.
I love the 3.3 v direct dipole attached getting spots from Boston toAustralia's east coast a few spots per month.
Plenty of room on 10m for the next “funny” experiments.
Bradshaw K1te, buzzards bay Massachusetts
Sadly, I don't think it's possible to get that frequency resolution on the Pico even with the full control given by the SDK. The frequency will always be limited to the core clock frequency divided by an integer. The Pico does allow you some control over a fractional divider in the core clock's PLL, that can get you some extra frequencies, but it doesn't have the required resolution to get 1.6 Hz steps. There are tricks like delta-sigma modulation (switching the divider between div and div+1) to get an average frequency that is not an integer quotient, but it produces some noise that WSPR receivers may not like.
Post a Comment