Arduino: Atmel-Flash-Station



Endlich mal nicht immer Arduinos verbauen:
Immer wenn ich ein Projekt beinahe abgeschlossen habe, ärgere ich mich, dass wieder mal ein Arduino irgendwo verbaut ist, der Unmengen an Platz verbraucht und eigentlich total unnötig ist. Ein kleinerer Stand-Alone-Controller reicht meistens völlig aus. Zum Prototypen ist die kleine Platine natürlich super, aber wenn alles fertig gebaut ist, dann nimmt das PCB einfach nur enorm viel Platz in der Höhe weg, den man anders hätte nutzen können. Zum Beispiel mit weniger Gehäuse.

Nach etwas Recherche, wie man einen Mikrocontroller mittels Arduino selbst beschreiben kann, ging es direkt zu Conrad, um ein paar Bauteile zu kaufen, die man für das Unterfangen so braucht:

Das stöpselt man dann so auf's Steckbrett:



Wichtig ist vorallem der 10μF Kondensator zwischen Reset und GND. Ohne den war ich nicht in der Lage auch nur einen Controller zu flashen.
Hinweis: Zum Beschreiben des Arduinos, muss der Kondensator jedoch entfernt werden, sonst passiert da nämlich gar nix mehr.

Leider sieht das bei mir in Wirklichkeit immer ziemlich wüst aus und gar nicht so, wie auf der obigen Skizze:

Das Mapping der Ausgänge des Atmegas ist wie folgt:


Nun muss der ISP-Sketch zuerst mal auf den Arduino. Der Sketch ist direkt in den Beispielen unter "Datei -> Beispiele" zu finden:


Das funktioniert wie gewohnt:
Unter "Werkzeuge" die Platine auswählen, den richtigen Port anklicken und hochladen.


Jetzt muss die Arduino IDE angepasst werden, damit der Atmel aus Board auch auswählbar ist.
Dazu öffnet man im Editor seines Vertrauens die boards.txt
Diese Configdatei liegt (logischerweise) im Arduinoverzeichnis unter:

Arduino\hardware\arduino\avr\boards.txt

Anscheinend wurde irgendwann am Parsing der Datei etwas verändert, zumindest funktionierten bei mir etliche Beispiele aus dem Netz nicht (mehr). Nach ein bisschen Rumprobieren und lesen, kam ich zu folgender Config:

##############################################################

atmegasa16.name=ATmega328P Stand Alone (Arduino as ISP)

atmegasa16.vid.0=0x2341
atmegasa16.pid.0=0x0043
atmegasa16.vid.1=0x2341
atmegasa16.pid.1=0x0001
atmegasa16.vid.2=0x2A03
atmegasa16.pid.2=0x0043

atmegasa16.upload.tool=avrdude
atmegasa16.upload.protocol=stk500
atmegasa16.upload.maximum_size=32768
atmegasa16.upload.maximum_data_size=2048
atmegasa16.upload.speed=115200

atmegasa16.bootloader.tool=avrdude
atmegasa16.bootloader.low_fuses=0xFF
atmegasa16.bootloader.high_fuses=0XDF
atmegasa16.bootloader.extended_fuses=0x05
atmegasa16.bootloader.unlock_bits=0x3F
atmegasa16.bootloader.lock_bits=0x0F
atmegasa16.bootloader.file=optiboot/optiboot_atmega328.hex

atmegasa16.build.mcu=atmega328p
atmegasa16.build.f_cpu=16000000L
atmegasa16.build.board=AVR_UNO
atmegasa16.build.core=arduino
atmegasa16.build.variant=standard

##############################################################

Dies fügt man am Ende der Config ein und speichert diese. Dannach muss die Arduino IDE neugestartet werden, um die Änderungen auch sehen zu können.
Nun taucht der Atmega, als neuer Eintrag, in der Platinenauswahl auf:


Nachdem der Atmega in der Auswahl angeklickt wurde, stellt man nun auch den Programmer auf "ISP" um:

