DSO 150
Das DSO 150 ist ein digitales, 1-kanaliges Mini-Oszilloskop. Es wird auf vielen Webseiten für sehr kleines Geld als Bausatz angeboten.
Für den Hobbybastler ohne grosse Ansprüche ist es gut geeignet, für professionellen Einsatz nicht.
Ich finde es niedlich und eine grosse Hilfe wenn man mal schnell ein paar simple Signale klappern sehen möchte. Ideal für
vor Ort Basteleien an Autos und Motorrädern.
Durch seine kompakte Form bietet es sich geradezu für den mobilen Einsatz an. Aber leider ist es ab Werk nur für den Betrieb mit einem Netzteil
ausgelegt ist. Zum Glück haben sich bereits viele Bastler mit dem DSO 150 beschäftigt und Lösungen für den Akku-Betrieb gefunden. Zusätzlich
existiert sogar eine alternative Firmware mit erweiterten Funktionen. Also beste Voraussetzungen für erfolgreiches Basteln :)
Wie "üblich" gibt es das Gerät als Original von "JYE Tech" und in unendlich vielen Clone-Varianten. Welche Variante und von wem man da kauft ist vorab
nicht wirklich erkennbar. Und für die Funktion auch nicht wichtig.
Das Gerät wird ebenfalls in einer komplett, fertig montierten Version angeboten.
Der zentrale Prozessor ist ein STM32F103C8T6.
Links und Hilfen
-
Blogspot von "mean00"
Dieser geniale Programmierer und Bastler hat die Firmware komplett überarbeitet. Und das sogar zweimal, in unterschiedlichen Programmierumgebungen!- InDSO150 (mean00, GitHub)
- DSO_STM32Duino (mean00, GitHub)
Ein paar zusätzliche Features und Optimierungen sind dabei hinzugekommen:
- Umlegung der Rotary-Encoder Signale auf separate Pins. Im Original muss sich der Encoder die Interrupts mit dem Display teilen, wodurch öfters Impulse verloren gehen.
- Aktivierung der USB-Schnittstelle. Der STM32F103 hat ein USB-Interface dass zur Steuerung und zum Auslesen der Daten verwendet werden kann.
- Ersetzen des Prozessors durch einen GD32F303. Das Programm wird dadurch wesentlich beschleunigt
-
Open-DSO-150 (michar71)
Ein weiteres schönes Open-Source Project. Mit dieser Firmware habe ich meine Versuche begonnen. Lästig ist nur dass es keine fertig kompilierten "releases" gibt. Mit etwas Suchen findet man aber einige Beispiele in den "issues".
-
Rudis Wiki
Eine sehr hilfreiche Seite eines engagierten Bastlers.
-
JYE Tech Forum
Der Hersteller selbst hat für seine Produkte ein Support-Forum angelegt in dem man alle wichtigen Infos findet:
Umbau auf Li-Ion-Akku
Aktuelle Firmware
DSO Shell: How to Upgrade Firmware
JYE Tech hat seinen Quellcode im GitHub als DSO-Shell-open-source-version veröffentlicht. Allerdings nicht vollständig, das Kern-Programm gibt es nur als Black-Box.
Dreh-Encoder
Für den Dreh-Encoder wird eine kleine Hilfsplatine mitgeliefert weil die Anschlussbeinchen in die falsche Richtung zeigen. Einfaches
Zurückbiegen der Beinchen und direktes Anlöten auf der Platine lösst das Problem aber viel vorteilhafter. Zusätzlich
gewinnt man etwas Platz und Bauraum (für den Akku-Umbau).
Die elektrische Verdrahtung des Dreh-Encoders hat ein generelles Problemchen. Die zugehörigen Ports am Prozessor (PB0 .. PB7)
werden zeitgleich auch für das Display verwendet. Als Folge entstehen beim Display-Refresh zeitliche Lücken
in denen der Encoder nicht abgefragt werden kann. Die Bedienung wird daurch als stockend empfunden.
Eine Alternative wird mit der "mean00"-Software gegeben. Dort sind die Encoder-Signale auf die Ports PB14 und PB15 gelegt.
Die Vedrahtung des Encoders muss dazu verändert werden.
Achtung, dieser Mod funktioniert nur zusammen mit der Software von "mean00"!
- Die beiden Kupferbahnen vom Encoder zum Display werden unterbrochen.
- 2 neue Leitungen vom Encoder zu den Ports [14]und [15] ziehen.
Weitere Infos finden sich im
Blog von "MEANX"
oder im zugehörigen
GitHub Wiki".
Übersicht Akku-Stromversorgung
Der fehlende Akku ist ein lästiges Manko des DSO 150. Die folgende Übersicht zeigt ein Konzept
für eine geänderte Stromversorgung.
- ein 3.8V Li-Ion-Akku (Handy) liefert die Energie
- der folgende Step-Up Konverter hebt die Spannung auf 9V an
- aufgeladen wird über einen Li-Ion Laderegler
- der Ladestrom kommt über USB, alternativ könnte man auch die originale Ladebuchse (J6) verwenden
- der vorhandene Ein/Ausschalter (SW5) wird weiter verwendet
- der Akku bleibt auch im ausgeschalteten Zustand mit der Ladeschaltung verbunden. Wegen des sehr geringen Leckstroms (Standby-Leckstrom nur ~2.5uA) ist das kein Problem.
Die komplette Ladeelektronik für Li-Ion-Akkus gibt es als Modul bei z.B. ebay. Ich habe das folgende Modul ausgewählt:
Das Lade-IC ist ein TP4056 (Stichwort für die ebay-Suche). Die Module gibt es in diversen Konfigurationen und auch mit alternativen ICs. Einige haben zusätzlich noch eine kleine Schutzschaltung (gegen Unterspannung?) mit drauf, andere einen zusätzlichen Step-Up Konverter (wie in meinem Fall). Welche Kombination aus Lade-/Step-Up-Modulen man wählt spielt keine Rolle.
Das DSO150 benötigt eine Spannung von 9V (untere Grenze ~7.5V). Zwei Akkus in Reihe wären grenzwertig (2*3.8V=7.6V), ein Step-Up Konverter ist daher die bessere Wahl. Auch diese gibt es in grosser Auswahl als fertige, kleine Module. Üblicherweise sind sie mit einem SDB628, oder einem kompatiblen Typ (MT3608, FP6291, ..) aufgebaut.
Auf den Modulen befindet sich typischerweise ein Poti um die Ausgangsspannung einzustellen. Der Ladestrom sollte auf ~250mA begrenzt werden (Widerstand an Pin 2) um auch an einem strombegrenzten PC-USB-Port zu funktionieren.
Sobald man auf Akku-Betrieb übergeht ist es naheliegend auch den Leistungsverbrauch zu minimieren. In mehreren Foren gibt es deshalb längliche Diskussionen zur optimalen Auslegung der Stromversorgung. Ergebnis: mit viel Aufwand kann man die Leistungsaufnahme ~ halbieren. Nice to have, aber für mich spielt es keine Rolle ob das Gerät 8 Stunden oder "nur" 4 Stunden läuft. Die verfügbaren Akkus haben alle soviel Kapazität dass es immer ausreicht..
Der Stromverbrauch des Originals liegt bei 130mA @ 9V = 1,17W. Ein typischer Smartphone-Akku hat 1,5Ah @ 3,8V = 5,7Wh. Das sollte locker für 4h Dauerbetrieb ausreichen.
Akkus
In meinem Fundus hatte ich eine kleine Auswahl von alten Smartphone-Akkus die alle ausreichend Platz im Gehäuse finden.
Flach sollte er sein!
Ich habe den Typ "MS1" mit ~1500mAh Kapazität gewählt (das DSO150 benötigt ca 130mA@9V).
Welche Type von Akku man wählt ist ziemlich egal solange er eine Nominalspannung von 3.8V hat. Etwas vorsichtig sollte man nur beim Einstellen der oberen
Ladegrenze sein. Im Bereich 4.0 .. 4.1V ist man auf der sicheren Seite, auch wenn man ein wenig der maximalen Kapazität verschenkt.
HW-Modifikationen
Vorbereitung für die geänderte Stromversorgung. Die Bauteile J7 und D2 werden entfernt. Die Zuleitung zu U3 wird unterbrochen.
Falls eine Kombi-Platine benutzt wird (Ladeelektronik + StepUp) muss die Verbindung zwischen Akku-Ladeteil und StepUp-Teil unterbrochen werden. An
dieser Stelle wird der Ein/Aussschalter eingeschleift.
Das Modul wird auf der Unterseite isoliert und auf der Hauptplatine befestigt. Dazu die Massefläche an einigen Punkte freikratzen und stabile Drähte
zu den Massepunkten auf dem Modul ziehen (oder einfach ankleben..).
Vor dem Befestigen sollte man gut überlegen ob man in den abgedeckten Bereiche noch irgendwas anlöten muss..
Die Kabel verdrahten.
Den Akku anschliessen.
Auf dem Foto sind auch noch die Kabel vom Programmieren des Prozessors zur erkennen.
Jetzt fehlt noch die USB-Buchse.
USB - Variante 1, simple USB-Buchse auf Breakout-Board
Die USB-Verbindung wird primär nur zum Aufladen des Akkus benötigt. Dafür ist eine USB-Buchse ohne Elektronik ausreichend. Am besten auf einer kleinen
Hilfsplatine weil die Kontakte sehr fusselig zu löten sind. Die Pins 1 und 5 an die Ladelektronik anschliessen und fertig.
Das Bild zeigt meine Lösung zur Montage der Buchse, aufgelötet auf einem Stück Lochrasterplatine als mechanische Befestigung.
Direkt ein fertiges
USB-Breakout-Board einzusetzen wäre eine Alternative die viel einfacher zu Löten ist.
Welche Type USB-Buchse (mini, micro,..) man verwendet spielt keine Rolle.
Mit der Firmware von "mean00" wird die Prozessorinterne USB-Schnittstelle aktiviert. Falls man diese Option nutzen möchte müssen weiterhin die beiden USB-Signale
verbunden werden. D+ und D- werden über 22 Ohm Widerstände mit den korrespondierenden Kontakten auf dem Board verbunden. Zusätzlich wird D+ über einen 1k5
Widerstand mit 3.3V verbunden, wichtig für die automatische Erkennung.
Weitere Infos zum USB mod finden sich im
Blog von "MEANX"
oder im
GitHub Wiki
USB - Variante 2, USB-Seriell Adapter
Diese Variante lädt ebenfalls den Akku. Der Adapter basiert auf einem CP2102 von Silicon Labs, jeder andere Umsetzer (z.B. FTDI) tut es aber auch.
Er stellt gleichzeitig eine Verbindung zum Anschluss an die serielle Schnittstelle des Prozessors (J5, Rx/Tx) bereit.
Ob man diese Verbindung benötigt hängt davon ab welche Firmware man verwendet und ob und wie man sie in den Prozessor flashen möchte. Ich habe mit Variante 2
begonnen und danach auf Variante 1 umgebaut.
Ein gut passender Einbauplatz ist neben dem Dreh-Encoder. Der dicke Bügel sichert die Buchse mechanisch.
Im Bild sind die beiden Kabel (rot und schwarz) zum Laderegler zu erkennen. Rx und Tx sind mit den entsprechenden Punkten verbunden.
Laut Datenblatt arbeitet der CP21202 mit einer 3.3V Logik an seinem (Tx-) Port. Gemessen habe ich aber 4.0V !?. Deshalb folgt am Tx-Ausgang noch ein Spannungsteiler
(1k/4k7) um auf die 3.3V des STM32 zu kommen. Der Rx ist tolerant ausgelegt und funktioniert ohne Änderungen.
Update zum CP21202:
Einige Varianten der Platine enthalten einen Layout-Fehler, Pin 9 ist fälschlicherweise mit VBUS verbunden,
siehe hier. Möglicherweise ist das die Ursache für die falschen Tx-Pegel.
Die HW-Modifikationen sind damit abgeschlossen.
Firmware von "mean00"
Mein nächster Testkandidat ist die Variante
InDSO150.
Aktuell verwende ich seine vorherige Variante
"DSOSTM32Duino".
Die funktioniert hervorragend und ist sehr zu empfehlen.
Achtung, diese Softwaren benötigen zwingend den Umbau für die Dreh-Encoder-Signale auf die Ports PB14 und PB15!
Firmware von "michar71"
Eine weitere alternative Firmware ist die "Open-DSO-150" von "michar71". Die hat ein
anderer findiger Programmierer auf Basis der DSO 138 Firmware gebaut und ins GitHub gestellt.
Ein grosser Nachteil ist dass man keine fertig kompilierte Version findet (zumindest nicht ohne lange Suche). Ich bin deshalb den mühsamen Weg
gegangen, habe mir die Umgebung installiert und die Quelle selbst kompiliert.. Hat am Ende geklappt.
Viele Hinweise und Tipps findet man auch in der
"issues".
Section.
Firmware Original
Noch eine Möglichkeit an Firmware zu kommen ist der Hersteller selbst. Die "neueste" Firmware des Originals ist die
"113-15001-120" aus dem Jahr 2018.
Die letzte "freie" Version ist die mit der Endung -064. Für neuere Versionen benötigt man einen Freischaltcode vom Hersteller, unter Angabe
der Seriennummer! Die hat natürlich niemand hat weil die meisten Geräte Fakes sind. Ja, selbst von chinesischen Produkten gibt es Fakes..
Im meinem Fake steckte ursprünglich eine "113-15001-060". Das Upgrade auf die -064 ist aber den Aufwand nicht wert.
Firmware tauschen - Variante 1: SWD-Adapter
Die Firmware von "mean00" liegt im BIN-Format vor und ist für diese Programmiermethode gedacht.
Diese Methode benötigt einen "richtigen" SWD-Programmieradpater. Solch einer ist z.B. auf einem "Nucleo 64"-Board vorhanden, der obere Teil. Die
4 wichtigen Signale werden entsprechend der folgenden Skizze verbunden (zwischen CN4 und J3):
Dazu noch die passende Programmier-Software von STM (STM32 ST-LINK Utility) und man kann loslegen.
Die Oberfläche sieht so aus:
Firmware tauschen - Variante 2: Bootloader
Alle sonstigen oben genannten Firmwaren werden mit/über einen Bootloader in den Prozessor geladen. Um den Bootloader selbst braucht man sich nicht zu
kümmern, der sitzt bereits im Prozessor, nur um die Peripherie.
Geflasht wird über die serielle Schnittstelle des STM32F103 (J5, Rx/Tx). Man kann dafür den oben erwähnten USB/Seriell-Adapter einsetzen, oder einen anderen
Adapter der die Verbindung zum PC herstellt. Die Kontaktpunkte der Schnittstelle sind auf dem Board gekennzeichnet. Ausserdem müssen
noch 2 Lötbrücken temporär geschlossen werden um den Bootloader-Mode zu aktivieren. JYE Tech hat dafür eine
Anleitung.
Ein passendes Flash-Tool gibt es kostenlos von "ST". Herunterladen und installieren.
Die Bedienung ist simpel und geradeaus.
Ein Problemchen taucht auf wenn man die Firmware von "Michar71" benutzen möchte. Im "github" sind nur die Quellen abgelegt, kein "HEX"-File. Das muss man
sich selbst kompilieren, und der Weg ist relativ aufwändig:
Ausgangspunkt ist der Atollic TrueStudio Kompiler von "ST". Herunterladen und installieren. Das Paket hat leider
mehrere 100MB Umfang..
Meine ersten, naiven Versuche mit der Oberfläche brachten überhaupt keinen Erfolg. Einfach das Projekt von "Michar71" zu öffnen funktionierte nicht. Der Trick ist,
dass man es zuerst importieren muss. Wie das geht ist in in den GitHub-Issues erläutert,
oder in diesem Video.
Unter dem Menüpunkt "Project - Manage Build Configurations" kann man noch zwischen "Debug" und "Release" wählen, wobei "Release" mit einem Fehler abbricht.
Beide Varianten sollen aber die gleiche Funktionalität haben. Ich benutze daher "Debug".
Nach dem (hoffentlich erfolgreichen) Kompilieren findet man dann im "Debug"-Ordner das ersehnte HEX-File.
Wer dann noch etwas spielen möchte findet in diesem Blog
erste Anregungungen für eigene Modifikationen.
Zusammenfassung
Vielen Dank an die unermüdlichen Bastler und Programmierer die sich dieses unscheinbaren Gimmicks angenommen haben. Kaum zu glauben, und
trotzdem schön zu sehen, wieviel Aufwand in dieses Pseudo-Oszilloskop investiert wurde.
Eine nette und praktische Ergänzung für den Basteltisch oder wenn man mal in der Wildnis was messen muss.