PostHeaderIcon ATmega169PV: Display Fuses, Bias, and a Screen That Stays Dark

A microcontroller that drives glass has an unusual problem: the display needs a clock of its own, a bias voltage, and a contrast setting, and all three have to be right before anything appears. None of them is in the program.

They are fuse settings. That makes a device with a perfect flash image capable of showing nothing at all, and it makes the fuse byte the first thing to read on any display product that arrives dead but functional.

What the display fuses control

Setting Effect Symptom when wrong
Driver clock source Waveform timing Flicker, or nothing
Bias Voltage levels per phase Faint, patchy, or invisible
Initial contrast Segment drive strength Readable in one light, not another
Multiplex ratio Number of backplanes Ghosting, or half the display blank

The fourth row is the one that produces the most confusing result. A multiplex setting that does not match the glass produces a display where some segments light and others do not, and that pattern looks like a firmware bug in the segment table. It is not: the table is fine and the waveform is driving the wrong number of common lines.

Why the fuses are outside the image

Fuses are configuration, not content. They are read and written through dedicated commands, they are not part of the flash address space, and no hex file of the program contains them.

So a recovery that produces a flash image and stops there has produced the program and omitted the settings that make the display work. Restoring that image onto a blank part with default fuses yields a device that runs and shows nothing.

That is a specific and common failure, and it is entirely avoidable: read the fuse byte at the same time as the flash and keep them together as one artefact.

Reading the display configuration out of the code

The firmware still has work to do, and it leaves traces:

  • Enabling the driver and selecting the multiplex ratio at start-up.
  • Writing an initial contrast value, which may then be adjusted.
  • A periodic interrupt that refreshes the display, or a write to a frame-complete flag.
  • Temperature compensation, if the product is careful, which reads a sensor and adjusts contrast.

That last item is worth looking for. A firmware that compensates contrast for temperature is a firmware written by someone who saw the product fail in the field, and the compensation curve is a design decision stored in the image.

Why the P and V suffixes matter here

The picoPower die changed the display driver along with everything else, and the extended low-voltage range interacts with contrast: at a lower supply there is less voltage headroom for the bias levels, and the same contrast setting produces a dimmer display.

A product specified across a wide supply range therefore has to adjust contrast with voltage, not just temperature. Firmware that does not is firmware that was validated at one rail.

Reading order for a display device

  1. Signature, fuses, lock byte — the display fuses first among them.
  2. Array read, verified.
  3. Initialisation: driver enable, multiplex, contrast.
  4. Refresh path: interrupt or polling, and its period.
  5. Segment table and its index.

Step 5 is the deliverable, and it is verifiable against the glass. If the table reconstructed from the image renders the product’s actual display, the analysis is correct — a property no other kind of product offers so directly.

Related notes

FAQ

Can the display work without the driver fuses being set? No. The waveform and bias come from those settings.

Are display fuses readable on a locked part? Yes. Fuses are outside the lock bit mechanism.

Why do some segments not light? Usually a multiplex ratio that does not match the glass, not a table error.

Does contrast need temperature compensation? For a product used across a range, yes, and careful firmware does it.

Conclusion

On a display product, the fuse byte is as important as the image. Driver clock, bias, contrast and multiplex live outside the flash and outside every hex file, and a wrong one turns a perfect recovery into a dark screen. Reading them together with the code is what makes the result reproducible.

Comments are closed.