
This week's pick is Pocket Pico, a Raspberry Pi Pico TNC for amateur packet radio: a Z80 emulator runs the original Heathkit HK-21 firmware while the Pico handles the Bell 202 modem in software, for roughly $15–30 and an intermediate weekend.
roms/hk21rom.bin, and the project's credits record that Howard Goldstein (N2WX) wrote the original TNC EPROM code and gave permission for the binary to be distributed here. The Z80 emulator itself is Lin Ke-Fong's z80emu, which is also credited. 78
| Qty | Part | Specification | Role in build | Planning cost |
|---|---|---|---|---|
| 1 | Microcontroller board | Raspberry Pi Pico (RP2040), 2 × 20 pins | Runs the Z80 emulation, the modem and the serial ports | $4 |
| 3 | Capacitor | 100 nF ceramic, 2.5 mm pitch | Transmit filter, transmit coupling, receive coupling | $0.30 |
| 4 | LED | 3 mm through-hole, any colour | Push-to-talk, carrier, connected and station-data indicators | $0.40 |
| 2 | Diode | 1N4148 | Clamp the receive audio into the ADC's range | $0.20 |
| 1 | Transistor | 2N3904, TO-92 | Keys the radio's push-to-talk line | $0.15 |
| 4 | Resistor | 1 kΩ | LED series resistors | $0.20 |
| 2 | Resistor | 4.7 kΩ | Transistor base drive and base pull-down | $0.10 |
| 2 | Resistor | 10 kΩ | Bias divider on the receive input | $0.10 |
| 1 | Resistor | 100 Ω | Transmit filter series resistor | $0.05 |
| 1 | Resistor | R9: 4.7 kΩ for Yaesu, 22 kΩ for Icom and Standard | Push-to-talk series resistor; value follows your radio | $0.05 |
| 1 | Trimmer | 10 kΩ horizontal, Runtron RM-063 pattern | Sets the transmit audio level into the radio | $0.60 |
| 1 | DIP switch | 4-position SPST piano, 2.54 mm pitch | Selects the console and KISS ports, and cuts the LEDs | $0.60 |
| 2 | Jack socket | 3.5 mm PJ320D horizontal (four-pole) and PJ-307 (three-pole) | Radio cable and serial cable | $2.00 |
| Qty | Part | Specification | Role in build | Planning cost |
|---|---|---|---|---|
| 1 | PCB | Two-layer, from the published KiCad files or gerbers; fabricators sell five | The interface sub-board | $5–15 for five |
| 1 | Case and lid | Printed from the OpenSCAD source or the published STLs, PLA or PETG | Holds the board | $1–2 of filament |
| 2 | Headers | 2 × 20-pin, 2.54 mm, if your Pico has no pre-soldered pins | Mounts the Pico | $1–2 |
| — | Consumables | Solder, hook-up wire, heat-shrink | Assembly | $2–3 |

| Pico pin | Net | What it does | Where it goes |
|---|---|---|---|
| GP10 | PWM | Transmit audio, generated by the PIO and DMA | R10 → C1 → RV1 → C2 → MIC on the radio jack J1 |
| GP11 | PTT | Keys the transmitter | R7 → Q1 base; Q1 collector → R9 → PTT_R on J1, and D1 lights |
| GP26 | ADC0 | Receive audio into the ADC at 13.2 kS/s | From SP on J1 through C3, biased by R2/R3 and clamped by D5/D6 |
| GP12 | CDT | Carrier-detect indicator | R6 → D2 |
| GP14 | CON | Connected indicator | R4 → D3 |
| GP15 | STA | Station-data indicator | R5 → D4 |
| GP16, GP17, GP18 | OPT1, OPT2, OPT3 | Read the three mode switches | SW1 positions 1 to 3 |
| GP0, GP1 | TX0, RX0 | 3.3 V TTL serial on UART0 | J2: R pin is TX0, T pin is RX0 |
R9 is the one part whose value depends on your radio: the schematic prints 4.7 kΩ for Yaesu and 22 kΩ for Icom and Standard, and the BOM marks it optional, because its job is to match the push-to-talk line your specific transceiver presents. 1315pico_tnc.uf2 sits in the repository: hold the Pico's BOOTSEL button while plugging in USB, drag the file onto the drive that appears, and the Pico reboots into the TNC. 416 Building from source is the conventional Pico route — CMake against the Pico SDK — and the repository also ships a Dockerfile that assembles a toolchain image, which saves setting up the SDK by hand. 617Pico TNCEMU Emulated Z80 TNC Ver 0.81, then, in console modes, waits up to five seconds for a console to attach before starting. Behind that, the emulated machine prints its own banner — AX.25 Level 2, version 2.0, a 32 kB Z80 machine with the mini PBBS — and it answers the HK-21 command set, including the cmd: commands that dump the TNC's current settings. 418
cmd:disp c dumps the configuration. The capture is from the project repository. 6| Switches 1–3 | USB port | TTL serial port | What it means |
|---|---|---|---|
| off, off, off | Console | KISS | Default: terminal on USB, KISS on the serial jack |
| on, off, off | KISS | Console | Console moves to the serial jack |
| off, on, off | Console | Console | Both ports mirror the console |
| on, on, off | KISS | KISS | Both ports speak KISS |
| on, on, on | — | — | Pico resets into the bootloader for a firmware update |

R9 has to suit the push-to-talk line of the specific transceiver you plug in. Get either wrong and the TNC keys up without being heard, or overdrives the radio's microphone input. 415pico_tnc.uf2, open the USB serial port at 115200 baud, and watch the emulated machine print its banner and answer a cmd: command. Set the switches through their combinations and confirm the console moves between the USB port and the TTL jack. If the emulation runs and the switches respond on a bare Pico, the board is worth ordering; if it does not, you have learned that for the price of the microcontroller you already had. 416hackaday.com
github.com
n7wdz.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
raspberrypi.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.