Hier steh ich nun – frisch im Jahr 2024 – und präsentiere mit VersaTerm das letzte abgeschlossene Projekt des vergangenen Jahres. Hierbei handelt sich um ein Open-Source und Open-Hardware Bastelprojekt mit erstaunlich guter Dokumentation. Ziel ist es, mithilfe eines Raspberry Pi Pico Microcontrollers, ein VT102/52 Terminal zu emulieren. Tastatureingaben können über USB und PS/2 erfolgen, für die Ausgabe bigbanged der Pico ein VGA oder sogar ein HDMI Signal raus. Die serielle Kommunikation kann nach RS232 Standard oder wahlweise auf TTL 3,3V und 5V erfolgen.
Über den YouTuber Tech Tangents, bin ich auf das ASCII Video Terminal gestoßen, für dieses gibt es eine Mod und erweiterte Firmware mit USB-Keyboard Support von David Hansel. Dieser verweist dort aber an prominenter Stelle auf das mächtigere VersaTerm.
Herstellung
Das PCB ist fast ausschließlich auf THT-Komponenten ausgelegt, lediglich 2 relativ große SMD Dioden sind eingeplant. Die Lötherausforderung hier ist eher gering. Ich möchte mit diesem Projekt primär meine Zehen in das Wasser der PCB-Fertigung und des Komponenten-Sourcings stecken. Ich habe in der Vergangenheit schon den einen oder anderen Gehversuch in KiCad gewagt, bislang aber nichts hinreichend weit gebracht, dass ich mich getraut hätte, einen Prototyp davon zu bauen. Mit einem gut dokumentierten und getesteten Projekt sollte sich das nun ändern.
PCBs fertigen lassen
Wenn es um die Herstellung von PCBs geht, fallen mir auf Anhieb 2 Namen ein: JLCPCB und PCBWay. Letzteren sehe ich häufiger als Sponsor von irgendwelchen YouTubern – also muss JLC günstiger sein. Ohne weitere Recherchen und Preisvergleiche, hab ich also bei JLC bestellt.
Nach dem Hochladen der Gerber-Dateien, habe ich weitestgehend alle Einstellungen auf der (automatischen) Vorauswahl belassen, lediglich die Farbe habe ich aus ästhetischen Gründen in blau geändert. Das passt soweit auch, da das Projekt nur 2 Lagen nutzt. Das kommt dann bei etwa 6€ für 5 Boards raus – samt Shipping. Hätte ich nur geahnt, wie günstig PCBs in der Fertigung sind, hätte ich vielleicht doch auch mal einen Versuch mit einem halbgaren Projekt gewagt.
Komponenten bestellen
In Punkto Komponenten bin ich den einfachen Weg über den fertigen Warenkorb-Link bei DigiKey gegangen, bei denen ich ohnehin schon einen Account hatte. Scheinbar haben wir die Chipkrise mittlerweile hinter uns gelassen, sodass alle Teile dort verfügbar waren – abgesehen vom Raspberry Pi Pico, den DigiKey nicht im Sortiment hat. Diesen hab ich also noch bei Amazon geklickt.
Natürlich kann man die Teile auch woanders bestellen, die BOM (Bill of mateials) liegt in unterschiedlichen Formaten im Projekt.
VersaTerm Firmware kompilieren und installieren
Tiny-USB hatte mal Probleme mit USB-Hubs, sodass Tastaturen mit integriertem Hub nicht unterstützt wurden. Um auf Nummer sicher zu gehen, hole ich mir alle libs direkt aus dem jeweils aktuellen origin.
git clone https://github.com/dhansel/VersaTerm.git
cd VersaTerm/software/lib
git submodule update --init
cd pico-sdk/lib
git submodule update --init
git submodule update --remote --merge
cd ../..
git submodule update --remote --merge
cd ..
cd lib/pico-sdk/lib/tinyusb
git fetch
git merge origin/master
cd ../../../../
mkdir build
cd build
cmake .. -DPICO_SDK_PATH=../lib/pico-sdk -DPICO_COPY_TO_RAM=1
make
Code-Sprache: PHP (php)
Anschließend liegen die Binaries im Unterverzeichnis ’src‘. Das Image ‚VersaTerm.uf2‘ kann einfach mit dem Dateibrowser auf den Raspberry Pi Pico kopiert werden, nachdem man ihn mit dem Boot-Taster in den Massenspeichermodus versetzt hat. Der Pico flasht das Image nun und startet sich neu. Die Firmware ist installiert.
mscholz … VersaTerm software build ls -lha src main
insgesamt 5,4M
drwxr-xr-x. 1 mscholz mscholz 252 15. Jan 12:44 .
drwxr-xr-x. 1 mscholz mscholz 258 15. Jan 12:44 ..
drwxr-xr-x. 1 mscholz mscholz 190 15. Jan 12:44 CMakeFiles
-rw-r--r--. 1 mscholz mscholz 1,2K 18. Dez 22:55 cmake_install.cmake
drwxr-xr-x. 1 mscholz mscholz 12 18. Dez 22:55 elf2uf2
-rw-r--r--. 1 mscholz mscholz 176K 18. Dez 23:03 Makefile
-rwxr-xr-x. 1 mscholz mscholz 288K 15. Jan 12:44 VersaTerm.bin
-rw-r--r--. 1 mscholz mscholz 2,7M 15. Jan 12:44 VersaTerm.dis
-rwxr-xr-x. 1 mscholz mscholz 464K 15. Jan 12:44 VersaTerm.elf
-rw-r--r--. 1 mscholz mscholz 435K 15. Jan 12:44 VersaTerm.elf.map
-rw-r--r--. 1 mscholz mscholz 808K 15. Jan 12:44 VersaTerm.hex
-rw-r--r--. 1 mscholz mscholz 575K 15. Jan 12:44 VersaTerm.uf2
Code-Sprache: CSS (css)
Zusammenbau
Der Silkscreen auf den PCBs listet das passende Bauteil auf. Ein Widerstand R30 löst sich über die BOM also zu 1k Ω auf. Ich fange mit den niedrigsten Bauteilen an und gehe dann aufwärts in Richtung der großen. Bis auf 2 recht große Dioden, sind alle Bauteile THT, also auch sehr einfach zu löten. Die Pins von VGA und HDMI liegen recht nah beieinander. Hier empfehle ich die Nutzung von extra Flussmittel. Ansonsten gibt es nicht viel zu sagen. Mit Konzentration einfach alles abarbeiten.
PCB Reparatur
Bei der Arbeit ist mir aber noch ein Defekt an dem PCB aufgefallen. Hier scheint etwas während des Fertigungsprozesses drüber gerutscht zu sein, bevor die Lötmaske aufgetragen wurde. Eine Leiterbahn wurde dabei getrennt, 2 weitere leicht verformt. Ich habe die Bahnen freigelegt, mit einem Widerstandsbeinchen repariert und UV-härtende Lötmaske aufgetragen.
So sieht das komplett bestückte PCB aus:
Funktionstest
Ich war – ehrlich gesagt – selbst ein bisschen überrascht, dass ich beim ersten Einschalten bereits ein Bild auf dem (über einen günstigen HDMI Grabber) angeschlossenen HDMI-Monitor gesehen habe. Und die Tastatur funktionierte ebenfalls.
Die seriellen und VGA Signale sehen auf dem Oszilloskop ebenfalls gut aus, also kann ich mal versuchen, einen Monitor und meinen Klappcomputer mal direkt anzuschließen. Der Strombedarf des Picos liegt hier bei 5.28V und 0.03A, also 0.19W. Gar nicht mal so viel.
Gehäuse
Das Gehäuse liegt im Repository ebenfalls vor, einmal mit imperialen Schraubenabmessungen und als Fork von Digicoolthings mit metrischen Maßen für M3 Schrauben.
Anwendungsfälle und Fazit
Dieses „dumme“ VersaTerm Terminal kann nichts mehr, was ein kitty, xterm, screen, tmux, cu oder minicom o. Ä. kann – weniger sogar. Aber es ist klein und stromsparend. Außerdem kann ich autonom an einem Bildschirm mit einer Tastatur verwenden. Oder im Rechenzentrum an einen Monitorwagen anschließen, damit das Notebook frei bleibt. Oder ich baue mir einen Retrocomputer, den ich so betreiben kann. Möglich ist auch die Nutzung am PC als USB-Serial-Adapter mit dediziertem Ausgabemonitor. Natürlich kann man sich auch mit (a)getty eine serielle Konsole auf dem heimischen Linux/Unix Rechner einrichten – besonders einfach mit systemd. Ergo: Braucht man nicht, kann aber praktisch sein und der Bau hat ziemlichen Spaß gemacht.
Also zum Abschluss noch ein bisschen Bildmaterial.
[…] die RTC und SD-Karten Addons in die dafür vorgesehenen Ports. Ich verbinde den Computer mit dem VersaTerm. Das serielle Terminal versorgt den ganzen “Rechner” mit Strom, sodass er durchstartet […]