Skip to content

Commit 3c54800

Browse files
committed
2026.07.12
1 parent dcc9fdf commit 3c54800

7 files changed

Lines changed: 33 additions & 18 deletions

File tree

Hardware.md

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,22 @@ To verify the LTK5128 board's Class mode, check pin 3. If it is tied to Ground,
245245

246246
![image](images/hardware/LTK5128_pin3.jpg)
247247

248+
### Note Regarding Amp-Speaker Pairing
249+
250+
Speaker wattage is a **maximum handling** rating, not a minimum requirement. A 3W amp can drive 300W speakers — they'll just be quiet.
251+
252+
What actually matters for amp compatibility is **impedance (Ω)**:
253+
254+
| Amp | Rated Impedance | Notes |
255+
| --- | --------------- | ----- |
256+
| PAM8406 | 4Ω (3W x 2) | Works at 8Ω (~1.5W per channel). Filterless Class-D, no output capacitors needed |
257+
| PAM8403 | 4Ω (3W x 2) | Similar to PAM8406, lower power |
258+
| PAM8610 | 4–8Ω (10W x 2) | Requires 7–15V supply (not USB). Overkill for desktop use |
259+
| LTK5128 | 4–8Ω (3W) | Mono Class-AB. Use two for stereo |
260+
| MAX98357A | 4–8Ω (3W) | I2S input — no DAC needed. Filterless Class-D |
261+
262+
For a desktop internet radio, efficient 3–10W speakers (4–8Ω) are ideal. They'll produce more volume at low power than massive high-wattage speakers whose heavy cones need serious current to move. Small bookshelf or full-range drivers work best with these amps.
263+
248264
### Trip5's Lazy PCM/Amp Combo
249265

250266
If you don't care about audio or power isolation, you can solder the PCM5102A to a PAM8406 stereo amp.
@@ -311,7 +327,7 @@ for additional noise filtering.
311327
| PLY17BN9612R0B2B (discontinued) | 5 | Murata hybrid CM+DM choke (0.96mH CM, 47μH DM); filters common-mode and differential noise | Würth 7446122001 (1mH, 2A, best direct replacement); KEMET SC-02-10GS (1mH, 2A, toroidal); standard CM choke ≥2A, 0.5–2mH |
312328
| LTK5128 | 2 | Class AB 3W audio amplifier (Left + Right) | PAM8406 (Class D, 5W), PAM8403 (3W), MAX98357A (I2S, 3W) |
313329
| LD06AJSA | 1 | LED constant-current driver; supports LED filaments for encoder illumination | 220Ω resistor + LED (simpler), any 20mA LED driver |
314-
| RCH664NP-100M | 1 | 100μH shielded power inductor for DC-DC filtering | Any 100μH 1A+ shielded inductor |
330+
| RCH664NP-100M | 1 | 100μH shielded power inductor for DC-DC filtering | Any 100μH 1A+ shielded inductor; toroidal core inductor (100μH, 1A+) |
315331
| EI14 600:600Ω | 1 | 1:1 audio isolation transformer (line-level) | Any 600:600Ω audio transformer, 10μF DC blocking caps |
316332
| EC11 | 1 | Rotary encoder (15 pulse/30 detent) with push switch | KY-040, PEC11, any quadrature encoder with switch |
317333
| VS1838B | 1 | 38kHz IR receiver | TSOP38238, TSOP4838, TSOP31238 |

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@ If using a display other than English (either on the display or in the WebUI), t
118118
They are really there as proof-of-concept. They were translated by machines. Fixes or additions are always welcome.
119119
There are tools in the codebase to assist with translation work.
120120

121+
<img src="images/kle7rx_ST7796_ru.jpg" width="50%">
122+
121123
### Serial Output
122124

