Microcontroller flashen: Arduino Uno als In-System-Programmer

Die Arduino-Plattform hat sich in der Bastlerszene unter anderem auch deshalb durchgesetzt, weil man keine speziellen Adapter benötigt, um ein Programm in den Flash-Speicher des Mikrocontrollers zu schreiben. Praktischerweise lässt sich der Arduino sogar selbst als Universal-Programmieradapter nutzen, um einzelne Mikrocontroller wie AVRs und PICs zu flashen.

Lesezeit: 12 Min.
In Pocket speichern
vorlesen Druckansicht Kommentare lesen 2 Beiträge
Arduino Uno als Programmer für PIC
Von
  • Daniel Bachfeld
Inhaltsverzeichnis
  • Arduino Uno
  • Breadboard
  • Drahtbrücken
  • Elko, 10µF

Ein Arduino eignet sich fürs Prototyping bestens. Mit mehr als 20 Euro ist der stationäre Einsatz in einer Schaltung allerdings nicht ganz billig, vor allem wenn ein ATmega für ein paar Euro und ein paar weitere Bauteile ausreichen würden. Während beim Arduino der Bootloader über die herkömmliche serielle Schnittstelle (via USB2Serial-Wandler) mit einem PC spricht, programmiert man einen "nackten" ATmega in der Regel direkt "In System" über sein Serial Peripheral Interface (SPI). Ein normaler PC unterstützt zwar die normale asynchrone, serielle RS232-Schnittstelle, jedoch nicht die synchrone SPI. Deshalb benötigt man einen Übersetzer – einen Programmer. Die Bandbreite reicht dabei von billigen Modellen wie den USBasp über den "AVR ISP" bis hin zu ganzen Evaluierungsboards wie dem STK500 beziehungsweise STK600.

Die Arduino-IDE unterstützt verschiedene externe Programmer. Auch der USBasp findet sich neben dem hauseigenen ArduinoISP.

Zum Flashen des Controller-Speichers arbeitet der externe Programmer als sogenannter Master, der den Atmel-Prozessor (Slave) steuert. Über die Reset-Leitung RST (Low) bringt er den Atmel in den programmierbereiten Zustand. Den Takt für die Datenübertragung gibt der Master über die Leitung SCK vor. Über die Leitung MOSI (Master Out, Slave in) sendet er Befehle an den Slave, die in der Regel aus vier Bytes bestehen. Das erste Byte signalisiert die gewünschte Operation und den Zielspeicher, etwa ob in das Flash oder das EEPROM geschrieben werden soll. Die Bytes zwei und drei enthalten die Speicheradresse; zuletzt kommt das Datenbyte.

Die Arduino-IDE bringt in den Beispielen bereits den Sketch für ArduinoISP mit. Den muss man zuerst per Upload in der Arduino übertragen.

Über die Leitung MISO (Master In, Slave Out) kann der Programmer hingegen nach Übermittlung des passenden Befehls Daten auslesen. Zwischen den Operationen sind gewisse Pausen einzuhalten. Genauere Details zum Ablauf beschreibt Atmel in seiner frei verfügbaren Application Note AVR910 [PDF]. Diese haben die Arduino-Entwickler genutzt, um mit ihren Boards einen AVR-Programmer nachzubilden. Auf diese Weise kann man im ersten Schritt mit einem Arduino sein Programm austesten und im zweiten Schritt denselben Arduino (mit einem anderen Sketch) nutzen, um das Programm in einen externen ATmega zu brennen.