Als nächstes muss nun der Bootloader auf den Atmega geschrieben werden. Dazu genügt ein Klick auf "Bootloader brennen" im Menü "Werkzeuge".
Eigentlich wird da gar kein richtiger Bootloader gebrannt, sondern lediglich die Fuses und die Taktrate gesetzt:


Fertig. Nun kannst du deine Sketches auf den Atmel flashen. Am besten nutzt man dazu allerdings den Punkt "Hochladen mit Programmer" im Reiter "Datei":


Hinweis: Die grüne LED leuchtet im Heartbeat; Orange als TX/RX-Anzeige beim Beschreiben und Rot im Fehlerfall.


ATtiny flashen
Den Atmega zu flashen funktioniert ja nun schonmal. Manchmal macht es aber keinen Sinn, so ein riesen Viech zu nutzen; beispielsweise, wenn man nur eine LED an/aus schalten will, oder lediglich einen Sensor auslesen möchte. Da eignen sich die kleineren Atmels viel besser:
Sie sind zwar langsamer und haben nur fünf Pinouts, sind dafür aber auch kleiner und billiger.
Um jetzt beispielsweise einen ATtiny beschreiben zu können steckt man ein paar Kabel auf'm Steckbrett um:



Die Pins des ATtiny-85 sind wie folgt angeordnet:


Will man den ATtiny zusätzlich mit einem externen Quarz betreiben, dann werden dafür die Pins 2 und 3 genutzt (zwischen Reset und Ground).
Das Flashen mittels Arduino IDE ist hier etwas "komplizierter" als mit dem Atmega. Aber auch kein Hexenwerk:
Unter "Datei -> Voreinstellungen" fügt man am Ende des Textfeldes "Additional Boards Manager URLs" folgende URL hinzu/ein:

https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json

Sollte da bereits eine URL hinterlegt sein, dann trennt man die Adressen mittels Komma.


Nun wechselt man zu "Werkzeuge -> Platine -> Boards Manager" und sucht hier nach attiny. Das Paket installiert man und startet die IDE einmal durch. Nun ist der Attiny ebenfalls in der Platinenübersicht auswählbar:

Sobald der ATtiny angeklickt ist, muss im neuen Menüpunkt noch ausgewählt werden, welchen ATtiny-Typen man nun im speziellen beschreiben will.
Im Grunde beginnt nun das gleiche Spiel:
Bootloader drauf brennen und von nun an den Arduino als ISP-Programmer nutzen.



Weil ich das Zeugs nicht so auf'm Steckbrett lassen wollte, hab ich dann alles noch auf Lochraster gelötet und das Ganze in einem schwarzem, kleinem Gehäuse versteckt:


Die Dateien zum Drucken des Gehäuses, findest du auf Thingiverse.

Je nachdem welchen Controller man beschreiben will, steckt man das Flachbandkabel um:
Die mittlere Buchse ist zum Flashen des Atmegas gedacht, die obere Buchse, logischerweise für den ATtiny.
Zusätzlich ist der Quarz austauschbar, je nachdem ob man mit oder ohne Quarz beschreiben will. Hier noch ein Einblick in meine krassen Lötkünste:



Und weil ich mal wieder ein bisschen Bock drauf hatte, gibt's von dieser Bastelei auch Video:

25 Kommentare

