Skip to content

Heltec V4: Measured TX Power Output Table (firmware setting vs actual conducted dBm) #1708

@JasonKrijgsman

Description

@JasonKrijgsman

Heltec V4: Measured TX Power Output Table (firmware setting vs actual conducted dBm)

Update: @towerviewcams followed up with a more rigorous test using a calibrated Rohde & Schwarz NRX power meter across 3 boards (5 runs each, averaged). His data shows ~1.1 dB of continued gain from TX=18 to TX=22, with significant current cost (605 to 741 mA). My single-unit tinySA measurements showed that range as flat, likely due to measurement resolution limits. See his full results in the comments below.

Correction on TX=24: After tracing the firmware call chain, RadioLib clamps SX1262 output at 22 dBm regardless of MeshCore's MAX_LORA_TX_POWER setting. My TX=24 measurement was effectively TX=22. The TX=22/24 identical readings reflect this firmware limit, not PA saturation. Measurements at TX=1–20 are unaffected.

Summary

I measured the actual conducted TX output power of a Heltec V4 running MeshCore across TX settings 1–24 using a repeatable bench setup. The key finding is that output ramps non-linearly and hits a hard ceiling around ~+27–28 dBm conducted (~0.5 W). Above roughly TX=18–20, additional TX setting increases provide zero additional output — on my unit TX=22 and TX=24 measured identically to TX=18.

This is relevant to #1403, #1017, and the FAQ entry (§7.7) about Heltec V4 TX power settings.

Note: This is not lab-grade metrology (tinySA + bursty packets). Expect roughly ±1 dB uncertainty on absolute values. The saturation finding is robust regardless — relative measurements using the same setup eliminate systematic errors, and the identical readings at TX=18/22/24 indicate a hard PA ceiling, not measurement noise..

Test Setup

Component Detail
Device Heltec V4 (MeshCore, firmware v1.13.0)
Analyzer tinySA Ultra Plus ZS407 via USB (tinySA-App)
Region/Preset EU / EU Narrow
Frequency / BW ~869.6 MHz / 62.5 kHz BW
External attenuator 30 dB inline pad (always in line)
EXT GAIN correction 0 dB (not applied on device)
Internal attenuation 30 dB
LNA Off
RBW 10 kHz
Trace mode Max Hold
TX method MeshCore advert bursts (~20–30 sec per setting)
Power calculation Pout (dBm) = peak_bin (dBm) + 30 dB external pad

Cable/connector loss not subtracted — real output is slightly higher than reported values.

Measured Results (Peak-bin method)

MeshCore set tx Measured Peak (dBm) Actual Output (dBm) Actual Output (mW) Notes
1 -22.99 +7.0 5.0
5 -17.81 +12.2 16.6
10 -9.71 +20.3 106.8
12 -7.48 +22.5 178.5
14 -5.72 +24.3 267.9
16 -4.57 +25.4 349.2
18 -2.84 +27.2 519.8
20 -2.27 +27.7 593.2 practical maximum
22 -2.84 +27.2 519.8 saturated — identical to TX=18
24 -2.84 +27.2 519.8 saturated — identical to TX=18

Top-50-bin linear average (less sensitive to burst timing)

TX Avg Output (dBm) Avg Output (mW)
5 +11.6 14.3
10 +19.6 91.9
12 +21.0 125.5
14 +23.4 220.4
16 +25.0 318.0
18 +26.6 461.7
20 +27.3 535.4
24 +27.2 519.8

Comparison with Heltec Official Data

A Heltec contributor (@Quency-D) published a TX power table in meshtastic/firmware#8070 (Sep 25, 2025), described as measured on a "mass production version" at the antenna interface using a spectrum analyzer. Comparing the 868 MHz columns:

TX Setting Heltec Official (dBm) My Measurement (dBm) Delta (dB)
1 12.23 +7.0 -5.2
5 15.80 +12.2 -3.6
10 21.25 +20.3 -0.95
14 24.61 +24.3 -0.31
16 26.62 +25.4 -1.2
18 27.86 +27.2 -0.66
20 28.61 +27.7 -0.91
22 29.00 +27.2 -1.8

At mid-range settings (TX=10–18), agreement is within ~1 dB — consistent with my cable/connector losses and measurement uncertainty. Two notable discrepancies:

  1. Low TX settings (1–5): My readings are 3–5 dB lower than Heltec's table. This is larger than cable loss alone can explain.
  2. High TX settings (20–22): Heltec's table shows power climbing smoothly to 29 dBm at TX=22 with no compression. My unit shows a clear plateau at ~27–28 dBm and TX=22/24 reading identically to TX=18.

The smooth, monotonically increasing curve in Heltec's table is not consistent with typical PA saturation behavior — real power amplifiers compress and clip at their maximum output. My measurements show the expected compression knee at ~+27 dBm, consistent with GC1109 datasheet maximum ratings.

Possible explanations include different measurement conditions (continuous carrier vs bursty packets), board revision differences, unit-to-unit PA variance, or the table being derived from component datasheet calculations rather than end-to-end measurements on production hardware.

Key Takeaways

  1. Non-linear mapping. The SX1262 → 17 dB attenuator → GC1109 PA chain is not linear. Firmware cannot assume TX setting = output dBm.
  2. Hard saturation. On my unit, TX=18, 22, and 24 all produced the same conducted power (-2.84 dBm + 30 dB pad = +27.2 dBm). This is not marginal — it's a hard ceiling.
  3. Practical maximum is TX=18–20. TX=20 measured slightly higher (+27.7 dBm) but TX=22/24 rolled back to TX=18 levels.
  4. Battery waste. Settings above the plateau consume more DC power without increasing RF output or range.
  5. EU context. MeshCore EU/EU Narrow presets operate at ~869.618 MHz, which falls in the 869.4–869.65 MHz sub-band (500 mW ERP, duty-cycle constraints apply). Whether a given TX setting is compliant depends on conducted power + antenna gain - cable losses = ERP.
  6. MAX_LORA_TX_POWER=22 in the firmware is reasonable — going higher doesn't help anyway.

Practical Recommendations

  • Max useful power: TX=18-20 is the efficiency sweet spot. TX=22 gives ~1 dB more but at 150+ mA additional current draw.
  • EU users (869.618 MHz, 500 mW ERP sub-band): TX=18–20 keeps you in the right ballpark. Actual ERP depends on your antenna gain and cable losses.
  • US/FCC users (915 MHz, 1W/30 dBm limit): The Heltec V4 hardware cannot reach 30 dBm regardless of firmware setting. TX=18–20 is the physical maximum.
  • Battery/solar nodes: Use the lowest TX that links reliably. The power difference between TX=5 (~17 mW) and TX=20 (~593 mW) is ~35x.

Raw Data

CSV files for each TX setting are available on request (captured via tinySA-App).

Offer

I'm happy to:

  • Fill in additional TX steps (2, 3, 4, 6, 7, 8, etc.) if there's interest in the full low-power curve
  • Submit a PR to update docs/faq.md (§7.7) with this data
  • Test with different firmware versions if needed
  • Provide the raw CSV files

Related Issues

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions