DasTitelbild dieses Beitrags basiert auf einem Bild von Florian-if, das bei Wikipedia unter CC-BY-SA-3.0 veröffentlicht wurde.

Ist es möglich, einen debugWIRE-Hardware-Debugger für weniger als 10 € zu bauen? Man kann, wenn man ein paar Kompromisse eingeht, ein bisschen lötet und Schrumpfschlauch erhitzt.

Hardware-Debugger für Geizige

Nachdem ich die Implementierung des Arduino-Programmes dw-link beendet hatte, das einen Uno in einen debugWIRE-Hardware-Debugger verwandelt, fragte mich jemand, ob man das Programm nicht auch auf einem USBASP ISP-Programmer laufen lassen könnte. Diese Programmer bekommt man für wenige € bei eBay, AliExpress oder Amazon. Das wäre in der Tat sehr attraktiv. Die Programmer sind spottbillig, sie haben bereits alles, was man braucht, einschließlich eines ISP-Kabels, und man müsste nur die Firmware neu flashen. Leider funktioniert das nicht, da diese Programmer nur einen ATmega8 nutzen, dw-link benötigt aber einen ATmega328(P). Außerdem gibt es andere Gründe, warum es nicht funktionieren kann. Zum Beispiel funktioniert die SingleWireSerial-Bibliothek nicht mit den Interrupts, die vom USB-Subsystem benötigt werden.

Die Frage brachte mich jedoch dazu, darüber nachzudenken, wie weit wir von dieser Situation entfernt sind. Die USBASP-Programmer sind tatsächlich nur spottbillig, wenn man sie direkt in Fernost kaufen, was bedeutet, dass es ein paar Wochen dauert, bis sie ankommen. Dann kann man sie für 3-4 € inklusive Porto bekommen (und muss man u.U. Einfuhrumsatzsteuer bezahlen). In Deutschland muss man mindestens 7 € (inkl. Porto) bezahlen.

Wie ist die Situation mit Unos und Nanos? Einen Nano bekommt man in Fernost für 3 €, in Deutschland bezahlt man dafür ca. 7 € und einen Arduino Uno bekommt man in Deutschland für 8,50 € (inkl. Porto). Der Preis des Basissystems ist also fast gleich. Die Frage ist, wie viel man noch an zusätzlichen Komponenten braucht.

Sechs Drähte

Mein erstes Beispiel im dw-link-Handbuch zeigt, wie man einen Uno-Hardware-Debugger mit 6 Drähten an einen Target-Chip anschließt. Dies sind die üblichen ISP-Verbindungen, von denen die SPI-Leitungen nur zum Einstellen und Zurücksetzen der DWEN-Fuse verwendet werden.

Wenn ich mich in die Lage eines Arduino-Hobbyisten versetze (nun, ich bin einer), würde ich ein Debugging-Tool nur verwenden, wenn die Anwendung relativ schmerzfrei ist. Wenn ich sechs Verbindungen herstellen muss, überprüfen muss, ob die Verbindungen richtig sind, und dann am Ende die Meldung „Cannot connect: Check wiring“ erhalte, würde die anfängliche Begeisterung für die Verwendung eines Debugging-Tools schnell schwinden.

Es gibt eine offensichtliche Lösung für dieses Problem, nämlich die Verwendung eines ISP-Programmierkabels, wie man es auch braucht, wenn man einen Arduino Uno als ISP-Programmierer einsetzt. Es kann an die ISP-Anschlüsse auf der Debugger-/Programmierplatine und dem Target-System angeschlossen werden. Nur der RESET-Anschluss ist auf der Debugger/Programmierer-Seite herausgeführt.

djmlambert beschreibt in einem Instructable in sehr detaillierten Weise, wie man ein solches Kabel baut. Er fügt zusätzlich einen Elko zwischen RESET und GND auf der Programmerseite hinzu, um die Auto-Reset-Funktion des Uno zu deaktivieren. Für den Hardwaredebugger ist das nicht notwendig, stört aber auch nicht (siehe weiter unten).