RoyalHeadwear schrieb am 17.10.2016 00:59:
Hey,
Ich bin gestern wegen dem Killswitch über deinen YouTube-Kanal gestolpert und hab mich dann noch am Rest festgeschaut. Ich überlege das Konzept von deinem Flasher für einem Flasher auf Raspberrybasis zu übernehmen. Jetzt bin ich hier bei deiner verkablung etwas uns schleudern gekommen. Du verbindest ja quasi den Resetpin vom Attiny/Atmega mit dem gleichen Ausgang des Arduinos der auch den Heartbeat auf die grüne LED liefert. Warum stört der Heartbeat nicht den Atmel-Controller?
flazer schrieb am 17.10.2016 09:34:
Moin.
Oh verdammt. Ne, du hast völlig Recht. So wird das Nichts. Ich hab die entsprechenden Bilder mal angepasst. Richtig ist:
RST - 10,
HB - 9,
ER - 8,
PR - 7
Du Fuchs!
RoyalHeadwear schrieb am 17.10.2016 11:29:
Hey.
Das erklärt natürlich den Salat, den das ganze in meinem Hirn verursacht hat :D . Danke auf jeden Fall für die schnelle Reaktion! Habe ich das richtig verstanden, dass du den 10nF Kondensator da nur brauchst, um dem Arduino klar zu machen, dass er nur Kram weiterleiten soll? Der würde dementsprechend bei meiner Raspberryvariante wegfallen.
Maludo schrieb am 28.10.2016 14:58:
Ich hab ne Frage: Könnte man anstatt dem 10 µF Kondensator auch nen kleineren oder größeren hernehmen?
TobinatorXXD schrieb am 28.11.2016 21:07:
Ist es notwendig den Aref Pin (21) am Atmega328p auch an die 5v Spannung anzuschließen?
Haruto schrieb am 11.12.2016 15:29:
Ich verstehe nicht, was das bedeuten soll:
Was bedeutet "flashen", was bedeutet "Beschreiben"?

"Wichtig ist vorallem der 10μF Kondensator zwischen Reset und GND. Ohne den war ich nicht in der Lage auch nur einen Controller zu flashen.
Hinweis: Zum Beschreiben des Arduinos, muss der Kondensator jedoch entfernt werden, sonst passiert da nämlich gar nix mehr."
Genderman2 schrieb am 27.12.2016 14:34:
Hi Flazer,

