9.3 KiB
Hirnfrei Floppinator
USB-Floppy-Emulator auf Basis eines Raspberry Pi Pico. Zeigt .img- und
.adf-Dateien von einer SD-Karte als USB-Massenspeicher an, Auswahl über
Display + 3 Taster, Oberfläche mit LVGL.
Features
- Erscheint am Host als normales USB-Massenspeichergerät (kein Treiber nötig)
- Unterstützt
.img(PC/generisch) und.adf(Amiga) — Kapazität wird automatisch aus der Dateigröße ermittelt, kein festes Format nötig - 160×128-TFT-Display mit LVGL-Oberfläche (Liste, Statuszeile, Aktivitätsanzeige)
- Alphabetisch sortierte Image-Liste
- Manuelles Neuladen der Liste per Tastenkombination (z.B. nach SD-Kartenwechsel)
- Aktivitäts-LED (Onboard-LED) leuchtet bei Lese-/Schreibzugriffen
- Debug-Ausgaben über USB-Seriell, zentral abschaltbar
Hardware
- Raspberry Pi Pico (RP2040) (Berrybase Pico Light Starter Kit)
- 1,8" SPI-TFT-Display, 160×128, ST7735S-Controller (Berrybase 1,8" LCD-Anzeigemodul)
- Micro-SD-Kartenmodul, SPI, 3,3V (6-Pin: 3V3/CS/MOSI/CLK/MISO/GND) (Berrybase Micro-SD-Card-Reader-Modul, kompakt)
- 3× Kurzhubtaster, 6×6mm, vertikale Printmontage, H=5,0mm (Berrybase Kurzhubtaster)
- microSD-Karte (FAT16/FAT32 formatiert)
Schaltplan / Verkabelung
Raspberry Pi Pico
┌──────────────────┐
TFT-Display │ │
────────── │ │
CS ───────────────┤ GP9 │
DC ───────────────┤ GP8 │
RST ───────────────┤ GP12 │
BL ───────────────┤ GP13 │
SCK ───────────────┤ GP10 (SPI1 SCK) │
MOSI ───────────────┤ GP11 (SPI1 TX) │
MISO ───────────────┤ GP28 (SPI1 RX) │
VCC ───────────────┤ 3V3(OUT) │
GND ───────────────┤ GND │
│ │
SD-Kartenmodul │ │
────────────── │ │
CS ───────────────┤ GP5 │
MOSI ───────────────┤ GP7 (SPI0 TX) │
CLK ───────────────┤ GP6 (SPI0 SCK) │
MISO ───────────────┤ GP4 (SPI0 RX) │
3V3 ───────────────┤ 3V3(OUT) │
GND ───────────────┤ GND │
│ │
Taster │ │
────── │ │
Zurück ───────────────┤ GP14 (INPUT_PULLUP, gegen GND) │
Weiter ───────────────┤ GP15 (INPUT_PULLUP, gegen GND) │
Auswahl ──────────────┤ GP20 (INPUT_PULLUP, gegen GND) │
│ │
Aktivitäts-LED │ Onboard-LED │
(keine Verkabelung │ (LED_BUILTIN) │
nötig) │ │
└──────────────────┘
Alle Taster schalten gegen GND (interner Pull-Up wird im Code aktiviert, kein externer Widerstand nötig).
Wichtig: SD-Modul und Display hängen an unterschiedlichen SPI-Bussen
(SD an SPI0, Display an SPI1) und benutzen absichtlich nicht die
RP2040-Standard-SPI0-Pins (GP16-19), da diese im ursprünglichen
Prototyp-Aufbau elektrisch beansprucht waren. Bei einem Neuaufbau von
Grund auf können auch die Standard-Pins verwendet werden — einfach die
#define SD_*_PIN-Zeilen im Sketch anpassen.
Pin-Übersicht
| Funktion | Pico-Pin | Bus/Modus |
|---|---|---|
| TFT CS | GP9 | SPI1 |
| TFT DC | GP8 | SPI1 |
| TFT RST | GP12 | SPI1 |
| TFT Backlight | GP13 | digital OUT |
| TFT SCK | GP10 | SPI1 |
| TFT MOSI | GP11 | SPI1 |
| TFT MISO | GP28 | SPI1 |
| SD CS | GP5 | SPI0 |
| SD MOSI | GP7 | SPI0 |
| SD CLK | GP6 | SPI0 |
| SD MISO | GP4 | SPI0 |
| Taster Zurück | GP14 | INPUT_PULLUP |
| Taster Weiter | GP15 | INPUT_PULLUP |
| Taster Auswahl | GP20 | INPUT_PULLUP |
| Aktivitäts-LED | LED_BUILTIN (GP25) | digital OUT |
Abhängigkeiten (Arduino Libraries)
Über den Arduino Library Manager installieren:
| Library | Autor | Version | Zweck |
|---|---|---|---|
| Adafruit GFX Library | Adafruit | aktuell | Basis-Grafikbibliothek |
| Adafruit ST7735 and ST7789 Library | Adafruit | aktuell | Display-Treiber |
| SdFat | Bill Greiman | 2.x | SD-Karten-/FAT-Dateisystemzugriff |
| Adafruit TinyUSB Library | Adafruit | aktuell | USB-Massenspeicher-Gerät (MSC) |
| lvgl | kisvegabor | 9.x | Grafische Oberfläche |
Arduino IDE Einstellungen
Board-Paket: Raspberry Pi Pico/RP2040 (von Earle Philhower,
arduino-pico) über den Boardverwalter installieren.
Unter Werkzeuge:
| Einstellung | Wert |
|---|---|
| Board | Raspberry Pi Pico |
| Flash Size | 2MB (no FS) |
| CPU Speed | 200 MHz (oder Standard 133 MHz) |
| Optimize | Small (-Os) (Standard) |
| USB Stack | Adafruit TinyUSB ⚠️ zwingend erforderlich |
| Upload Method | Default (UF2) |
Wichtig: Ohne USB Stack: Adafruit TinyUSB funktioniert weder die
USB-Massenspeicher-Funktion noch Serial (da beides über TinyUSB läuft).
Reine Test-/Diagnose-Sketches ohne TinyUSB (z.B. isolierte SPI-Tests)
brauchen stattdessen USB Stack: Pico SDK, damit Serial ohne
Adafruit_TinyUSB.h-Include funktioniert.
LVGL-Konfiguration (lv_conf.h)
LVGL benötigt eine aktive lv_conf.h. Vorgehen:
- Die Vorlage
lv_conf_template.haus demlvgl-Bibliotheksordner eine Ebene höher kopieren, z.B. nach:Arduino/libraries/lv_conf.h (Ebene über .../libraries/lvgl/) - In der kopierten Datei ganz oben
#if 0zu#if 1ändern, damit sie aktiv ist. - Ansonsten reicht die Standard-Vorlage unverändert — Farbformat (RGB565) und Schriftgröße (Montserrat 14, in der Vorlage standardmäßig aktiv) werden bereits im Sketch selbst passend gesetzt/verwendet.
Display-Kalibrierung
Das verwendete ST7735S-Panel benötigt einen manuellen Adressierungs-Offset
(tft.setColRowStart(2, 1)), der empirisch für das konkret verbaute
Panel-Exemplar ermittelt wurde. Bei einem anderen Panel/Batch kann dieser
Wert leicht abweichen. Symptom bei falschem Offset: ein bunter,
"verrauschter" Rand am Bildschirmrand (Zeilen-/Spaltenversatz zwischen
GRAM und sichtbarem Glas). Falls das auftritt: Werte wie (0, 0),
(1, 2) oder (0, 32) ausprobieren.
Bedienung
| Aktion | Tasten |
|---|---|
| In der Liste navigieren | Zurück / Weiter |
| Fokussiertes Image mounten | Auswahl |
| Image-Liste neu laden (z.B. nach SD-Kartenwechsel) | Zurück + Weiter gleichzeitig |
Das SD-Modul hat keinen Card-Detect-Pin — ein Kartenwechsel im laufenden Betrieb wird daher nicht automatisch erkannt (frühere Versuche mit automatischer Erkennung per periodischem Polling haben sich als unzuverlässig erwiesen). Nach einem Kartenwechsel einfach kurz Zurück+Weiter drücken.
Bekannte Einschränkungen
- Kein automatisches Remounten des zuletzt gewählten Images nach einem Kartenwechsel (bewusst, um kein Image von einer inzwischen anderen Karte "weiterlaufen" zu lassen)
- Debounce-basierte Tastenerkennung, kein Auto-Repeat bei gehaltener Taste
MAX_IMAGESist aktuell auf 16 begrenzt (Konstante im Sketch anpassbar)
Debug-Ausgaben
Über Serial (115200 Baud), zentral steuerbar über die Konstante
DEBUG_ENABLED im Sketch (true/false). Bei false entfällt auch der
Start-Delay auf den seriellen Monitor.
Kontakt
Fragen, Anregungen oder Bugs? Discord: https://discord.projekt-hirnfrei.de