moxon-frame-generator
simple generator for 3D-printed frames for a moxon rectangle antenna
A modem/TNC to generate the AFSK audio tones for sending APRS messages using a Raspberry Pi Pico/Pico2
git clone https://github.com/eleccoder/raspi-pico-aprs-tnc.giteleccoder/raspi-pico-aprs-tncA TX-only TNC (Terminal Node Controller) to generate the AFSK (Audio Frequency-Shift Keying) audio tones for APRS (Automatic Packet Reporting System) messages using a RP2040 microcontroller on a Raspberry Pi Pico board. Works also for the newer RP2350 microcontroller on a Pico2 board.
Block diagram showing the signal flow
An analog line-out audio signal will be generated by a band-pass filter connected to GPIO-pin 'GP0' which provides the binary PWM signal. You can probe it by a scope, listen to it by using an audio amp, or connect it to any RF transceiver to send it on the air (ham radio license required).
Image: Line-out signal (see below) probed by a DSO. We clearly see the 1200 Hz and 2200 Hz tones of the 1200 Bd 2-AFSK.
Both a static library libaprs_pico.a and a demo application will be generated by the build.
Your host platform for cross-compilation is assumed to be LINUX.
PICO_SDK_PATH environment variable to point to your Pico-SDK installation directory cd $PICO_SDK_PATH/..
git clone -b master https://github.com/raspberrypi/pico-extras.git
cd pico-extras
git submodule update --init
We just need a simple band-pass filter to extract the analog AFSK-signal from the binary PWM signal:
The line-out voltage can be as high as 2.7 Vpp (~1 Vrms) (at full-scale volume setting in the software and high-impedance load).
NOTE: In case you want to allow the Pico(2) to control the PTT (Push-To-Talk) input of your transmitter, set the appropriate #define parameters in src/aprs_pico_beacon_demo.c.
git clone https://github.com/eleccoder/raspi-pico-aprs-tnc.git
cd raspi-pico-aprs-tnc
cmake -S . -B build # For Pico2: cmake -S . -B build DPICO_BOARD=pico2
cmake --build build
build/lib/libaprs_pico.a and build/aprs_pico_beacon_demo[.uf2|.elf|.bin|.hex] will be generated, as well as the testing application build/aprs_pico_tone_test[.uf2|.elf|.bin|.hex].
The analog AFSK audio signal will be available at the filter's line-out. You can probe it by a scope, listen to it by using an audio amp, or connect it to any RF transceiver to send it on the air (ham radio license required).
But for testing the signal integrity, you can feed the signal into the soundcard of your computer and let decode its data content by Dire Wolf - see down below.
Flash the file build/aprs_pico_beacon_demo[.uf2|.elf|.bin|.hex] to the Pico(2) board in the same way as you're usually doing.
We can use the famous Dire Wolf CLI software to decode the APRS data after sampling our APRS audio signal by means of a soundcard.
arecord -f cd -c 1 - | aplay
sudo apt install direwolf
arecord -f cd -c 1 - | direwolf -
Here is a recorded audio wav-file (44.1 kHz, mono, WAVE) captured by the soundcard using:
arecord -f cd -c 1 > aprs_pico_beacon_demo.wav
You can replay and decode this file by:
cat aprs_pico_beacon_demo.wav | direwolf -
If you actually want to RF-transmit the APRS signal, you can simply do it by one of the many cheap HTs, like the Baofeng UV-5. The complete schematic including PTT control looks like this:
Don't forget to set the appropriate #define parameters in src/aprs_pico_beacon_demo.c to configure PTT control.
APRS Payload => AX.25 => AFSK (PCM) conversion I'm using my modified version of fsphil's ax25beacon project.PCM => PWM conversion I'm using the pico_audio_pwm library from pico-extras (NOTE: ATTOW, maturity seems to be rather alpha/beta).more like this
simple generator for 3D-printed frames for a moxon rectangle antenna
Compiling Raspberry Pi Pico RP2040 / Pico2 RP2350 C/C++ programs on Fedora
search projects, people, and tags