{"id":1426,"date":"2020-10-30T18:58:03","date_gmt":"2020-10-30T17:58:03","guid":{"rendered":"https:\/\/www.admindu.de\/wordpress\/?p=1426"},"modified":"2020-10-30T21:53:48","modified_gmt":"2020-10-30T20:53:48","slug":"usb-isp-version-2-0","status":"publish","type":"post","link":"https:\/\/www.admindu.de\/wordpress\/?p=1426","title":{"rendered":"USB ISP Version 2.0"},"content":{"rendered":"\n<p>Beim st\u00f6bern auf AliExpress bin ich auf diesen <a rel=\"noreferrer noopener\" href=\"https:\/\/de.aliexpress.com\/item\/10000347511973.html?spm=a2g0o.productlist.0.0.776a6181Ni2jJf&amp;algo_pvid=19a0642d-d126-4031-9673-d1175e0d20a1&amp;algo_expid=19a0642d-d126-4031-9673-d1175e0d20a1-8&amp;btsid=0b0a187916039809040844452eedde&amp;ws_ab_test=searchweb0_0,searchweb201602_,searchweb201603_\" target=\"_blank\">ISP Programmer<\/a> gestossen. Der Preis ist wirklich attraktiv und da dachte ich mir, dieser Programmer w\u00e4re eine sch\u00f6ne Erweiterung f\u00fcr meine Projekt-Boxen aus der <a rel=\"noreferrer noopener\" href=\"https:\/\/www.admindu.de\/wordpress\/?p=1202\" data-type=\"post\" data-id=\"1202\" target=\"_blank\">MakerAG<\/a>. Gesagt, getan, habe ich ein paar davon bestellt. <\/p>\n<!--more Weiterlesen-->\n\n\n\n<p>Die Programmer kommen in verschiedenen Farben. Das Alugeh\u00e4use ist brauchbar verarbeitet und es ist ein entsprechendes Flachbandkabel beigelegt. Das Produkt kommt in einer antistatischen T\u00fcte. Die Lieferzeit bei meiner Bestellung betrug ca. 4 Wochen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"825\" src=\"https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8842-1024x825.jpg\" alt=\"\" class=\"wp-image-1431\" srcset=\"https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8842-1024x825.jpg 1024w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8842-300x242.jpg 300w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8842-768x619.jpg 768w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8842-1536x1237.jpg 1536w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8842-2048x1649.jpg 2048w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><figcaption>USB ISP Version 2.0 <\/figcaption><\/figure>\n\n\n\n<p>Die Ern\u00fcchterung trat beim ersten Test unter <a rel=\"noreferrer noopener\" href=\"https:\/\/releases.ubuntu.com\/20.04\/\" target=\"_blank\">Ubuntu 20.04<\/a> ein. Die LED am Ger\u00e4t leuchtet rot. Das Ger\u00e4t wird als USBHID erkannt. Manufacturer: zhifengsoft. Ein solches Produkt kennt weder der Linux-Kernel, noch kann Arduino es ansprechen. Die USB-ID ist 03eb:c8b4 und wird im Kommando <strong><em>lsusb<\/em><\/strong> zwar als Atmel Corp. ausgewiesen, aber eine Funktion konnte ich dem Stick nicht entlocken. <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[68880.160613] usb 1-1.5: new low-speed USB device number 9 using ehci-pci\n[68880.276311] usb 1-1.5: New USB device found, idVendor=03eb, idProduct=c8b4, bcdDevice= 1.00\n[68880.276318] usb 1-1.5: New USB device strings: Mfr=1, Product=2, SerialNumber=0\n[68880.276322] usb 1-1.5: Product: USBHID\n[68880.276325] usb 1-1.5: Manufacturer: zhifengsoft<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">Bus 001 Device 009: ID 03eb:c8b4 Atmel Corp.<\/pre>\n\n\n\n<p>Einige Recherchen im Netz (z.B. <a rel=\"noreferrer noopener\" href=\"https:\/\/irq5.io\/2017\/07\/25\/making-usbasp-chinese-clones-usable\/\" target=\"_blank\">hier<\/a> und <a rel=\"noreferrer noopener\" href=\"http:\/\/cepp-techblog.blogspot.com\/2013\/12\/avr-isp-aus-der-bucht.html\" target=\"_blank\">hier<\/a>) haben eine L\u00f6sung zu Tage gef\u00f6rdert, die nicht nur die Funktion sicher stellt, sondern auch auf die frei verf\u00fcgbare Softwarel\u00f6sung <a rel=\"noreferrer noopener\" href=\"https:\/\/www.fischl.de\/usbasp\/\" target=\"_blank\">USBasp von Thomas Fischl<\/a> setzt. Da die vorstehend genannten Links relativ alt sind, arbeite ich sie hier noch einmal auf.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Hardware<\/h1>\n\n\n\n<p>Das Geh\u00e4use des Programmers l\u00e4sst sich \u00f6ffnen, indem man einfach das Alugeh\u00e4use in Richtung des USB Stecker abzieht. Keine Scheu, es geht nicht allzu schwer. Bei einem St\u00fcckpreis von knapp 2 Euro w\u00e4re der Verlust aber auch zu verschmerzen \ud83d\ude00<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"1261\" src=\"https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8843-edited-1-scaled.jpg\" alt=\"\" class=\"wp-image-1440\" srcset=\"https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8843-edited-1-scaled.jpg 2560w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8843-edited-1-300x148.jpg 300w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8843-edited-1-1024x504.jpg 1024w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8843-edited-1-768x378.jpg 768w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8843-edited-1-1536x756.jpg 1536w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8843-edited-1-2048x1009.jpg 2048w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><figcaption>Abdeckung entfernen<\/figcaption><\/figure>\n\n\n\n<p>Nach dem \u00d6ffnen kommt, zumindestens bei mir, eine relativ sauber gearbeitete Platine zum Vorschein. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"1014\" src=\"https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8846-edited-1-scaled.jpg\" alt=\"\" class=\"wp-image-1444\" srcset=\"https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8846-edited-1-scaled.jpg 2560w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8846-edited-1-300x119.jpg 300w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8846-edited-1-1024x406.jpg 1024w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8846-edited-1-768x304.jpg 768w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8846-edited-1-1536x608.jpg 1536w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8846-edited-1-2048x811.jpg 2048w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><figcaption>Oberseite<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"1071\" src=\"https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8845-edited-1-scaled.jpg\" alt=\"\" class=\"wp-image-1447\" srcset=\"https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8845-edited-1-scaled.jpg 2560w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8845-edited-1-300x125.jpg 300w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8845-edited-1-1024x428.jpg 1024w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8845-edited-1-768x321.jpg 768w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8845-edited-1-1536x642.jpg 1536w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8845-edited-1-2048x857.jpg 2048w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><figcaption>Unterseite<\/figcaption><\/figure>\n\n\n\n<p>Dort finden wir einen <a rel=\"noreferrer noopener\" href=\"https:\/\/www.microchip.com\/wwwproducts\/en\/ATMEGA88\" target=\"_blank\">Atmega88<\/a> mit einem 12 Mhz Quarz, sowie einige andere Bauteile. Darell Tan geht in <a rel=\"noreferrer noopener\" href=\"https:\/\/irq5.io\/2017\/07\/25\/making-usbasp-chinese-clones-usable\/\" target=\"_blank\">diesem Blog-Post<\/a> genauer auf den Schaltplan ein. Die f\u00fcr uns relevante Information ist der Atmega88 im TQFP Geh\u00e4use als Basis-Chip. Sowie die Erkenntnis, dass der USB D- PIN zus\u00e4tzlich zum GPIO PB0 auch noch an den GPIO PD3 des Atmega88 angebunden ist (Der  USB D+ PIN an GPIO PB1 und PD2). Das ist ein Unterschied zum USBasp Bauplan von Thomas Fischl und erfordert Anpassungen an seiner Software, damit diese auf dieser Hardware lauff\u00e4hig wird. Weitere Details zum USB-Port und -Bus finden sich <a rel=\"noreferrer noopener\" href=\"https:\/\/de.wikipedia.org\/wiki\/Universal_Serial_Bus\" target=\"_blank\">hier<\/a>.<\/p>\n\n\n\n<p>Um die Software auf dem Atemga88 ersetzten zu k\u00f6nnen, muss der Programmer in den &#8220;Update Mode&#8221; versetzt werden. Dazu m\u00fcssen die beiden L\u00f6tpunkte, die mit &#8220;&#8211;&gt;UP&lt;&#8211;&#8221; gekennzeichnet sind, mit einer Br\u00fccke verbunden werden. Technisch wird dadurch der Reset-PIN des ISP Stecker (oben rechts im Bild) mit dem Reset-PIN des Atmega88 verbunden. Dadurch kann man mit einem zweiten ISP Programmer dem Atmega88 in den Upload-Zustand versetzen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"2166\" height=\"996\" src=\"https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8847-edited-1.jpg\" alt=\"\" class=\"wp-image-1460\" srcset=\"https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8847-edited-1.jpg 2166w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8847-edited-1-300x138.jpg 300w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8847-edited-1-1024x471.jpg 1024w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8847-edited-1-768x353.jpg 768w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8847-edited-1-1536x706.jpg 1536w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8847-edited-1-2048x942.jpg 2048w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><figcaption>Programmer mit gesetzter Br\u00fccke<\/figcaption><\/figure>\n\n\n\n<p>Die Stromversorgung darf meiner Erfahrung nach nicht via USB erfolgen, wenn der Atmega88 programmiert werden soll. D.h. die Stromversorgung muss \u00fcber den ISP Stecker auf der rechten Seite erfolgen. <\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Software<\/h1>\n\n\n\n<p>Leider gibt es da ein gewisses Henne-Ei Problem. Wir wollen ja den Atmega88 neu programmieren. Daf\u00fcr brauchen wir einen ISP Programmer, den wir aber noch nicht haben, weil er ja nicht funktioniert \ud83d\ude10 Aber daf\u00fcr gibt es eine L\u00f6sung: Wenn man bereits ein anderes Arduino Board besitzt. Also z.B. ein Arduino Nano oder ein Arduino Uno, dann kann man dieses Board als Arduino ISP verwenden um den Atmega88 zu programmieren.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Arduino ISP vorbereiten<\/h2>\n\n\n\n<p>Der notwendige Sketch wird in der Arduino Umgebung freundlicherweise gleich mitgeliefert. Ich verwende hier im Beispiel einen Arduino Nano Klon.<\/p>\n\n\n\n<p>Als Erstes muss man in der Arduino Oberfl\u00e4che das entsprechende Board ausw\u00e4hlen. Dies erfolgt im Menu <strong><em>&#8220;Werkzeuge&#8221;<\/em><\/strong>, unterer Bereich.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"854\" height=\"666\" src=\"https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/arduino-board-waehlen.png\" alt=\"\" class=\"wp-image-1465\" srcset=\"https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/arduino-board-waehlen.png 854w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/arduino-board-waehlen-300x234.png 300w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/arduino-board-waehlen-768x599.png 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><figcaption>Board Einstellungen in der Arduino Oberfl\u00e4che<\/figcaption><\/figure>\n\n\n\n<p>Anschlie\u00dfend aus den Beispielen den &#8220;ArduinoISP&#8221; Sketch ausw\u00e4hlen. Dies erfolgt im Menu <strong><em>&#8220;Datei&#8221; -&gt; &#8220;Beispiele&#8221; -&gt; &#8220;11.ArduinoISP<\/em><\/strong>&#8220;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"852\" height=\"819\" src=\"https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/ardino-load-sketch-example.png\" alt=\"\" class=\"wp-image-1466\" srcset=\"https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/ardino-load-sketch-example.png 852w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/ardino-load-sketch-example-300x288.png 300w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/ardino-load-sketch-example-768x738.png 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><figcaption>Beispiel Sketch Auswahl in der Arduino Oberfl\u00e4che<\/figcaption><\/figure>\n\n\n\n<p>Wenn der Sketch geladen ist, kann er durch einen Klick auf den <strong><em>&#8220;Haken&#8221;<\/em><\/strong> oben Links in der Arduino Oberfl\u00e4che kompiliert werden. Mit dem <strong><em>&#8220;Pfeil&#8221;<\/em><\/strong> rechts neben dem <strong><em>&#8220;Haken&#8221;<\/em><\/strong> kann der Sketch dann auf den Nano \u00fcbertragen werden.  Erfolgs- oder Fehlermeldungen finden sich im <strong><em>&#8220;schwarzen Kasten&#8221;<\/em><\/strong> unten in der Oberfl\u00e4che. Der folgende Screenshot zeigt ein erfolgreiches Hochladen (Hochladen abgeschlossen).<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"887\" height=\"774\" src=\"https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/Bildschirmfoto-von-2020-10-30-12-07-06.png\" alt=\"\" class=\"wp-image-1470\" srcset=\"https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/Bildschirmfoto-von-2020-10-30-12-07-06.png 887w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/Bildschirmfoto-von-2020-10-30-12-07-06-300x262.png 300w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/Bildschirmfoto-von-2020-10-30-12-07-06-768x670.png 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><figcaption>Arduino Oberfl\u00e4che nach erfolgreichem Hochladen des Arduino ISP Sketch<\/figcaption><\/figure>\n\n\n\n<p>Jetzt kann, wie im zu Beginn stehenden Kommentarbereich des Sketch beschrieben, die Verkabelung erfolgen. Ich spare mir die 3 Status-LEDs, da wir auch an der Ausgabe sehen ob es klappt oder nicht. Wichtig ist noch: &#8220;Pin 10 is used to reset the target microcontroller&#8221;.  Die Belegung ergibt sich also wie folgt:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>Nano Klon<\/td><td>USB ISP Stecker<\/td><\/tr><tr><td>D10<\/td><td>RESET<\/td><\/tr><tr><td>D11<\/td><td>MOSI<\/td><\/tr><tr><td>D12<\/td><td>MISO<\/td><\/tr><tr><td>D13<\/td><td>SCK<\/td><\/tr><tr><td>+5V<\/td><td>VCC<\/td><\/tr><tr><td>GND<\/td><td>GND<\/td><\/tr><\/tbody><\/table><figcaption>Zuordnung GPIO Nano &lt;&#8211;&gt; USP ISP<\/figcaption><\/figure>\n\n\n\n<p>Wenn alles passt, dann leuchtet der Nano gr\u00fcn und der USP ISP rot, sobald man den Nano an den USB Port des Rechners h\u00e4ngt. Bitte <strong>*IMMER*<\/strong> vor allem die Stromversorgung <strong>doppelt<\/strong> pr\u00fcfen. Wenn da etwas nicht stimmt, kann gerne alles in Rauch aufgehen. Vor allem, wenn es dann den USB Port am Rechner gegrillt hat, ist der Tag ganz sicher gelaufen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1022\" src=\"https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8848-1024x1022.jpg\" alt=\"\" class=\"wp-image-1474\" srcset=\"https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8848-1024x1022.jpg 1024w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8848-300x300.jpg 300w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8848-150x150.jpg 150w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8848-768x767.jpg 768w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8848-1536x1534.jpg 1536w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8848-2048x2045.jpg 2048w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8848-100x100.jpg 100w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><figcaption>USB ISP Hardware mit Anbindung an Arduino ISP auf dem Nano<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">USBasp anpassen und hochladen<\/h2>\n\n\n\n<p>Nachdem alle notwendigen Vorarbeiten erledigt sind, kommen wir zur eigentlichen Aufgabe \ud83d\ude42 Zuerst m\u00fcssen wir den Quellcode bei Thomas Fischl herunterladen. Dieser findet sich <a rel=\"noreferrer noopener\" href=\"https:\/\/www.fischl.de\/usbasp\/\" target=\"_blank\">hier<\/a>. Es wird die Datei <a href=\"https:\/\/www.fischl.de\/usbasp\/usbasp.2011-05-28.tar.gz\">usbasp.2011-05-28.tar.gz<\/a> ben\u00f6tigt. Diese dann wie folgt entpacken:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">tar -xzvf usbasp.2011-05-28.tar.gz<\/pre>\n\n\n\n<p>Heraus kommt ein Ordner usbasp.2011-05.28. F\u00fcr die weiteren Schritte ist nur der Unterordner firmware relevant. Wie bereits im Abschnitt Hardware dargelegt, ist die Verbindung des GPIO PD3 mit dem USB D- PIN nicht vorgesehen. Die Initialisierung des DDRD Registers erfolgt in Zeile 310 in der Datei <strong><em>firmware\/main.c<\/em><\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">309 \/* all outputs except PD2 = INT0 *\/\n310 DDRD = ~(1 &lt;&lt; 2);<\/pre>\n\n\n\n<p> Ich habe diesen Code wie folgt angepasst:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">309 \/* all outputs except PD2 and PD3 = INT0 *\/\n310 DDRD = ~(1 &lt;&lt; 2)&amp;~(1 &lt;&lt; 3);<\/pre>\n\n\n\n<p>Da im aktuellen avr-gcc Fehler gemeldet werden, wenn man Variablen, die nicht als <strong><em>&#8220;const&#8221;<\/em> <\/strong>deklariert sind, in die read-only section legen m\u00f6chte<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">usbdrv\/usbdrv.h:455:6: error: variable 'usbDescriptorDevice' must be const in order to be put into read-only section by means of '<strong>attribute<\/strong>((progmem))'\nchar usbDescriptorDevice[];<\/pre>\n\n\n\n<p>m\u00fcssen noch die folgenden Zeilen in den Dateien <strong><em>firmware\/usbdrv\/usbdrv.h<\/em><\/strong> und <strong><em>firmware\/usbdrv\/<\/em>usbdrv.c <\/strong>um die Deklaration <strong><em>&#8220;const&#8221; <\/em><\/strong>erweitert werden.<\/p>\n\n\n\n<p>diff f\u00fcr usbdrv.h:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ diff usbdrv.h usbdrv.h-ORIG\n455c455\n&lt; const char usbDescriptorDevice[];\nchar usbDescriptorDevice[];\n461c461\n&lt; const char usbDescriptorConfiguration[];\nchar usbDescriptorConfiguration[];\n467c467\n&lt; const char usbDescriptorHidReport[];\nchar usbDescriptorHidReport[];\n473c473\n&lt; const char usbDescriptorString0[];\nchar usbDescriptorString0[];\n479c479\n&lt; const int usbDescriptorStringVendor[];\nint usbDescriptorStringVendor[];\n485c485\n&lt; const int usbDescriptorStringDevice[];\nint usbDescriptorStringDevice[];\n491c491\n&lt; const int usbDescriptorStringSerialNumber[];\nint usbDescriptorStringSerialNumber[];<\/pre>\n\n\n\n<p>diff f\u00fcr usbdrv.c<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ diff usbdrv.c usbdrv.c-ORIG\n70c70\n&lt; PROGMEM const char usbDescriptorString0[] = { \/* language descriptor *\/\nPROGMEM char usbDescriptorString0[] = { \/* language descriptor *\/\n80c80\n&lt; PROGMEM const int usbDescriptorStringVendor[] = {\nPROGMEM int usbDescriptorStringVendor[] = {\n89c89\n&lt; PROGMEM const int usbDescriptorStringDevice[] = {\nPROGMEM int usbDescriptorStringDevice[] = {\n98c98\n&lt; PROGMEM const int usbDescriptorStringSerialNumber[] = {\nPROGMEM int usbDescriptorStringSerialNumber[] = {\n111c111\n&lt; PROGMEM const char usbDescriptorDevice[] = { \/* USB device descriptor *\/\nPROGMEM char usbDescriptorDevice[] = { \/* USB device descriptor *\/\n142c142\n&lt; PROGMEM const char usbDescriptorConfiguration[] = { \/* USB configuration descriptor *\/\nPROGMEM char usbDescriptorConfiguration[] = { \/* USB configuration descriptor *\/<\/pre>\n\n\n\n<p>Anschlie\u00dfend muss der Code kompiliert werden. Wer bisher nur Arduino kannte, wei\u00df vielleicht nicht, was ein Makefile ist und wie man damit umgeht. Darauf gehe ich hier auch nicht weiter ein, sondern versuche nur eine nachvollziehbare Anleitung zu erstellen. Die notwendigen Open Source Command Line Tools wie <a rel=\"noreferrer noopener\" href=\"https:\/\/gcc.gnu.org\/wiki\/avr-gcc\" target=\"_blank\">avr-gcc<\/a> (Compiler f\u00fcr Atmega Code) und <a rel=\"noreferrer noopener\" href=\"https:\/\/www.nongnu.org\/avrdude\/\" target=\"_blank\">avrdude<\/a> (Tool zu Hochladen auf den Chip) kann man z.B. aus den Paketquellen von Ubuntu installieren. Die Tools werden aber auch von Arduino verwendet und daher mit jedem Arduino Paket ausgeliefert. Ich verwende im Folgenden die mit Arduino gelieferten Tools, da diese auf Windows, Linux und Mac OSX nach der Installation von Arduino vorhanden sein sollten. Leider ist das Tool &#8220;make&#8221; nicht im Arduino-Paket enthalten. Auf meinem Ubuntu 20.04 ist es aber in der Basis-Installation bereits installiert. Auf Windows und Mac OSX sind hier ggf. Nacharbeiten erforderlich.<\/p>\n\n\n\n<p>Wie bereits im Bereich Hardware ausgef\u00fchrt, ist der Basis-Chip ein Atmega88. Diese Tatsache m\u00fcssen wir dem <a rel=\"noreferrer noopener\" href=\"https:\/\/de.wikipedia.org\/wiki\/Compiler\" target=\"_blank\">Compiler<\/a> bekannt machen. Dazu wird die Datei <strong><em>firmware\/Makefile<\/em><\/strong> editiert. Dort ist in Zeile 10, 11 und 12 Folgendes gesetzt:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">10 TARGET=atmega8\n11 HFUSE=0xc9\n12 LFUSE=0xef<\/pre>\n\n\n\n<p>Entsprechend den vorstehenden Beispielen im Makefile \u00e4ndern wir diese Werte auf die Werte aus dem Kommentar in Zeile 8 des Makefile. Der Atmega48 ist bez\u00fcglich der Fuses dem Atmega88 vergleichbar.  Das sieht dann so aus:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">10 TARGET=atmega88\n11 HFUSE=0xdd\n12 LFUSE=0xff<\/pre>\n\n\n\n<p>Damit der Build Prozess den mit Arduino angelieferten Compiler finden kann, muss die Pfad Variable ($PATH) entsprechend erweitert werden. Der Compiler liegt entweder direkt im Installationsverzeichnis von Arduino oder, wenn bereits ein Update via Boardmanager erfolgt ist, im entsprechenden User-Verzeichnis. Meine Basis-Installation von Arduino liegt unter \/opt\/arduino-latest, das User-Verzeichnis ist ~\/.arduino15.  Da Arduino 1.8.13 Stand 10.20202 sehr aktuell ist, setze ich also folgenden Pfad:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ export PATH=$PATH:\/opt\/arduino-latest\/hardware\/tools\/avr\/bin<\/pre>\n\n\n\n<p> Danach werden die Tools gefunden und man kann sich die Version ausgeben lassen:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ avr-gcc -v\nUsing built-in specs.\nReading specs from \/opt\/arduino-1.8.13\/hardware\/tools\/avr\/bin\/..\/lib\/gcc\/avr\/7.3.0\/device-specs\/specs-avr2\nCOLLECT_GCC=avr-gcc\nCOLLECT_LTO_WRAPPER=\/opt\/arduino-1.8.13\/hardware\/tools\/avr\/bin\/..\/libexec\/gcc\/avr\/7.3.0\/lto-wrapper\nTarget: avr\nConfigured with: ..\/gcc\/configure --enable-fixed-point --enable-languages=c,c++ --prefix=\/home\/jenkins\/workspace\/avr-gcc-staging\/label\/debian7-x86_64\/objdir --disable-nls --disable-libssp --disable-libada --disable-shared --with-avrlibc=yes --with-dwarf2 --disable-doc --target=avr\nThread model: single\ngcc version 7.3.0 (GCC)\n\n$ avrdude -C \/opt\/arduino-latest\/hardware\/tools\/avr\/etc\/avrdude.conf -v\navrdude: Version 6.3-20190619\nCopyright (c) 2000-2005 Brian Dean, http:\/\/www.bdmicro.com\/\nCopyright (c) 2007-2014 Joerg Wunsch\nSystem wide configuration file is \"\/opt\/arduino-latest\/hardware\/tools\/avr\/etc\/avrdude.conf\"\nUser configuration file is \"\/home\/dt\/.avrduderc\"\nUser configuration file does not exist or is not a regular file, skipping\navrdude: no programmer has been specified on the command line or the config file\nSpecify a programmer using the -c option and try again<\/pre>\n\n\n\n<p>Damit der avrdude seine Config-Datei findet, und um die richtige Baudrate f\u00fcr den Arduino ISP zu setzen, habe ich noch die  Zeilen 79, 82 und 85 in <strong><em>firmware\/Makefile<\/em><\/strong> angepasst. Diese ersetzen die vorhandenen Zeilen:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">78 flash:\n79 avrdude -C \/opt\/arduino-latest\/hardware\/tools\/avr\/etc\/avrdude.conf -b 19200 -c ${ISP} -p ${TARGET} -P ${PORT} -U flash:w:main.hex\n80\n81 fuses:\n82 avrdude -C \/opt\/arduino-latest\/hardware\/tools\/avr\/etc\/avrdude.conf -b 19200 -c ${ISP} -p ${TARGET} -P ${PORT} -u -U hfuse:w:$(HFUSE):m -U lfuse:w:$(LFUSE):m\n83\n84 avrdude:\n85 avrdude -C \/opt\/arduino-latest\/hardware\/tools\/avr\/etc\/avrdude.conf -b 19200 -c ${ISP} -p ${TARGET} -P ${PORT} -v<\/pre>\n\n\n\n<p>Da zum Hochladen des Programms auf den Atmega88 ein Arduino ISP zum Einsatz kommt, muss diese Information noch entsprechend im Makefile hinterlegt werden. Vorsicht: Die Schnittstelle, bei mir \/dev\/ttyUSB0, kann abweichen und ist ggf. anzupassen. Dazu werden die Zeilen 20 und 21 in der Datei <strong><em>firmware\/Makefile<\/em><\/strong> wie folgt angepasst:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">20 ISP=stk500v1\n21 PORT=\/dev\/ttyUSB0<\/pre>\n\n\n\n<p>Jetzt kann der Code kompiliert werden. Dazu sicherstellen, dass man sich im Verzeichnis firmware befindet und dort das Kommando <strong>&#8220;<em>make main.hex&#8221;<\/em><\/strong> aufrufen:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ make main.hex\navr-gcc -Wall -O2 -Iusbdrv -I. -mmcu=atmega88 -c usbdrv\/usbdrv.c -o usbdrv\/usbdrv.o\navr-gcc -Wall -O2 -Iusbdrv -I. -mmcu=atmega88 -x assembler-with-cpp -c usbdrv\/usbdrvasm.S -o usbdrv\/usbdrvasm.o\navr-gcc -Wall -O2 -Iusbdrv -I. -mmcu=atmega88 -c usbdrv\/oddebug.c -o usbdrv\/oddebug.o\navr-gcc -Wall -O2 -Iusbdrv -I. -mmcu=atmega88 -c isp.c -o isp.o\navr-gcc -Wall -O2 -Iusbdrv -I. -mmcu=atmega88 -c clock.c -o clock.o\navr-gcc -Wall -O2 -Iusbdrv -I. -mmcu=atmega88 -x assembler-with-cpp -c tpi.S -o tpi.o\navr-gcc -Wall -O2 -Iusbdrv -I. -mmcu=atmega88 -c main.c -o main.o\navr-gcc -Wall -O2 -Iusbdrv -I. -mmcu=atmega88 -o main.bin usbdrv\/usbdrv.o usbdrv\/usbdrvasm.o usbdrv\/oddebug.o isp.o clock.o tpi.o main.o -Wl,-Map,main.map\nrm -f main.hex main.eep.hex\navr-objcopy -j .text -j .data -O ihex main.bin main.hex<\/pre>\n\n\n\n<p>Sieht die Ausgabe wie im vorstehenden Block aus, dann hat alles geklappt und das Programm kann auf den Atmega88 hochgeladen werden.<\/p>\n\n\n\n<p>Dazu pr\u00fcfen wir, ob unser Arduino ISP den Atmega88 auf dem USB ISP ansprechen kann. Nach dem Verbinden des Nano Klon mit meinem Ubuntu zeigt der Befehl &#8220;<strong><em>dmesg<\/em><\/strong>&#8221; diesen als Device \/dev\/ttyUSB0 an:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[102115.734926] usb 1-1.3: new full-speed USB device number 13 using ehci-pci\n[102115.844481] usb 1-1.3: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice= 2.54\n[102115.844489] usb 1-1.3: New USB device strings: Mfr=0, Product=2, SerialNumber=0\n[102115.844493] usb 1-1.3: Product: USB2.0-Serial\n[102115.845385] ch341 1-1.3:1.0: ch341-uart converter detected\n[102115.846405] usb 1-1.3: ch341-uart converter now attached to ttyUSB0<\/pre>\n\n\n\n<p>Nach der Dokumentation von Arduino ISP und avrdude, sollte ein auslesen der Chip-ID wie folgt m\u00f6glich sein:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ avrdude -C \/opt\/arduino-latest\/hardware\/tools\/avr\/etc\/avrdude.conf -p m88 -c stk500v1 -P \/dev\/ttyUSB0 -b19200 -B5\navrdude: AVR device initialized and ready to accept instructions\nReading | ################################################## | 100% 0.02s\navrdude: Device signature = 0x1e930a (probably m88)\navrdude: safemode: Fuses OK (E:F9, H:DD, L:FF)\navrdude done. Thank you.<\/pre>\n\n\n\n<p>Das klappt auch wunderbar. Wie zu sehen ist, sind die H und L Fuses bereits auf 0xdd und 0xff gesetzt. Also analog den im Makefile eingetragenen Werten. Ein <strong><em>&#8220;make fuses&#8221; <\/em><\/strong>brauchen wir daher nicht.  Als n\u00e4chstes setze ich den Chip auf dem USB ISP vollst\u00e4ndig zur\u00fcck um ggf. gesetzte Lock-Bits zu l\u00f6schen. Dazu kommt die <em>&#8220;-e &#8220;<\/em>  Option f\u00fcr einen chip erase zum Einsatz:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ avrdude -C \/opt\/arduino-latest\/hardware\/tools\/avr\/etc\/avrdude.conf -p m88 -c stk500v1 -P \/dev\/ttyUSB0 -b19200 -e\navrdude: AVR device initialized and ready to accept instructions\nReading | ################################################## | 100% 0.02s\navrdude: Device signature = 0x1e930a (probably m88)\navrdude: erasing chip\navrdude: safemode: Fuses OK (E:F9, H:DD, L:FF)\navrdude done. Thank you.<\/pre>\n\n\n\n<p>Im letzten Schritt wird jetzt die Firmware auf den Atmega88 geschrieben. Dazu sicherstellen, dass man im Verzeichnis firmware ist und dann das Kommando <strong><em>&#8220;make flash&#8221; <\/em><\/strong>aufrufen.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ make flash\navrdude -C \/opt\/arduino-latest\/hardware\/tools\/avr\/etc\/avrdude.conf -b 19200 -c stk500v1 -p atmega88 -P \/dev\/ttyUSB0 -U flash:w:main.hex\navrdude: AVR device initialized and ready to accept instructions\nReading | ################################################## | 100% 0.02s\navrdude: Device signature = 0x1e930a (probably m88)\navrdude: NOTE: \"flash\" memory has been specified, an erase cycle will be performed\nTo disable this feature, specify the -D option.\navrdude: erasing chip\navrdude: reading input file \"main.hex\"\navrdude: input file main.hex auto detected as Intel Hex\navrdude: writing flash (4532 bytes):\nWriting | ################################################## | 100% 6.47s\navrdude: 4532 bytes of flash written\navrdude: verifying flash memory against main.hex:\navrdude: load data flash data from input file main.hex:\navrdude: input file main.hex auto detected as Intel Hex\navrdude: input file main.hex contains 4532 bytes\navrdude: reading on-chip flash data:\nReading | ################################################## | 100% 3.17s\navrdude: verifying \u2026\navrdude: 4532 bytes of flash verified<\/pre>\n\n\n\n<p>Sieht die Ausgabe wie im vorstehenden Block aus, dann hat alles geklappt \ud83d\ude00 Der Nano kann vom USB Port und der USB ISP vom Nano getrennt werden. Auf dem USB ISP muss die Br\u00fccke an den &#8220;&#8211;&gt;UP&lt;&#8211;&#8221; L\u00f6tpads entfernt werden. Wenn man den USB ISP jetzt direkt in den USB Port des Rechners steckt, dann sollte dieser blau leuchten und in <strong><em>&#8220;dmesg&#8221;<\/em><\/strong> Folgendes zu sehen sein:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[108336.533661] usb 1-1.3: new low-speed USB device number 68 using ehci-pci\n[108336.650953] usb 1-1.3: New USB device found, idVendor=16c0, idProduct=05dc, bcdDevice= 1.04\n[108336.650961] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0\n[108336.650965] usb 1-1.3: Product: USBasp\n[108336.650968] usb 1-1.3: Manufacturer: www.fischl.de<\/pre>\n\n\n\n<p>Ein Hinweis noch: Ich hatte immer mal wieder Probleme mit dem Arduino ISP, weil es keinen Sync mehr mit dem USB ISP Atmega88 herstellen konnte. Ursache ist vermutlich der g\u00fcnstige CH34x USB2Serial Konverter auf den Nano Klonen. Ein Workaround ist, in avrdude die Baudrate auf 9600 (-b9600) zu stellen, einen erfolglosen Versuch durchzuf\u00fchren, und danach wieder auf 19200 (-b19200) zu wechseln. Das hat bei mir immer dazu gef\u00fchrt, dass ein erneuter Upload m\u00f6glich war. Nicht h\u00fcbsch, aber gut genug.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Jetzt testen<\/h1>\n\n\n\n<p>Es steht noch der Beweis aus, dass es auch wirklich funktioniert. Mein Einsatzzweck war die Programmierung eines Attiny f\u00fcr unser <a rel=\"noreferrer noopener\" href=\"https:\/\/www.admindu.de\/wordpress\/?p=1383\" data-type=\"post\" data-id=\"1383\" target=\"_blank\">Halloween Projekt<\/a>. Dann nehmen wir doch gleich einen solchen Attiny und spielen da einen einfachen Blink Sketch auf. Details zum Arduino Core f\u00fcr den Attiny sind im Halloween Artikel zu finden. <\/p>\n\n\n\n<p>Folgender Aufbau zeigt einen Attiny45 auf dem Steckbrett mit direkter Anbindung an den USB ISP sowie einer roten LED an GPIO PB3.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8851-1024x632.jpg\" alt=\"\" class=\"wp-image-1516\" width=\"674\" height=\"415\" srcset=\"https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8851-1024x632.jpg 1024w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8851-300x185.jpg 300w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8851-768x474.jpg 768w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8851-1536x948.jpg 1536w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8851-2048x1264.jpg 2048w\" sizes=\"auto, (max-width: 674px) 100vw, 674px\" \/><figcaption>Attiny Testschaltung<\/figcaption><\/figure>\n\n\n\n<p>Der Zugriff auf das USB-Ger\u00e4t muss als root erfolgen, solange keine entsprechende UDEV Regel f\u00fcr das Device angelegt ist. Als normaler User kann das Ger\u00e4t nicht gefunden werden. Um dieses Problem zu beheben, kann man unter Ubuntu 20.04 als User root eine Datei <strong><em>\/etc\/udev\/rules.d\/99-USBasp.rules<\/em><\/strong> mit folgendem Inhalt anlegen:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># USBasp - USB programmer for Atmel AVR controllers\n# Copy this file to \/etc\/udev\/rules.d so\n\nSUBSYSTEM!=\"usb_device\", ACTION!=\"add\", GOTO=\"usbasp_end\"\n\n# USBasp www.fischl.de\nATTR{idVendor}==\"16c0\", ATTRS{idProduct}==\"05dc\", MODE=\"660\", GROUP=\"dialout\"\n\nLABEL=\"usbasp_end\"<\/pre>\n\n\n\n<p>Anschlie\u00dfend, ebenfalls als User root, die UDEV Regeln manuell neu laden oder das System rebooten und danach den USB ISP erneut einstecken.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">udevadm control --reload-rules &amp;&amp; udevadm trigger<\/pre>\n\n\n\n<p>Der Zugriff ist dann als normaler User m\u00f6glich, wenn sich der User in der Gruppe &#8220;dialout&#8221; befindet. Dies ist auch das Standardvorgehen von Arduino. Jetzt lese ich zum Test die ID des Attiny per avrdude und mit dem umgebauten USP ISP an der Command Line aus:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ avrdude -C \/opt\/arduino-latest\/hardware\/tools\/avr\/etc\/avrdude.conf -p attiny45 -c usbasp -B5\navrdude: set SCK frequency to 187500 Hz\navrdude: AVR device initialized and ready to accept instructions\nReading | ################################################## | 100% 0.00s\navrdude: Device signature = 0x1e9206 (probably t45)\navrdude: safemode: Fuses OK (E:FF, H:DD, L:E1)\navrdude done. Thank you.<\/pre>\n\n\n\n<p>Zur Verwendung in der Arduino Oberfl\u00e4che wird zuerst das Board ausgew\u00e4hlt. Hier ist es ja eigentlich nur der Baustein selber. Dies erfolgt wieder im Menu <strong><em>&#8220;Werkzeuge&#8221;<\/em><\/strong>, wie im folgenden Screenshot dargestellt. Bitte auch ganz unten im Menu den Punkt <strong><em>&#8220;Programmer:&#8221;<\/em><\/strong> beachten. Dort ist <strong><em>&#8220;USPasp (ATTinyCore)&#8221;<\/em><\/strong> ausgew\u00e4hlt.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"999\" height=\"751\" src=\"https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/arduino-attiny45.png\" alt=\"\" class=\"wp-image-1495\" srcset=\"https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/arduino-attiny45.png 999w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/arduino-attiny45-300x226.png 300w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/arduino-attiny45-768x577.png 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><figcaption>Board Konfiguration zur Verwendung eines Attiny45 via USBasp <\/figcaption><\/figure>\n\n\n\n<p>Dann einen einfachen Blink Sketch erstellen und diesen durch einen Klick auf den <strong><em>&#8220;Pfeil&#8221;<\/em><\/strong> links oben auf den Attiny45 \u00fcbertragen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1001\" height=\"748\" src=\"https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/Bildschirmfoto-von-2020-10-30-18-26-12.png\" alt=\"\" class=\"wp-image-1514\" srcset=\"https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/Bildschirmfoto-von-2020-10-30-18-26-12.png 1001w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/Bildschirmfoto-von-2020-10-30-18-26-12-300x224.png 300w, https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/Bildschirmfoto-von-2020-10-30-18-26-12-768x574.png 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><figcaption>Blink Sketch mit erfolgreichem Hochladen<\/figcaption><\/figure>\n\n\n\n<p>In der Ausgabe im <strong><em>&#8220;schwarzen Kasten&#8221;<\/em><\/strong> unten in der Arduino Oberfl\u00e4che sieht man an den &#8220;set SCK frequency&#8221; Zeilen, dass der Upload durch den USP ISP Umbau erfolgt ist.  Und blinken tut es auch:<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video controls src=\"https:\/\/www.admindu.de\/wordpress\/wp-content\/uploads\/2020\/10\/IMG_8850.mov\"><\/video><figcaption>q.e.d \ud83d\ude00<\/figcaption><\/figure>\n\n\n\n<p>Wenn euch dieser Artikel gef\u00e4llt und n\u00fctzlich ist, dann k\u00f6nnt ihr mir eine Freude machen, indem ihr Thomas Fischl und\/oder Arduino auf deren Seiten ein paar Euro, z.B. via Paypal, spendet. Freie Software bedeutet nicht zwingend kostenlose Software. Sondern in erster Linie frei in der Verwendung und Anpassung. Nur daher ist dieser Artikel \u00fcberhaupt m\u00f6glich. Und wenn wir wollen, dass es in Zukunft weiterhin Entwickler gibt, die uns solche Software einfach zur Verf\u00fcgung stellen, dann sollte man auch hier und da etwas zur\u00fcck geben. Vielen Dank!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Beim st\u00f6bern auf AliExpress bin ich auf diesen ISP Programmer gestossen. Der Preis ist wirklich attraktiv und da dachte ich mir, dieser Programmer w\u00e4re eine sch\u00f6ne Erweiterung f\u00fcr meine Projekt-Boxen aus der MakerAG. Gesagt, getan, habe ich ein paar davon bestellt.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[44,92],"tags":[120,124,123,122],"class_list":["post-1426","post","type-post","status-publish","format-standard","hentry","category-atmega-bastelei","category-elektronik","tag-attiny","tag-avrdude","tag-usb-isp","tag-usbasp"],"_links":{"self":[{"href":"https:\/\/www.admindu.de\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/1426","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.admindu.de\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.admindu.de\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.admindu.de\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.admindu.de\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1426"}],"version-history":[{"count":119,"href":"https:\/\/www.admindu.de\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/1426\/revisions"}],"predecessor-version":[{"id":1568,"href":"https:\/\/www.admindu.de\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/1426\/revisions\/1568"}],"wp:attachment":[{"href":"https:\/\/www.admindu.de\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1426"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.admindu.de\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1426"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.admindu.de\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1426"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}