123125
When in doubt or having issues, check the serial output. Serial output logs show a lot of useful information.
@@ -283,8 +285,7 @@ For that and other major needed changes to the codebase, there is a `code-issues
283285

284286
| Date | Release Notes |
285287
| ---------- | ---------------- |
286-
| 2026.07.11 | `not a release` minor fixes to PSRAM handling, documentation |
287-
| 2026.07.10 | SD Offline Mode added, `Hardware.md` added, Fixes to Deep Sleep, smart start, SD index, VS1053 volume curve |
288+
| 2026.07.12 | SD Offline Mode added, `Hardware.md` added, Fixes to Deep Sleep, smart start, SD index, VS1053 volume curve, PSRAM |
288289
| 2026.07.05 | More fixes to VS1053, Wake from Deep Sleep now works on all RTC-capable pins |
289290
| 2026.07.01 | 🍁 Minor fixes: WebUI, Display, Locales, VS1053 patch, smart start (last station plays after OTA/flash upgrade) |
290291
| 2026.06.29 | Unicode 8x6 fonts with full multilingual support, `Share` added to Playlist Editor, Nextion support removed, VS1053 library updated (patch functional) |

images/IRrecorder.jpg

117 KB
Loading

images/Trip5_ILI9488.jpg

19.1 KB
Loading

images/kle7rx_ILI9488.jpg

-159 KB
Binary file not shown.

images/kle7rx_ST7796_ru.jpg

179 KB
Loading

src/core/config.cpp

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,6 @@ void Config::init() {
8989
#if defined(SPIB_SCK) && (SPIB_SCK != 255)
9090
SPIB.begin(SPIB_SCK, SPIB_MISO, SPIB_MOSI);
9191
#endif
92-
if (store.config_set_magic != 4262 && store.config_set_magic != 1867) {
93-
if (store.config_set_magic != 4262) saveValue(&store.config_set_magic, static_cast<uint16_t>(1867)); // convert the previous magic number
94-
setDefaults();
95-
}
9692
store.play_mode = store.play_mode & 0b11;
9793
if (store.play_mode>1) store.play_mode=PM_WEB;
9894
_initHW();
@@ -115,7 +111,8 @@ void Config::loadPreferences() {
115111
// Check config_set_magic first
116112
uint16_t configSetValue = 0;
117113
size_t configSetRead = prefs.getBytes("cfgset", &configSetValue, sizeof(configSetValue));
118-
if (configSetRead != sizeof(configSetValue) || configSetValue != 4262) {
114+
if (configSetRead != sizeof(configSetValue) || configSetValue != 1867) {
115+
if (!netserver.isBootReady()) delay(1000); // this should only happen on FIRST boot but this delay helps catch it in serial
119116
if (configSetRead != sizeof(configSetValue)) {
120117
FUNCTIONLOG("Prefs", "NVS Sentinel absent (NVS uninitialized or corrupt), resetting to defaults...");
121118
} else {
@@ -460,6 +457,16 @@ void Config::defaultSettings(const char *val, uint8_t clientId) {
460457
netserver.requestOnChange(GETSCREEN, clientId);
461458
return;
462459
}
460+
if (strcmp(val, "controls") == 0) {
461+
saveValue(&store.fliptouch, (bool)TOUCH_FLIP);
462+
controls.flipTS();
463+
saveValue(&store.dbgtouch, (bool)TOUCH_DEBUG);
464+
saveValue(&store.skipPlaylistUpDown, (bool)ONE_CLICK_SWITCH);
465+
controls.setEncAcceleration(ROTARY_ACCEL);
466+
controls.setIRTolerance(IR_TOLERANCE);
467+
netserver.requestOnChange(GETCONTROLS, clientId);
468+
return;
469+
}
463470
if (strcmp(val, "locale") == 0) {
464471
saveValue(store.locale_webui, WEBUI_LOCALE);
465472
saveValue(store.locale_display, DSP_LOCALE);
@@ -507,19 +514,10 @@ void Config::defaultSettings(const char *val, uint8_t clientId) {
507514
netserver.requestOnChange(GETMQTT, clientId);
508515
return;
509516
}
510-
if (strcmp(val, "controls") == 0) {
511-
saveValue(&store.fliptouch, (bool)TOUCH_FLIP);
512-
controls.flipTS();
513-
saveValue(&store.dbgtouch, (bool)TOUCH_DEBUG);
514-
saveValue(&store.skipPlaylistUpDown, (bool)ONE_CLICK_SWITCH);
515-
controls.setEncAcceleration(ROTARY_ACCEL);
516-
controls.setIRTolerance(IR_TOLERANCE);
517-
netserver.requestOnChange(GETCONTROLS, clientId);
518-
return;
519-
}
520517
if (strcmp(val, "1") == 0 || strcmp(val, "") == 0) {
521518
setDefaults();
522519
defaultSettings("system", clientId);
520+
defaultSettings("battery", clientId);
523521
defaultSettings("screen", clientId);
524522
defaultSettings("controls", clientId);
525523
defaultSettings("locale", clientId);

0 commit comments

Comments
 (0)