Hotspot "can't hear you": step-by-step MMDVM frequency calibration
A classic situation: the hotspot is online, the radio is half a metre away, and yet there's no link — or reception is choppy and distorted. In 9 cases out of 10 the culprit is frequency drift in a cheap MMDVM modem. Let's look at why this happens and how to cure it by tweaking the frequency offset.
Why the modem "drifts"
The ADF7021 radio chip is clocked by a reference oscillator (TCXO). On budget modems, that reference varies from unit to unit and with temperature. As a result, the modem thinks it's transmitting on 433.000, while the actual carrier is hundreds of Hz to several kHz off. The radio expects an exact frequency, picks up the shifted one, and decodes with errors — the BER (Bit Error Rate) climbs, all the way to a complete loss of link.
The fix: RXOffset / TXOffset
The MMDVM firmware has RXOffset and TXOffset corrections (in Hz) — they shift the actual receive and transmit frequencies, compensating for reference drift. The task is to find the offset at which the BER drops to zero.
Method 1. Frequency sweep (by BER)
- Run a Parrot/echo (TG 9990) on the hotspot, or just talk into a radio nearby.
- Step
RXOffsetin increments of, say, 100–200 Hz across roughly −1500…+1500 Hz. - At each step, watch the BER (in the modem logs / on the display / in the dashboard).
- Find the offset with the lowest BER — that's the receiver's "zero". Tune
TXOffsetthe same way.
That's the BER sweep: you walk through the range of offsets and look for the dip in errors.
Method 2. MMDVMCal (precise measurement)
The MMDVMCal utility (G4KLX) puts the modem into calibration mode and lets you precisely measure and set the frequency against a reference receiver/analyzer. It's more accurate than a sweep, but it requires test equipment and stopping the modem's normal operation.
If calibration doesn't help
Also check the obvious: does the Color Code match, is the time slot correct (TS2 for simplex), is the antenna attached, and is there a strong interferer nearby?
In DMRhub, calibration is one click
So you don't have to tweak the offset by hand, the DMRhub panel has built-in auto-calibration: the agent runs the BER sweep across the offset range itself and sets the best value. You just press "Calibrate" in the hotspot card.
Sources
- MMDVMCal (G4KLX) — github.com/g4klx/MMDVMCal
- MMDVMHost (RXOffset/TXOffset parameters) — github.com/g4klx/MMDVMHost
- Pi-Star hotspot frequency tuning — pistar.uk