-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathindex.html
More file actions
381 lines (337 loc) · 17.6 KB
/
Copy pathindex.html
File metadata and controls
381 lines (337 loc) · 17.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="google-site-verification" content="BqP9RSQfLQiSCL0kyj5hCiTWCxZPS0T6amfjk4WEgzQ">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>TSA5511 PLL Controller for Arduino | FM Exciter Frequency Control</title>
<meta name="description" content="An Arduino Nano-based TSA5511 PLL controller for FM exciter and VCO projects, with an interactive browser demo, LCD menus, user memories, RF-drive control, EEPROM storage and automatic I²C/POR recovery.">
<meta name="robots" content="index, follow, max-image-preview:large">
<meta name="author" content="Loenie">
<meta name="theme-color" content="#087ea4">
<link rel="canonical" href="https://spiderblocker.github.io/TSA5511_PLL_Controller_Arduino/">
<meta property="og:type" content="website">
<meta property="og:title" content="TSA5511 PLL Controller for Arduino">
<meta property="og:description" content="Arduino Nano-based TSA5511 PLL controller with an interactive browser demo, LCD menus, user memories, EEPROM storage, RF-drive control and automatic recovery from I²C communication loss or unexpected PLL resets.">
<meta property="og:url" content="https://spiderblocker.github.io/TSA5511_PLL_Controller_Arduino/">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "SoftwareSourceCode",
"name": "TSA5511 PLL Controller for Arduino",
"headline": "Arduino-based TSA5511 PLL controller for FM exciter and VCO projects",
"description": "An Arduino Nano-based TSA5511 PLL controller with an interactive browser demo, LCD menu control, configurable VCO bands, consistent SET-button gesture handling, System Settings, Quick Menu, user memories, EEPROM storage, I²C address handling, automatic I²C and POR recovery, charge-pump and varicap-drive control, port mapping, RF-drive control, station-name editing, menu-title display control, factory reset and backlight dimming.",
"url": "https://spiderblocker.github.io/TSA5511_PLL_Controller_Arduino/",
"codeRepository": "https://github.com/SpiderBlocker/TSA5511_PLL_Controller_Arduino",
"programmingLanguage": "C++",
"runtimePlatform": "Arduino",
"isAccessibleForFree": true,
"author": {
"@type": "Person",
"name": "Loenie"
},
"keywords": [
"Arduino",
"TSA5511",
"PLL controller",
"FM exciter",
"VCO frequency control",
"DRFS06",
"I2C",
"I2C recovery",
"POR monitoring",
"LCD menu",
"Quick Menu",
"user memory",
"RF drive",
"Factory Reset",
"EEPROM",
"interactive demo"
]
}
</script>
<style>
:root {
--bg: #f4f6f8;
--panel: #ffffff;
--ink: #1f2933;
--muted: #5f6b7a;
--accent: #087ea4;
--accent-dark: #075f7d;
--line: #d9e2ec;
--soft: #eef7fb;
--code: #0f172a;
}
* {
box-sizing: border-box;
}
body {
margin: 0;
font-family: Arial, Helvetica, sans-serif;
line-height: 1.65;
color: var(--ink);
background: linear-gradient(180deg, #eaf2f7 0%, var(--bg) 280px);
}
a {
color: var(--accent);
text-decoration: none;
}
a:hover,
a:focus {
color: var(--accent-dark);
text-decoration: underline;
}
.page {
max-width: 1080px;
margin: 0 auto;
padding: 28px 18px 40px;
}
.hero {
padding: 42px 32px;
background: var(--panel);
border: 1px solid var(--line);
border-radius: 18px;
box-shadow: 0 14px 38px rgba(15, 23, 42, 0.08);
}
.eyebrow {
margin: 0 0 10px;
color: var(--accent-dark);
font-size: 0.92rem;
font-weight: 700;
letter-spacing: 0.04em;
text-transform: uppercase;
}
h1 {
margin: 0;
max-width: 820px;
font-size: clamp(2rem, 4vw, 3.2rem);
line-height: 1.12;
color: #17202a;
}
.intro {
max-width: 820px;
margin: 18px 0 0;
font-size: 1.15rem;
color: var(--muted);
}
.actions {
display: flex;
flex-wrap: wrap;
gap: 12px;
margin-top: 26px;
}
.button {
display: inline-block;
padding: 11px 18px;
border-radius: 999px;
font-weight: 700;
border: 1px solid var(--accent);
}
.button.primary {
color: #fff;
background: var(--accent);
}
.button.secondary {
color: var(--accent-dark);
background: #fff;
}
.grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 16px;
margin-top: 22px;
}
.card,
.content-section {
background: var(--panel);
border: 1px solid var(--line);
border-radius: 16px;
box-shadow: 0 8px 24px rgba(15, 23, 42, 0.05);
}
.card {
padding: 20px;
}
.card h2,
.content-section h2 {
margin-top: 0;
color: #17202a;
}
.card p {
margin-bottom: 0;
color: var(--muted);
}
.content-section {
margin-top: 22px;
padding: 28px;
}
.callout {
background: var(--soft);
border-left: 4px solid var(--accent);
}
.feature-list {
columns: 2;
column-gap: 34px;
padding-left: 22px;
}
.feature-list li,
.menu-list li {
break-inside: avoid;
margin-bottom: 8px;
}
.spec-box {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 12px;
margin: 18px 0 0;
}
.spec-box div {
padding: 14px;
background: var(--soft);
border: 1px solid var(--line);
border-radius: 12px;
}
.spec-box strong {
display: block;
color: #17202a;
}
code {
padding: 2px 6px;
border-radius: 6px;
color: #fff;
background: var(--code);
white-space: nowrap;
}
footer {
margin-top: 28px;
padding: 24px;
color: var(--muted);
text-align: center;
}
@media (max-width: 760px) {
.hero,
.content-section {
padding: 22px;
}
.grid,
.spec-box {
grid-template-columns: 1fr;
}
.feature-list {
columns: 1;
}
}
</style>
</head>
<body>
<main class="page">
<section class="hero">
<p class="eyebrow">Arduino PLL control project</p>
<h1>TSA5511 PLL Controller for Arduino</h1>
<p class="intro">A PLL controller for TSA5511-based FM exciter and VCO projects. It combines an Arduino Nano, a 16x2 LCD, three pushbuttons, System Settings, Quick Menu, carefully managed EEPROM storage and automatic PLL communication recovery into a compact front-panel frequency controller.</p>
<div class="actions">
<a class="button primary" href="demo.html">Try the interactive demo</a>
<a class="button secondary" href="https://github.com/SpiderBlocker/TSA5511_PLL_Controller_Arduino">View source code on GitHub</a>
<a class="button secondary" href="#features">Project features</a>
<a class="button secondary" href="#hardware">Hardware overview</a>
</div>
</section>
<section class="grid" aria-label="Project highlights">
<article class="card">
<h2>Developed for exciter retrofits</h2>
<p>Originally developed for replacing the proprietary controller of a DRFS06 exciter, while remaining useful for other TSA5511-based designs.</p>
</article>
<article class="card">
<h2>Menu driven</h2>
<p>The LCD interface separates persistent System Settings from the direct Quick Menu, so configuration and everyday operation remain clear.</p>
</article>
<article class="card">
<h2>EEPROM aware</h2>
<p>Persistent system settings, per-band operating states and user memories are restored after restart, while temporary actions stay out of EEPROM.</p>
</article>
</section>
<section id="demo" class="content-section callout">
<h2>Interactive browser demo</h2>
<p>Explore a functional simulation of the controller without physical hardware. Operate the virtual 16x2 LCD and buttons, navigate System Settings and the Quick Menu, inspect the virtual TSA5511 status and output ports, and trigger simulated I²C communication loss or a TSA5511 power cycle to observe the recovery behaviour.</p>
<p>The simulation does not communicate with a physical Arduino or TSA5511. Any saved demo settings remain local to the browser.</p>
<p><a class="button primary" href="demo.html">Launch the interactive demo</a></p>
</section>
<section id="overview" class="content-section">
<h2>Project overview</h2>
<p>This project provides a compact Arduino-based front-panel controller for TSA5511 PLL designs. It brings both persistent configuration and everyday operating functions to a 16x2 LCD interface, so frequency control, memory handling and RF-drive control can be handled directly from the hardware.</p>
<p>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, state-aware recovery from communication loss or unexpected PLL resets, lock indication, user memories, station-name editing, temporary RF-drive control, optional menu-title display and LCD backlight control.</p>
</section>
<section id="features" class="content-section">
<h2>Main features</h2>
<ul class="feature-list">
<li>Arduino Nano or compatible controller platform</li>
<li>16x2 LCD user interface in 4-bit mode</li>
<li>Three-button operation using DOWN, SET and UP</li>
<li>Consistent SET-button gesture handling for confirmation, return and cancellation</li>
<li>Double-click access to the System Settings menu</li>
<li>Long-press access to the Quick Menu</li>
<li>Configurable VCO frequency bands</li>
<li>Frequency precision matched to the PLL reference step</li>
<li>Separate last-frequency memory per VCO band and crystal setting</li>
<li>Six user memory slots per VCO band and crystal setting</li>
<li>Selectable TSA5511 I²C address with verification when saving changes</li>
<li>Configurable PLL crystal frequency: 1.6 MHz or 3.2 MHz</li>
<li>Selectable high/low charge-pump current and varicap-drive disable</li>
<li>Output port mapping for lock, unlock and RF-stage control</li>
<li>Station-name editor for the idle display</li>
<li>Temporary RF-drive enable/disable control without EEPROM storage</li>
<li>Optional LCD backlight dimming and smooth manual backlight fade-out</li>
<li>Optional menu title display when entering menus</li>
<li>Double-confirmed factory reset applied immediately to stored settings and user memories</li>
<li>State-aware I²C recovery that preserves PLL programming after read-only interruptions and reprograms after uncertain writes or POR</li>
</ul>
</section>
<section id="hardware" class="content-section">
<h2>Hardware overview</h2>
<p>The hardware consists of an Arduino Nano or 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.</p>
<div class="spec-box">
<div>
<strong>Controller</strong>
Arduino Nano or compatible board
</div>
<div>
<strong>User interface</strong>
16x2 LCD, DOWN / SET / UP buttons
</div>
<div>
<strong>PLL device</strong>
TSA5511 with configurable I²C address
</div>
<div>
<strong>Typical use</strong>
FM exciter, VCO and RF frequency-control projects
</div>
</div>
<p>Pull-up resistors on SDA and SCL are required. If the I²C bus passes through RF-decoupling circuitry, lower pull-up values such as 1 kΩ or 2 kΩ may improve communication reliability. When using TSA5511 package variants with fewer available output ports, make sure that port mapping only selects physically available ports.</p>
</section>
<section id="operation" class="content-section">
<h2>Operation and settings</h2>
<ul class="menu-list">
<li><strong>System Settings:</strong> double-click SET to configure VCO, PLL and general settings, then explicitly save or discard pending changes. In system submenus, holding SET returns one level back while keeping pending changes temporary.</li>
<li><strong>VCO settings:</strong> select the active VCO frequency band and choose the displayed/settable frequency precision.</li>
<li><strong>PLL settings:</strong> configure the I²C address, PLL crystal frequency, charge-pump current or varicap-drive disable mode, and output-port mapping. When saving changes after selecting a new I²C address, communication is automatically verified.</li>
<li><strong>General settings:</strong> edit the station name shown in the idle locked state, configure LCD backlight dimming, toggle the menu title display or perform a double-confirmed factory reset. In the station-name editor, short SET confirms a character and holding SET returns from the editor. Factory reset is applied immediately and does not require saving changes.</li>
<li><strong>Quick Menu:</strong> press and hold SET to recall, save or clear user memories, temporarily toggle RF drive, smoothly fade out and turn off the LCD backlight, or return to the main interface.</li>
<li><strong>Exit settings:</strong> open the save/discard/cancel exit menu to explicitly save changes to EEPROM, discard changes or return to the menu.</li>
</ul>
<p>In normal use, the VCO frequency is adjusted with UP and DOWN and confirmed with a short SET press. Holding SET cancels the pending frequency change and returns to the main screen unchanged. Holding UP or DOWN starts an accelerated sweep through the selected frequency band. If no confirmation is given, the frequency edit will time out unchanged. The System Settings menu discards unsaved changes on timeout, while Quick Menu actions are applied immediately. PLL lock is verified after programming. To prevent false unlock indications caused by FM modulation, lock-flag polling stops after lock has been detected, while periodic TSA5511 status monitoring remains active, including during menu operation and frequency editing. I²C communication loss is indicated and retried automatically. Any active menu is closed with unsaved changes discarded and any unconfirmed frequency edit is cancelled. After communication is restored, existing PLL programming is retained after a read-only interruption without POR; acquisition control and lock verification are resumed if required. Full reprogramming is performed only after an uncertain write or an unexpected TSA5511 reset indicated by POR.</p>
</section>
<section id="about-this-page" class="content-section callout">
<h2>About this landing page</h2>
<p>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.</p>
</section>
<section id="repository" class="content-section">
<h2>Source code and documentation</h2>
<p>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.</p>
<p><a class="button primary" href="https://github.com/SpiderBlocker/TSA5511_PLL_Controller_Arduino">Open the GitHub repository</a></p>
</section>
<footer>
<p>© 2026 Loenie · TSA5511 PLL Controller for Arduino</p>
</footer>
</main>
</body>
</html>