HOW-TO GUIDE
Why Is My Oscilloscope Frequency Reading Unstable?
By the OhmSavvy Research Team ·

How the Freq readout works
An automatic frequency measurement does not "listen" to the signal the way a radio does. In most scopes it takes the captured record, finds the points where the waveform crosses a reference level, usually 50% of the way between its top and base, measures the time between matching crossings to get the period T, and reports f = 1 ÷ T. Everything that makes those crossings unclear, inconsistent or too few makes the reading jump or turn into dashes. Some scopes also have a separate hardware counter that counts edges from the trigger circuit over a fixed gate time, which behaves a little differently and is covered at the end.
01
Capture
Trigger fires, record stored
02
Find top and base
Sets the 50% threshold
03
Find crossings
Rising edges at the threshold
04
Time them
Period T between crossings
05
f = 1 ÷ T
Shown, then the next capture
Because the period is what is measured, it helps to think in periods. Frequency and period are reciprocals: f = 1 ÷ T and T = 1 ÷ f. A 16 MHz clock has T = 1 ÷ 16,000,000 = 62.5 ns. A small relative error in T becomes the same relative error in f, so a 1 ns misjudged edge on that clock is 1 ÷ 62.5 = 1.6% of the period, and the reading moves from 16.0 MHz to 1 ÷ 61.5 ns ≈ 16.26 MHz. That is why fast signals at modest sample rates show the most jumpy readings.
Causes, checks and fixes
| Symptom | Likely cause | How to check | Fix |
|---|---|---|---|
| Reading jumps and the trace slides sideways | Trigger not locking | Is the trigger status Trig'd or Auto? | Set source, level inside the signal, Normal mode |
| Reading roughly double, or random high values | Noise causing extra threshold crossings | Zoom in on an edge and look for wiggles | Noise or HF reject, BW limit, larger signal, averaging |
| **** or ? instead of a number | Less than one full cycle on screen | Count cycles across the 10 divisions | Slow the timebase until 2 to 10 cycles fit |
| Erratic reading with hundreds of cycles on screen | Too few samples per cycle in the measured record | Divide displayed sample rate by signal frequency | Faster timebase so fewer cycles fit |
| Wrong or jumping value at slow time/div only | Low sample rate, possible aliasing | Read the sample rate on screen | Faster timebase, deeper memory |
| Low-frequency reading drifts or vanishes | AC coupling near its cutoff | Check channel coupling | Use DC coupling |
| Plausible but wrong number, or noise-like values | Measurement on the wrong channel | Check the measurement's source label | Set the source to the probed channel |
| Small, steady wander that tracks temperature or load | The signal really varies | Use statistics: mean, min, max, std dev | Judge against the oscillator's tolerance |
1Get a stable trigger first
A trace that slides or flickers sideways gives every capture a different set of edges, and some captures catch partial or misaligned cycles. Fix the picture before trusting any number. Set the trigger source to the channel you are measuring, put the level about halfway up the signal, choose a rising edge, and use Normal mode once the level is right so the scope only draws captures that actually triggered. If the trace still will not settle, work through how to stop a waveform drifting, and if the scope never triggers at all, see why an oscilloscope trigger is not working.
2Check the measurement is on the right source
Automatic measurements are attached to a source channel that you pick when you add them, and it does not follow the probe. If you move the probe from CH1 to CH2, the Freq readout may still be timing CH1, which is now an unconnected input producing noise and random values. Look at the label beside the reading (often "Freq(1)" or a colored channel tag) and set it to the probed channel. If a channel shows nothing at all, check why there is no signal on one channel. If the measurement is on a math trace, make sure the math output actually crosses its threshold.
3Put the right number of cycles on screen
With less than one complete cycle visible, there are not two matching crossings to time, so the scope shows dashes or a question mark. Go too far the other way and the reading can become erratic too: if the screen holds hundreds of cycles, each cycle is covered by very few points, especially on scopes that compute measurements from a reduced display record rather than the full memory. As an example, if a measurement worked from about 1,000 points and the screen held 500 cycles, each cycle would get only 1,000 ÷ 500 = 2 points, too few to place an edge.
Aim for roughly two to ten cycles across the ten divisions. For a signal of frequency f, time/div ≈ cycles wanted ÷ (10 × f). For four cycles of a 25 kHz signal: 4 ÷ (10 × 25,000) = 16 µs/div, so the nearest standard setting of 10 µs/div (2.5 cycles) or 20 µs/div (5 cycles) both work.
4Stop noise from double-counting edges
On a fast, clean edge the signal passes through the threshold once. On a slow edge with noise riding on it, the trace can cross the threshold several times in quick succession, and a scope without enough hysteresis counts each crossing as a new edge. The measured period then becomes a fraction of the real one and the frequency reads double, triple or randomly high.
You can estimate how wide the danger zone is. The slope of a sine wave at its zero crossing is 2π × f × A, where A is its peak amplitude. A 1 kHz sine with A = 0.5 V rises at 2π × 1,000 × 0.5 ≈ 3,140 V/s, or 3.14 mV per microsecond. With 20 mV of peak-to-peak noise on it, the trace sits within the noise of the threshold for about 20 ÷ 3.14 ≈ 6.4 µs on every edge, plenty of time for several false crossings. Double the amplitude and that window halves; a square wave's fast edges barely have one at all.
Fixes, roughly in order: make the signal fill more of the screen vertically so the scope's threshold logic has more resolution; turn on noise reject or HF reject in the trigger menu, which adds hysteresis or filtering to the trigger path; switch on the bandwidth limit if the signal is slow enough to pass through it; and add averaging. Shortening the probe ground and using a 10x probe also remove a lot of pickup, as explained in why an oscilloscope waveform looks noisy.
5Check the sample rate at slow timebases
The time resolution of a waveform measurement is set by the interval between samples. At 1 GSa/s samples are 1 ns apart; at 250 MSa/s they are 4 ns apart. Without interpolation, one sample of error on a single 1 µs period is 1 ÷ 1,000 = 0.1% at 1 GSa/s but 4 ÷ 1,000 = 0.4% at 250 MSa/s. Most scopes interpolate between samples, so real results are usually better, but the principle holds: fewer samples per period means a coarser, jumpier reading.
| Signal | Period | Sample interval | Samples per period | One-sample error |
|---|---|---|---|---|
| 10 kHz | 100 µs | 1 ns (1 GSa/s) | 100,000 | 0.001% |
| 1 MHz | 1 µs | 1 ns (1 GSa/s) | 1,000 | 0.1% |
| 1 MHz | 1 µs | 4 ns (250 MSa/s) | 250 | 0.4% |
| 16 MHz | 62.5 ns | 4 ns (250 MSa/s) | 15.6 | 6.4% |
| 16 MHz | 62.5 ns | 1 ns (1 GSa/s) | 62.5 | 1.6% |
Worst-case resolution for a single-period measurement with no interpolation; illustrative arithmetic, not any one scope's specification. Remember that at slow time/div settings a scope reduces its sample rate to fit the window into memory, and turning on more channels can divide the maximum rate on many models. If the reading only goes wrong at slow timebases, check the sample rate shown on screen; if it has fallen below about twice the signal frequency, the scope is measuring an alias. What GSa/s means covers the memory and sample-rate trade-off in more depth.
6Use DC coupling for low-frequency signals
AC coupling puts a capacitor in the input path, forming a high-pass filter whose cutoff is typically a few hertz to around 10 Hz, depending on the scope. Signals near that cutoff are attenuated and phase shifted, so the waveform drifts up and down as its content changes and its crossings of the 50% threshold wander. Pulse trains are affected even at higher frequencies: AC coupling centers the average on zero, so when the duty cycle changes, the whole trace moves and the measured edges move with it. For anything below a few hundred hertz, and for pulses whose duty cycle varies, switch the channel to DC coupling.
7Average the reading and use statistics
Once the setup is right, use the measurement statistics view (mean, minimum, maximum and standard deviation) instead of staring at a single live number. Averaging independent readings shrinks the random part of the spread by the square root of the number averaged. If single readings of a 10 kHz signal scatter with a standard deviation of 40 Hz (0.4%), the mean of 16 readings has a standard deviation of about 40 ÷ √16 = 10 Hz (0.1%), and of 100 readings about 40 ÷ 10 = 4 Hz (0.04%).
Spread (one standard deviation) of a 10 kHz frequency reading as more readings are averaged, starting from an illustrative ±40 Hz. Measuring across several periods on one capture helps the same way: a 1 ns timing error spread over ten 1 µs periods is 1 ÷ 10,000 = 0.01% instead of 0.1%. Averaging only removes random scatter, not a systematic error such as double-counting or a wrong source, so fix those first.
Measuring frequency on mains-powered circuits
How much variation is normal?
After the setup is fixed, some movement may be the signal itself. Oscillators are only as stable as their timing element, and some signals are deliberately varied. Compare the spread you see with the typical tolerance of the source; the figures below are typical published ranges and vary by part, so check the datasheet for the exact component in your circuit.
Bars use a logarithmic scale: each step is ten times the last.
Typical frequency tolerance by oscillator type, in parts per million (log scale); upper end of each range shown. Worked examples: a 16 MHz crystal at ±50 ppm may sit anywhere within 16,000,000 × 50 ÷ 1,000,000 = ±800 Hz, so a reading of 16.0006 MHz is perfectly normal, while 16.3 MHz is not a crystal tolerance issue. A 16 MHz ceramic resonator at ±0.5% may be ±80 kHz off. A microcontroller's internal 8 MHz RC oscillator at ±2% may read anywhere from 7.84 to 8.16 MHz and drift as it warms up.
| Signal type | Variation you may see | Normal? |
|---|---|---|
| Crystal-clocked MCU or logic clock | Last one or two digits flicker | Yes, resolution flicker |
| Crystal clock reading off by several % | Steady but wrong | No: wrong harmonic, wrong source or double-counting |
| Spread-spectrum clock (PCs, some SoCs) | Reading wanders by a fraction of a percent | Yes, the clock is swept on purpose |
| RC oscillator, 555 timer, internal MCU clock | Drift of a percent or more with temperature and supply | Usually yes |
| FM, FSK or PWM with dithering | Large, regular jumps | Yes, the signal is modulated |
| Mains-derived signals | Small slow wander around 50 or 60 Hz | Yes, grid frequency moves slightly with load |
To see real variation edge by edge rather than as a jumpy number, trigger on one edge and watch a later edge spread with persistence on, or use period statistics; the method is in how to compare clock jitter. For crystals specifically, see how to check a crystal oscillator.
Hardware counter vs waveform measurement
A waveform-based Freq measurement times the crossings in one capture, so its resolution depends on the sample interval, the number of periods on screen and any interpolation. On a clean signal with several cycles visible it is commonly good to a fraction of a percent, which is plenty for checking that a PWM, a UART clock or an oscillator is in the right place.
Some scopes also include a hardware frequency counter that counts trigger events over a gate time, often displaying five or six digits. A counter that gates over 100,000 cycles of a 1 MHz signal sees a 0.1 s window, and a one-count uncertainty over that window is 1 ÷ 100,000 = 0.001%, far finer than one capture can resolve. Its absolute accuracy is then limited by the scope's own timebase reference, which on general-purpose scopes is commonly specified in tens of parts per million; check your model's datasheet for the exact figure. Because the counter works from the trigger comparator, it still needs a clean, stable trigger, and noise causes the same double-counting.
| Waveform Freq measurement | Hardware counter | |
|---|---|---|
| Works from | Crossings in one captured record | Trigger events over a gate time |
| Typical resolution | Fraction of a percent, better with more cycles | Five or six digits on many scopes |
| Main limit | Sample interval, cycles on screen, noise | Timebase reference accuracy, often tens of ppm |
| Best for | Quick checks while viewing the waveform | Tuning, calibration, small drifts |
For the hand method of reading frequency from the graticule and cross-checking the automatic value, see how to measure frequency with an oscilloscope.
In short
Scopes with dedicated frequency counters or headroom for timing work