was ich mich immer bei deinen Videos Frage, was für ein 3D Zeichenprogramm nutzt du?
Jonny schrieb am 02.03.2017 17:25:
funktioniert die Schaltung mit einem Arduino UNO prinzipiell gleich? Ich bekomme nämlich beim Bootloader brennen den Fehler: "avrdude: verification error; content mismatch"
Chris schrieb am 02.03.2017 18:01:
Prinzipiell ja. Ist aber schon wieder länger her, dass ich mich damit beschäftigt habe.
Schau mal hier vorbei, da macht das jemand:
https://www.frag-duino.de/index.php/maker-faq/35-programmieren-eines-atmel-atmega-328p-mit-dem-arduino-uno-bootloader
Jonny schrieb am 03.03.2017 10:57:
Mensch, bin irchtig begeistert von deiner schnellen Antwort. Nach ewiger Bastelei habe ich nun immerhin den Bootloader auf dem Atmega328. Das Hochladen von Sketches klappt aber immer noch nicht. Auf der Arduino Website gibt es eine Anleitung, bei der zum Sktech hochladen der Atmega von der Arduino-Platine entfernt wird. Darauf hab ich aber eigtl. keinen Bock. Bei deiner Methode bleibt der Chip doch auf dem Arduino oder?
Jonny schrieb am 03.03.2017 11:12:
Achso, ich Depp. Du nutzt ja nen Nano. Mittlerweile scheint mir mein Problem allerdings mehr ein Software-Problem zu sein. Hab das Gefühl, dass die Arduino IDE nicht wirklich Lust auf ISP hat.
Jonny schrieb am 03.03.2017 12:46:
Na super, jetzt hatte ch gerade das erste Sketch auf dem 328p zum laufen bekommen...ich versuche ein neues Programm draufzuladen....nur die Rote "Error" LED leuchtet noch und nun ist der Arduino om Computer nicht mehr zu erreichen. Wenn die Arduino ISP sich die Boardinformationen holt steht da "BN: unbekanntes board". Hab dann den atmega328p-pu auf das Arduino-board gesteckt, den ich zuvor geflasht habe. Damit wird der Arduino auch wieder als Arduino UNO erkannt. Allerding kommt beim Flashen die Fehlermeldung: "....programmer is not responding...."
Jetzt hab ich meinen Arduino glaub irgendwie zerstört xD
Jonny schrieb am 03.03.2017 13:40:
Frag mich bitte nicht wie, aber irgendwie geht jetzt alles....nachdem ich ca 10 mal die chips hin und her getauscht und usb kabel gewechselt hab (hat nichts gebracht) lies sich der original chip auf einmal wieder flashen und somit auch die anderen chips wieder mit dem booloader beschreiben.....läuft jetzt top..vielen dank
LuLive schrieb am 18.03.2017 21:17:
Wofür ist denn der Quarz gut ? Und brauch ich den zwingend ?
flazer schrieb am 19.03.2017 14:26:
Der Quarz ist dafür da, um den Takt zu halten. Der interne Taktgeber ist da etwas ungenau.
Ein Leser schrieb am 23.04.2017 22:53:
Mit welchem Programm erstellt du die Sachen die dein 3D Drucker drucken soll?
Ethador schrieb am 24.04.2017 21:19:
Das müsste www.tinkercad.com sein.
Ich nutze Fusion360, ist für den Hobbybereich (nicht kommerziell) kostenlos für 1 Jahr und beliebig verlängerbar.
AnthonySeitA schrieb am 18.07.2017 14:45:
english essay written filipino writers
<a href=http://writingservicestop.com/>help me with homework
</a> essay services
<a href="http://writingservicestop.com/">integrated science homework help
</a> discovery education science homework help
Cuba schrieb am 23.07.2017 23:54:
Hi,
Ich versuche jetzt schon seit Wochen die Atmel-Flash-Station nachzubauen, treffe aber leider laufend auf Probleme, nachdem ich die Meisen beheben konnte habe ich noch ein hoffentlich letztes.
Ich habe als erstes als frage welchen Editor du benutzt, ich benutze Macintosh und komme nicht so ganz klar. Du würdest mir sehr helfen, wenn du einen verlinken würdest.
RoyalHeadwear schrieb am 24.07.2017 19:01:
Hi Cuba,
der "Editor", der da auf den Screenshots abgebildet ist, ist die Arduino Entwicklungsumgebung, die man unter https://www.arduino.cc/en/Main/Software für alle gängigen Betriebssystem runterladen kann (oder direkt für den Mac: https://www.arduino.cc/download_handler.php?f=/arduino-1.8.3-macosx.zip)
Cuba schrieb am 24.07.2017 22:01:
Vielen Dank!!
@RoyalHeadwear
Cuba schrieb am 26.07.2017 10:03:
Hey, ich habe jetzt erst nachgucken können. Ich habe mein Problem leider falsch beschrieben. Tut mir leid. Ich suche nicht, wie ich angenommen hatte, den editor, sondern eigentlich nur die ´Boards.txt´für Mac. Ich habe in den arduino liberies nachgeguckt aber nichts gefunden. Ich habe natürlich auch ausführliche google-suchen gestartet, bin aber auch hier nicht zu einem Ergebnis gekommen.
flowomoto schrieb am 19.09.2017 09:59:
Hey Chris, ich hab die Schaltung als Adapter-Platine zum aufstecken auf einen Arduino Uno auf der Arbeit fräsen lassen. Vielen Dank für den Blog :) hast du damals nen Weg gehabt den Stand-Alone ATMega ohne externen Quarz zu betreiben? Also die Interne Clock zu benutzen letztendlich?
Felipesoize schrieb am 22.09.2017 09:58:
buy prescription drugs canada
<a href="http://canadianpharmacyrxbsl.com/">prescription cost comparison
</a>
canadian pharmacy online canada
<a href=http://canadianpharmacyrxbsl.com/?cialis-sans-ordonnance>cialis sans ordonnance</a>
pharmacies in canada
<a href="http://canadianpharmacyrxbsl.com/?buy-xanax-online">buy xanax online</a>
Felipeaccus schrieb am 22.09.2017 12:06:
mail order pharmacies
<a href="http://canadianpharmacyrxbsl.com/">canadian online pharmacies</a>
canadian online pharmacy
<a href=http://canadianpharmacyrxbsl.com/?ciprofloxacin-hcl-500-mg>ciprofloxacin hcl 500 mg</a>
canadian drug
<a href="http://canadianpharmacyrxbsl.com/?treatment-for-erectile-dysfunction">treatment for erectile dysfunction</a>
Name oder Nickname:
Kommentar: