Arduino PLL control project

TSA5511 PLL Controller for Arduino

A PLL controller for TSA5511-based FM exciter and VCO projects. Version 5.2.3 combines an Arduino Nano, a 16x2 LCD and three pushbuttons with a System Menu, Quick Menu, hidden Service Menu, live diagnostics, carefully managed EEPROM storage and automatic PLL communication recovery.

Developed for exciter retrofits

Originally developed for replacing the proprietary controller of a DRFS06 exciter, while remaining useful for other TSA5511-based designs.

Menu driven

The LCD interface separates persistent System Menu settings, everyday Quick Menu functions and a hidden Service Menu for diagnostics and maintenance.

EEPROM aware

Persistent system settings, per-band operating states and user memories are restored after restart, while temporary actions stay out of EEPROM. A compile-time boundary check protects the 1 kB EEPROM layout.

Interactive browser demo

Explore a functional simulation of the v5.2.3 controller without physical hardware. Operate the virtual 16x2 LCD and buttons, navigate the System, Quick and hidden Service menus, inspect live diagnostics and the virtual TSA5511 status/output ports, and trigger simulated I²C communication loss or a TSA5511 power cycle to observe the recovery behaviour.

The simulation does not communicate with a physical Arduino or TSA5511. Any saved demo settings remain local to the browser.

Launch the interactive demo

Project overview

This project provides a compact Arduino-based front-panel controller for TSA5511 PLL designs. It brings persistent configuration, everyday operating functions and service diagnostics to a 16x2 LCD interface, so frequency control, memory handling, RF-drive control and maintenance checks can be handled directly from the hardware.

The controller is intended for VCO frequency control from 64 MHz up to 1,300 MHz, within the specification range of the TSA5511. It supports configurable VCO bands, selectable PLL crystal frequency, I²C address handling, periodic TSA5511 status monitoring, live lock/input diagnostics, PLL lock-time measurement, PLL divisor display, current I²C address, POR and I²C recovery counters, system uptime, output-port diagnostics, state-aware recovery from communication loss or unexpected PLL resets, user memories, station-name editing, temporary RF-drive control, optional menu-title display and LCD backlight control.

Main features

Hardware overview

The hardware consists of an ATmega328P-based 5 V Arduino Nano or a fully compatible board, a standard 16x2 LCD, three pushbuttons with 470 nF debounce capacitors, the TSA5511 PLL circuit and an optional PLL lock LED. The lock LED can also act as a blinking fault indicator, while the LCD displays the lock status directly.

Controller ATmega328P-based 5 V Arduino Nano or fully compatible board
User interface 16x2 LCD, DOWN / SET / UP buttons
PLL device TSA5511 with configurable I²C address
Typical use FM exciter, VCO and RF frequency-control projects

Pull-up resistors on SDA and SCL are required. If the I²C bus passes through RF-decoupling circuitry, lower values may improve communication reliability; the supplied wiring diagram shows 2.2 kΩ. When using TSA5511 package variants with fewer available output ports, make sure that port mapping only selects physically available ports.

Operation and settings

In normal use, the VCO frequency is adjusted with UP and DOWN and confirmed with a short SET press. A brief chord-acquisition window allows the UP+DOWN Service Menu gesture to be recognized without briefly entering frequency edit mode, and the same gesture remains available during runtime I²C recovery. Holding SET cancels a pending frequency change, while holding UP or DOWN starts an accelerated sweep. A chord that begins during frequency editing is consumed until both buttons are released, so it cannot open the Service Menu after the edit times out. The System Menu discards unsaved changes on timeout; during normal operation the Service Menu and DIAGNOSTICS use a longer timeout, while startup Service Menu/DIAGNOSTICS do not time out and resume initialization only after explicit exit. Quick Menu actions are applied immediately. After LCD wake-up, the waking press is consumed until all buttons have been released. PLL lock is verified after programming. To prevent false unlock indications caused by FM modulation, operational lock-flag polling stops after lock has been detected, while periodic TSA5511 status monitoring remains active. DIAGNOSTICS refreshes raw status information without overriding operational lock state or output-port control. It also exposes PLL divisor, current I²C address, recovery count and controller uptime. Before PLL initialization, the first valid status read establishes the expected POR baseline; lock timing, PLL divisor and output-port command data are marked as not initialized, and the output-port command remains so until the first successful PLL programming. During runtime I²C recovery, both the Service Menu and DIAGNOSTICS remain browsable; every page carries a fixed ! in the upper-right. SYSTEM UPTIME continues to refresh, unavailable FL/input values are shown as - and interrupted lock timing is shown as <unknown>. A read-only interruption invalidates the measured lock time until a new uninterrupted acquisition starts. The recovery counter is incremented only after recovery has successfully completed. After a completed I²C recovery, the LCD controller is reinitialized before the interface is redrawn, helping resynchronize the display if the fault or a related supply disturbance affected its controller state. Existing PLL programming is retained after a read-only interruption without POR; full reprogramming is performed only after an uncertain write or an unexpected TSA5511 reset indicated by POR.

About this landing page

This landing page provides a concise project overview and direct access to the interactive browser demo. The GitHub repository remains the authoritative source for the full Arduino sketch, detailed documentation, pin mappings and version history.

Source code and documentation

The complete Arduino sketch and project documentation are available in the public GitHub repository. Use the repository for the latest source code, detailed comments, pin mappings and version history.

Open the GitHub repository