Arduino ISP „Atmel Flash Station“

In vielen meiner Projekte verwende in einen Arduino als Steuereinheit, aber nicht immer wird ein Arduino Board benötigt, da diese teilweise viel zu groß sind. Ebenfalls benötigt man manchmal auch nur zwei oder drei I/O Pins, da ist dann bspw. ein ATMega328 viel zu groß und man möchte lieber einen ATtiny85 nutzen. Um diese Controller programmieren zu können verwendet man für die ATMEL Chips die SPI Schnittelle mit einem „In-System-Programmer“ (kurz ISP).

Zwar haben wir ein „AVR mkII“ hier rumfliegen, jedoch möchte ich es mir einfach machen und nur noch einen Chip sockeln (und warum nicht wieder ein kleines Projekt machen?). Das Projekt habe ich mir abgeguckt von Chris Figge, er hatte dazu auch ein Video auf YouTube gemacht sowie einen passenden Blog Eintrag geschrieben, jedoch hat er im Zuge der DSGVO leider seinen Blog offline genommen. Also habe ich mich rangesetzt und mir den passenden Schaltplan erstellt.

 

Arduino ISP Schematic

Da ich jedoch nicht nur DIP-8 und DIP-28 Atmel Mikrocontrollers hier habe, möchte ich auch gerne DIP-14 und DIP-20 flashen können. Dafür habe ich jeweils in die Datenblätter geguckt und mit angeschlossen. Ich habe mich an den „beliebtesten“ Atmel Controller orientiert, denn es gibt eine Handvoll DIP-14/20 die ich nicht flashen kann. Aus dem Original Design habe ich ebenfalls die Option mit einem externen Quarz übernommen, so kann ich bspw. den ATMega328, welcher auf dem Arduino Uno Board sitzt, auch mal mit dem Internen Quarz nutzen.
Als ISP habe ich wie Figge auch einen Arduino Nano verwendet. Auf diesem habe ich noch vor dem Einbauen mit der Arduino IDE das Beispiel 11 ArduinoISP geflasht. Dieses Sketch nimmt bei neuen Daten auf der Seriellen Schnittstelle die Daten an und sendet sie an die SPI Schnittstelle.
Der 22µF Kondensator Elko am Reset vom Arduino dient als Puffer des Arduinos selbst, da der Arduino sonst beim Programmieren des Ziel-Mikrocontrollers oftmals resettet wird und damit das Programmieren fehlschlägt.

Beispiel unterstützter Pinouts
DIP-8: ATtiny25/45/85
DIP-14: ATtiny24/44/84
DIP-20: ATtiny2313
DIP-28: ATmega48/8/88/328

Zwar hätte ich mir eine Platine für wenige Dollar machen lassen können, jedoch wollte ich nicht mehrere Tage warten. Somit habe ich alles auf einer Lochrasterplatine aufgebaut. Dem entsprechend sieht es auch aus.
Die Platine (vor allem die Unterseite) bitte nur kurz ansehen, sonst möchte man gerne noch aus dem Fenster springen ¯_(ツ)_/¯.

In der Arduino IDE muss über das Menü Werkzeuge -> Programmer -> Arduino as ISP ausgewählt werden. Dann kann der Sketch entweder durch klicken des Hochladen-Buttons bei gedrückter Umschalttaste, oder über das Menü Sketch -> Hochladen mit Programmer auf den Ziel-Mikrocontroller geladen werden.

Nach dem ersten Test, gab mir avrdude nur den Fehler „Yikes! Invalid device signature“. Nach etwas Messen hatte ich eine falsche Lötstelle gefunden (wen wundert es auch bei solch einer Unterseite), weshalb der Arduino nicht mit dem Ziel-Mikrocontroller kommunizieren konnte.

Fehlt noch ein Gehäuse um endlich die Platine zu verstecken!
Da ich nun sehr stark vom Design von Figge abweiche, konnte ich die Chance nutzen und das erste Mal mit meinen 3D-Drucker ein selbstdesigntes Gehäuse drucken. Erstaunlicherweise ging es sogar ganz gut und außer zu kleine Löcher für die Schrauben und etwas Versatz bei den Auskerbungen passte alles ohne schleifen ganz gut!

 

 

Tipp: Um den ATMega328 mit internen Quarz zu flashen gibt es einen guten Boardverwalter auf Github von carlosefr/atmega. Für die ATtiny Familie damellis/attiny.

Schreiben Sie einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert