09.07.2022

Digispark als USBasp ISP-Programmieradapter

Als ich vor 10 Jahren mit dem AVR-Kram anfing, bin ich über ein Selbstbau-USBasp Adaper bei guloshop.de gestolpert. Und da ich Bammel hatte, dass mir der Baustein durch eigene Blödheit kaputt geht, hatte ich schon damals über Ersatz nachgedacht. Die Originalfirmware liegt als Sourcecode beim Guloshop herum. Es ist eine Erweiterung des Codes von Fischl. Was liegt also näher, sich mit dem frisch erworbenen Adapter direkt einen Ersatz ATTINY85 zu brennen. (Meine Anleitung von damals ist leider nicht mehr gangbar. Ausserdem hat sich seitdem die Pinbelegung des Adapters geändert. Netterweise zum Vorteil, weil sonst gäbe es diesen Beitrag nicht.) Zudem die Teile damals Cent-Artikel waren. Inzwischen sind sie dank allerlei weltweiten "Besonderheiten" kaum noch lieferbar. Und wenn, dann zu Horrorpreisen.

Interessanterweise sind die Digistump Digispark BadUSB-Stöpsel hingegen immer noch gut und günstig zu bekommen. Ich habe letztens bei AZDelivery 25 Stück für 50€ geschossen. Billiger als die Chips alleine. Was kann also schon schief gehen? Hardwaretechnisch nicht viel. Softwaretechnisch... nunja. Welche Version des Bootloaders drauf ist, weiß niemand. Ausserdem will man auch mal den Bootloader modifizieren. Mein Favorit ist, nur durch einen Jumper in den Bootloader zu gelangen. Alleine deswegen kommt man nicht herum, sich auch die Micronucleus-Umgebung zu installieren. Dazu habe ich hier etwas geschrieben.

Aber erstmal, wie bekommt man den Digispark zum USBasp-Programmieradapter? Und warum sollte man das machen? Im Prinzip recht simpel. Man zieht sich den Source vom Guloshop. Installiert die AVR-Toolchain mit "sudo apt-get install -y gcc-avr avr-libc binutils-avr", kompiliert den Kram und brennt ihn mit einem ISP-Programmieradapter auf den Digispark. Und fertig ist der lustig kleine handliche USBasp-Adapter. Das war es, Tschüß und bis bald... Viel Erfolg.

Öhm?! Wer sich jetzt etwas verarscht vorkommt, hat allen Grund dazu. Aber auch den NOOBs kann geholfen werden. Warum sollte jeder den harten Weg nehmen, wenn es Alternativen gibt? Also dranbleiben. Es folgt die nutzerfreundliche Anleitung, wie man es als stinknormaler Windows- und Arduino-Nutzer hinbekommt.

Zutaten:

1 x Arduino UNO oder NANO, wenn nix anderes in der Bastelkiste liegt, geht auch ein Arduino Micro plus USB-Serielladapter oder billige China-Clones. Dazu Verbindungsstrippen in männlich, weiblich und divers. Steckbrett wäre auch nicht dumm.

Wer natürlich schon einen Programmieradapter USBasp oder ähnliches hat, kann natürlich diesen verwenden. Wer nicht, kein Problem...

Die Software AVRDUDESS. Dieses ist ein hübsches Frontend für die AVRDUDE Programmiersoftware, welches mit dem Programmieradapter und den Atmel Bausteinen kommuniziert.

Und die die USBasp-Firmware als HEX Datei. Ich habe da schonmal etwas vorbereitet. Die Mühe, sich den Kram selbst zu kompilieren kann man sich machen, muss man aber nicht. Weil es ist eine einmalige Sache.

Wer bereits im Besitz eines Programmieradapters ist, wählt in der Oberfläche den passenden aus und schließt die Strippen wie folgt an den Digispark an:

  • Digispark -- ISP-Adapter -- "meine" Kabelfarben
  • 5V -- 5V -- rot
  • GND -- GND -- schwarz
  • P0 -- MOSI -- grün
  • P1 -- MISO -- weiß
  • P2 -- SCK -- blau
  • P5 -- Reset -- gelb

Und macht weiter im übernächsten Schritt, wo es um die Programmierung mit AVRDUDESS geht.

Wer jetzt keinen ISP-Adapter hat, aber irgendwo noch einen Arduino UNO oder NANO herumfliegen hat, liest jetzt hier weiter:

Den Arduino an den PC ansaften, die Arduino Software aufrufen, die richtige Hardware auswählen, damit man ihn "füttern" kann. Das sollte so ziemlich jeder Bastler kennen. Nun unter