Ich selbst habe ein solches Kabel gebaut, bei dem ich auch den Versorgungsspannungsanschluss herausgeführt habe. Dann kann man die Versorgungsspannung für den Target-Chip von einem Arduino-Pin liefern lassen (falls der Target-Chip mit 20 mA auskommt), um dann die automatische Power-Cycle-Funktion des Debuggers verwenden zu können. Braucht der Target-Chip mehr Strom, kann man den Versorgungsspannungsanschluss in den 5V-Anschluss des Arduino-Boards stecken.

Zusätzlich zum Kabel kann man einen Elko von 10 μF zwischen RESET und GND einsetzen (Minus-Pol an GND). Außerdem möchte man wahrscheinlich noch eine System-LED hinzufügen. Im ersten Design hatte ich die eingebaute LED auf Pin 13 des Uno als System-LED verwendet. Das bedeutete jedoch, dass man kein ISP-Kabel wie oben verwenden konnte, da sich die eingebaute LED auf der SCK-Leitung des SPI-Busses befindet.

Sowohl der Elko als auch die System-LED sind optional, aber beide machen das Leben einfacher. Der Elko verhindert ein Reset, wenn der Host eine Verbindung zum Debugger aufbaut, wodurch der Start um zwei Sekunden beschleunigt wird. Die System-LED zeigt den internen Zustand des Debuggers an, z.B. wenn ein Ein- und Ausschalten erforderlich ist oder wenn ein Neustart aufgrund eines internen Fehlers notwendig ist.

Was braucht man?

Was braucht man nun alles, um einen Hardware-Debugger aufzubauen?

Und was kostet das?

ArtikelPreis
Arduino Uno8,50 €
6 Dupont-Drähte0,30 €
1 Jumperdraht0,05 €
Schrumpfschlauch (2 Stck.)0,50 €
Kondensator 10 μF0,07 €
LED 5mm0,13 €
Widerstand 330 Ω0,03 €
Summe9,58 €

Also tatsächlich etwa 10 €. Aber seien wir ehrlich. Alle oben genannten Dinge findet man in der Grabbelkiste eines Arduino-Bastlers. Die tatsächlichen Kosten liegen also eher bei 0 €. Und wie sieht es aus, wenn es zusammengebaut ist?

Mit diesem Setup kann man den Hardware-Debugger vermutlich in 90 % der auftretenden Situationen verwenden. Aber was ist mit den restlichen 10 %? Wenn man 3,3-Volt-Systeme debuggen will? Wenn der SCK-Anschluss auf dem Target-System keinen Pull-up-Widerstand besitzen soll? Wenn man automatisches Power-Cycling für ein Target-System haben möchte, das mehr als 20 mA schluckt?

Hardware-Debugger der Luxusklasse

Was, wenn man mit 3,3-Volt-Systemen debuggen will? Dafür gibt es eine einfache Lösung: Man benutzt ein 3,3-Volt-System als Debugger. Es gibt einige Uno-kompatible Boards, die ein Umschalten zwischen 3,3 und 5 Volt ermöglichen: z.B. Seeeduino 4.2 und das Keyestudio PLUS Board. Beide Boards kosten in Deutschland 11-12 €. Wenn sie auf 3,3 Volt geschaltet werden, arbeiten sie bei 16 MHz Systemtakt jenseits der Spezifikation. Bei Raumtemperatur sollte das jedoch kein Problem sein.

Eine weitere Möglichkeit ist die Verwendung von Pegelanpassungs-Hardware wie dem Level-Shifter-Breakout-Board mit vier BSS138 N-Kanal-MOSFETs. Wie im Handbuch beschrieben, funktioniert das ganz gut. Allerdings hat man dann Pull-up-Widerstände an den SPI-Leitungen des Target-Systems.

Meine bevorzugte Lösung ist daher dw-probe, eine von mir entwickelte Adapterplatine für Nanos oder Pro-Minis.

Views: 20