Developed for exciter retrofits
Originally developed for replacing the proprietary controller of a DRFS06 exciter, while remaining useful for other TSA5511-based designs.
Arduino PLL control project
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.
Originally developed for replacing the proprietary controller of a DRFS06 exciter, while remaining useful for other TSA5511-based designs.
The LCD interface separates persistent System Menu settings, everyday Quick Menu functions and a hidden Service Menu for diagnostics and maintenance.
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.
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.
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.
SET to edit prompts for system settings and a * marker on EXIT MENU when unsaved changes are pending! marker on every page while SYSTEM UPTIME continues to refresh; unavailable FL/input values shown as -, actively driven input ports masked as -/---, and interrupted lock timing shown as <unknown>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.
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.
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.
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.
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.