Arduino als ISP-Programmer

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 Mikrocontroller-Typen 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.

ArduinoISP Sketch laden

Verkabelung zum Ziel-Mikrocontroller

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

Arduino PinISP-FunktionFarbe im Beispiel
D13SCKgelb
D12MISOgrün
D11MOSIorange
D10RESETweiß

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 10 kΩ Widerstand dient als Pull-Up für den Reset des Ziel-Mikrocontrollers.

Foto vom Aufbau auf einer Steckplatine

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:

Fuse-Bits des ATtiny85 mit avrdude auslesen
1
2
avrdude -p t85 -c arduino -P /dev/ttyUSB0 -b 19200 -v -E noreset -F \
-U lfuse:r:-:i -U hfuse:r:-:i