Two 50 MHz channels at 1 GSa/s on all channels, with a frequency counter and built-in 20 MHz generator.

100 MHz, two channels, 1 GSa/s, with a 6-digit frequency counter; memory is shallow.

Four channels, 50 MHz, 1 GSa/s on one channel (250 MSa/s with three or four on). Hands-on tested by OhmSavvy.
As an Amazon Associate I earn from qualifying purchases. Prices and availability are shown on Amazon.
Frequently asked questions
What does **** or ? mean in an oscilloscope frequency measurement?
It means the scope could not calculate a valid value from the current capture. The usual reasons are less than one full cycle on screen, a signal too small or too far off-screen to find the threshold crossings, or a measurement pointed at a channel with nothing on it. Set the timebase so two to ten cycles fit on screen, fit the signal vertically, and check the measurement source.
Why does my oscilloscope show double the real frequency?
It is usually counting each edge twice. On a slow or noisy signal, noise makes the trace wiggle back and forth through the measurement threshold, so the scope sees two or more crossings per real edge. Turn on noise reject or HF reject, use a bandwidth limit for slow signals, raise the signal to fill more of the screen, or add averaging so stray crossings stop corrupting the period.
How accurate is an oscilloscope frequency measurement?
It depends on the method. Readings computed from the captured waveform are limited by sample interval and how many cycles are measured, and on a clean signal with several cycles on screen they are often good to well under 1%. A dedicated hardware counter, where fitted, typically shows five or six digits and is limited mainly by the scope's timebase reference, often specified in tens of parts per million.
Is it normal for the frequency reading to change in the last digit?
Yes. A displayed value flickering between 1.0002 kHz and 0.9998 kHz is a swing of about ±0.02%, which is normal resolution flicker for a waveform-based measurement. Use the statistics or averaging function to see the mean and spread. Variation of several percent is not resolution noise; it points to a trigger, noise or setup problem, or a signal that genuinely varies.
Should I use an oscilloscope or a frequency counter to measure frequency?
For checking that a clock, PWM or oscillator is roughly right, the scope's measurement is fine and lets you see the waveform at the same time. For calibrating an oscillator, tuning a crystal to parts per million or logging slow drift, a dedicated counter or a scope's built-in hardware counter with a good timebase reference is the better tool, because it gates over many cycles.
Why is my oscilloscope frequency reading unstable on mains or very low frequencies?
Low-frequency signals are easily affected by AC coupling, which attenuates and shifts anything near its cutoff of a few hertz, and by slow timebases, where the scope samples slowly and updates rarely. Use DC coupling, enough time per division to fit at least two cycles, and averaging. For mains-derived signals, line triggering also steadies the display.
Where to go next
How to Measure Frequency With an Oscilloscope →
The basic method: count divisions, find the period, take 1/T.
How to Stop a Scope Waveform From Drifting →
Steady the trigger so the measurement has something to lock to.
Compare Clock Jitter Using an Oscilloscope →
When the variation is real, quantify it edge by edge.
Why Does My Oscilloscope Waveform Look Distorted? →
When the reading is steady but the shape looks wrong.


