Ein Arduino kann recht einfach auch als ISP-Programmer für andere Mikrocontroller verwendet werden. Dabei kommt die serielle SPI-Schnittstelle zum Einsatz.

Mit Hilfe eines ISP-Programmers ist es möglich, diverse Mikrocontrollertypen zu programmieren. ISP steht dabei für In-System-Programming, was so viel bedeutet, wie dass der Controller direkt im Einsatzsystem programmiert werden kann.

 

Im folgenden Beispiel verwende ich einen Arduino Nano zum Programmieren eines ATtiny85 Controllers. Es können natürlich auch andere Arduinos und andere Mikrocontroller (z.B. ATMega8, ATMega328, ATMega64, etc.) verwendet werden.

 

Arduino vorbereiten

Damit der Arduino als ISP-Programmer eingesetzt werden kann, muss dieser erst selbst entsprechend programmiert werden.

Hierfür ist in der Arduino IDE bereits das Beispiel “ArduinoISP” enthalten, welches lediglich geöffnet und über USB auf den Arduino geladen werden muss.

 

Verkabelung zum Ziel-Mikrocontroller

Die Verkabelung zum Ziel-Mikrocontroller erfolgt nach dem folgenden Muster.

Arduino Pin ISP-Funktion Farbe im Beispiel
D13 SCK gelb
D12 MISO grün
D11 MOSI orange
D10 RESET weiß

 

Der Kondensator dient als Puffer für den Reset des Arduinos selbst, da der Arduino sonst beim Programmieren des Ziel-Mikrocontrollers oftmals resettet wird und damit das Programmieren fehlschlägt. Ich habe hier einen 22µF Elko verwendet, da dieser mir als erstes in die Hände fiel. Andere Kondensatoren in dieser Größenordnung sollen den gleichen Effekt haben.

Der Widerstand dient als Pull-Up für den Reset des Ziel-Mikrocontrollers.

 

 

Programmieren des Ziel-Mikrocontrollers

Arduino IDE

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.

avrdude

Bei Verwendung von avrdude über die Kommandozeile sind die folgenden Parameter anzugeben:

  • Programmer: -c arduino oder -c stk500v1
  • Port: -P /dev/ttyUSB0
  • Baud: -b 19200

Zum Lesen der Fuse-Bits des ATtiny85 würde der komplette avrdude-Befehl dann so aussehen:

avrdude -p t85 -c arduino -P /dev/ttyUSB0 -b 19200 -v -E noreset -F -U lfuse:r:-:i -U hfuse:r:-:i