{"id":386,"date":"2015-08-10T21:00:38","date_gmt":"2015-08-10T19:00:38","guid":{"rendered":"http:\/\/www.anginf.de\/?p=386"},"modified":"2016-01-11T11:46:47","modified_gmt":"2016-01-11T10:46:47","slug":"minimal-arduino-selbst-bauen-bootloader-auf-atmega328p-pu","status":"publish","type":"post","link":"https:\/\/www.anginf.de\/?p=386","title":{"rendered":"Minimal-Arduino selbst bauen: Bootloader auf ATMEGA328P-PU"},"content":{"rendered":"<p>Zun\u00e4chst einmal braucht man f\u00fcr die Programmierung der ATMEGA328P-PU einen &#8222;normalen&#8220; Arduino. Ich habe mir bei ebay f\u00fcr wenig Geld aus Hong Kong einen Arduino-Klon besorgt. Es handelte sich dabei um einen &#8222;Pro.mini.328P&#8220; (&#8222;New Pro Mini atmega328 Board 5V 16M Arduino Compatible Nano NEW&#8220;). Das Ger\u00e4t war ohne USB-Header ausgestattet, also musste ich zun\u00e4chst noch einen USB-Serial-Wandler hierf\u00fcr nutzen. Diesen hatte ich schon, er stammte ebenfalls aus Hong Kong.<\/p>\n<p>Nachdem RX vom USB-Wandler zum TX vom mini Pro verbunden wurden, musste noch TX<->RX, 5V<->VCC und GND<->GND verbunden werden. Die &#8222;Blink&#8220;-Demo sollte laufen.<\/p>\n<p>Danach die Blink-Demo in der Arduino-Programmierumgebung laden und testweise auf den Ardunio laden. Blinkt die Diode nun im (neu) vorgegebenen Takt, hat alles geklappt. Die Voraussetzung f\u00fcr die eigentliche Programmierung ist jetzt gegeben.<\/p>\n<p>Nun kann man sich grob weiter an dem Artikel der make-Redaktion entlanghangeln: http:\/\/www.heise.de\/make\/artikel\/Arduino-Uno-als-In-System-Programmer-2769246.html<\/p>\n<p>\u00dcbrigens: Um das AVRDUDE unter Windows zu nutzen, l\u00e4dt man sich das Open Source-Programm von hier: http:\/\/download.savannah.gnu.org\/releases\/avrdude\/avrdude-6.1-mingw32.zip<\/p>\n<p>Als n\u00e4chsten Schritt muss der Pro.mini.328P zu einem ISP-Programmer gemacht werden. Hierzu l\u00e4dt man in der Arduino-IDE unter &#8222;Beispiele&#8220; den Sketch &#8222;Ardunio ISP&#8220; aus und l\u00e4dt diesen hoch.<\/p>\n<p>Die Verkabelung muss danach wie folgt aussehen (den 10kOhm-Widerstand am Pin 1 kann man auch weglassen).<\/p>\n<p><a href=\"https:\/\/www.anginf.de\/wp-content\/uploads\/BreadboardAVR.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.anginf.de\/wp-content\/uploads\/BreadboardAVR.png\" alt=\"BreadboardAVR\" width=\"319\" height=\"431\" class=\"alignnone size-full wp-image-391\" srcset=\"https:\/\/www.anginf.de\/wp-content\/uploads\/BreadboardAVR.png 319w, https:\/\/www.anginf.de\/wp-content\/uploads\/BreadboardAVR-222x300.png 222w\" sizes=\"auto, (max-width: 319px) 100vw, 319px\" \/><\/a><\/p>\n<p>Der Quarz muss wirklich gut verbunden sein, sonst erh\u00e4lt man fortlaufend nur Fehlermeldungen der Art:<\/p>\n<pre>\r\navrdude: stk500_recv(): programmer is not responding\r\navrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x36\r\navrdude: stk500_recv(): programmer is not responding\r\navrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x36\r\navrdude: stk500_recv(): programmer is not responding\r\navrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x36\r\navrdude: stk500_recv(): programmer is not responding\r\navrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x36\r\navrdude: stk500_recv(): programmer is not responding\r\navrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x36\r\navrdude: stk500_recv(): programmer is not responding\r\navrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x36\r\navrdude: stk500_recv(): programmer is not responding\r\navrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x36\r\navrdude: stk500_recv(): programmer is not responding\r\navrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x36\r\navrdude: stk500_recv(): programmer is not responding\r\navrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x36\r\navrdude: stk500_recv(): programmer is not responding\r\navrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x36\r\n<\/pre>\n<p>Und man sollte beim als ISP verwendeten Arduino nicht vergessen, zwischen GND und RESET einen 10 Micro-Farad-Kondensator einzusetzen, da dieser sonst immer wieder zur\u00fcckgesetzt wird.<\/p>\n<p>In der Arduino-IDE den ZIEL-Arduino ausw\u00e4hlen (Hier: ATMEGA328P-PU = Arduino Uno) und als Programmer auf &#8222;ArduinoISP&#8220; umstellen. Dann kann man mit &#8222;Bootloader brennen&#8220; hoffentlich das blinken des Arduinos sehen und nach wenigen Sekunden ist der Bootloader fertig gebrannt. Da ich hiernach eine Menge unn\u00f6tiger Zeit mit einer Fehlersuche vertan hatte, hier noch der wichtige Tipp, dass man den Quell-Arduino (den man als ISP einsetzt) am Ende, also nach fertigem Brennen noch einmal in den RESET schickt. Aus irgendeinem Grund hatte bei mir der ATMEGA328P sonst in einer Breadboard-Anordnung keinerlei Anstalten gemacht, das Bootloader-Blinken zu Beginn von sich zu geben, noch irgendein Programm via RX\/TX anzunehmen.<\/p>\n<p>Noch ungel\u00f6stes Problem: Nur nach einem manuellen (!) Reset akzeptiert der ATMEGA328P ein neues Programm aus der Arduino-IDE via RX\/TX.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Zun\u00e4chst einmal braucht man f\u00fcr die Programmierung der ATMEGA328P-PU einen &#8222;normalen&#8220; Arduino. Ich habe mir bei ebay f\u00fcr wenig Geld aus Hong Kong einen Arduino-Klon besorgt. Es handelte sich dabei um einen &#8222;Pro.mini.328P&#8220; (&#8222;New Pro Mini atmega328 Board 5V 16M Arduino Compatible Nano NEW&#8220;). Das Ger\u00e4t war ohne USB-Header ausgestattet, also musste ich zun\u00e4chst noch &hellip; <a href=\"https:\/\/www.anginf.de\/?p=386\" class=\"more-link\"><span class=\"screen-reader-text\">Minimal-Arduino selbst bauen: Bootloader auf ATMEGA328P-PU<\/span> weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-386","post","type-post","status-publish","format-standard","hentry","category-allgemein"],"_links":{"self":[{"href":"https:\/\/www.anginf.de\/index.php?rest_route=\/wp\/v2\/posts\/386","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.anginf.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.anginf.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.anginf.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.anginf.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=386"}],"version-history":[{"count":10,"href":"https:\/\/www.anginf.de\/index.php?rest_route=\/wp\/v2\/posts\/386\/revisions"}],"predecessor-version":[{"id":443,"href":"https:\/\/www.anginf.de\/index.php?rest_route=\/wp\/v2\/posts\/386\/revisions\/443"}],"wp:attachment":[{"href":"https:\/\/www.anginf.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=386"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.anginf.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=386"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.anginf.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=386"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}