Datei > Beispiele > 11. Arduino ISP > Arduino ISP den Sketch laden und in den Arduino hochladen. Fertig ist der Behelfs-ISP Programmieradapter. Den verwendeten COM-Port des Arduinos merken. Wird später gebraucht. Anspruchslose und faule Gesellen könnten hier aufgeben und sagen: Ich habe ab jetzt doch einen Programmieradapter, was will der Typ überhaupt?! Was ich (persönlich) will, ist ein handliches kleines Teil, nicht so ein unhandlicher Brocken. Und ausserdem mache ich mir einen Digispark USBasp, weil ich es kann! Und ihr könnt das auch! Ob ihr es wollt, bleibt euch überlassen.

So, nun die Anschlüsse vom Arduino-Adapter zum Digispark:

  • Digispark -- Arduino
  • 5V -- 5V -- rot
  • GND -- GND -- schwarz
  • P0 -- D11 -- grün
  • P1 -- D12 -- weiß
  • P2 -- D13 -- blau
  • P5 -- D10 -- gelb

Als nächstes nun AVRDUDESS installieren und die HEX-Datei irgendwo hinschieben, wo man sie wiederfindet. Nun das Programm starten und als erstes den passenden ISP-Adapter auswählen. Wer schon einen hat, wählt seinen aus. Ansonsten wird nun der soeben umgewidmete Arduino eingegeben. Obacht, aus unerfindlichen Gründen muss man den "Atmel STK5000 Version 1.x firmware" (1) auswählen. Den oben gemerkten COM-Port auswählen (2). Baudrate 19200 eingeben.

Wenn alles passend angeschlossen, oben rechts den ATiny85 auswählen (3) und auf "Detect" klicken (4). Unten im Fenster sollte eine positive Rückmeldung stehen. Wenn nicht, "schalte sofort aus und suche den Fehler" wie es in meinem alten Elektronikbaukasten immer so schön stand. Wenn ja, weiter im Text. Die zu flashende HEX-Datei usbasp_t85.hex auswählen (5). Den Knopf "Write" auswählen (6) und "Format" Intel Hex (6a). Dann die Hex-Datei mit "Go" (7) in den Digispark übertragen. Unten im schwarzen Fenster gucken, ob das so geklappt hat. Wenn nicht, Pause machen und alles nochmal überprüfen.


Der letzte Schritt ist der gefährlichste, also bitte nur machen, wenn man nicht zu hibbelig ist! Weil ansonsten kann es passieren, dass man den Digispark "verfust", also sich sozusagen aussperrt und den Baustein erst wieder mit einem speziellen Adapter retten kann. Das will man nicht. Also ab jetzt, Obacht. Mitte rechts findet ihr "Fuses & Lock Bits". Erstmal "Read" klicken (8) und unten im Fenster sehen, ob das funktioniert hat. Erst dann trägt man bei L "0xF1" und bei H "0x5D" ein (9). E sowie LB NICHT!!! anfassen. Dann erst in der Zeile, wo "L" steht, rechts auf "write" klicken (10). Danach ist der Baustein nicht mehr auslesbar (11), was man an der Meldung unten im Fenster sieht. Das gehört so. Nun alles abstöpseln und den Digispark an einen USB-Port stecken. Es sollte das erlösende "Palim Palim" kommen. Möglicherweise nörgelt das Windows wegen fehlender Treiber. Spätestens, wenn man die Digistump Software in den Arduino geladen hat und den dazugehörigen Treiber installiert, sollte auch das funktionieren. Stichwort libusb.

Wenn die Treibersache erledigt ist, könnt ihr einfach mal ausprobieren, ob der selbstgebaute ISP-Adapter funktioniert. Dazu wieder ARVDUDESS aufrufen, oben den "USBasp" Adapter von Fischl auswählen und mal sehen, ob das Teil reagiert. Als nächstes entweder einen zweiten Digispark an den ersten anschließen. Verkabelung ist 1:1 zu obigen Plänen. Oder irgendeinen passenden Baustein oder auch einen Arduino über den ISP-Port. Damit könnte man dann sogar den Bootloader eines Arduinos aktualisieren.

Wie man einen selbstgefrickelten Digistump Bootloader in die Digisparks unter Windows schiebt, werde ich in einem weiteren Beitrag schreiben. Im Übrigen sind Linux Nutzer relativ fein raus. Weil der USBasp- und auch der Digistump Quellcode unter Linux entwickelt wurde, geht das dort alles viel simpler und über die Kommandozeile. Tja, man kann nicht alles haben. ;)

Keine Kommentare:

Kommentar veröffentlichen