Startseite

ISP Programmieradapter

Der ISP Programmerieradapter dient dazu, das selbst geschriebene und compilierte Programm in den Flash Speicher des Mikrocontrollers zu übertragen. Für Arduino Boards brauchst du keinen Programmerieradapter, denn sie sind mit einem Bootloader ausgestattet. Trotzdem haben sie einen entsprechenden Anschluss, falls der Bootloader mal versagt.

Alle von mir empfohlenen AVR Mikrocontroller haben eine ISP Schnittstelle. Es gibt aber auch Modelle mit anderen Programmierschnittstellen, für die du andere Programmieradapter brauchst.

Pinbelegung

Auf der Platine der Zielschaltung verwendet man in der Regel eine doppelreihige Stiftleiste im 2,54 mm Raster. Es gibt zwei Standard-Stecker für ISP. Der alte hat 10 Pins, der neue hat 6 Pins.

ISP Pinbelegung

Diese Pins muss man 1:1 verbinden. Außerdem braucht der Mikrocontroller eine Stromversorgung, die mit einem Abblock-Kondensator (z.B. 100 nF) stabilisiert wird.

Geräte

Atmel STK500

Das STK500 von Atmel ist ein altes Experientierbrett für zahlreiche AVR Mikrocontroller im DIL Format. Ich erwähne es hier, weil dieses Board für zahlreiche Programmieradapter als Vorlage diente. Man kann es sogar noch kaufen.

STK500

Das STK500 hat zum PC hin einen seriellen RS232 Anschluss, dahinter kommt ein fest aufgelöteter Mikrocontroller, der mit der ISP Schnittstelle des zu programmierenden Mikrocontrollers (dem Target) verbunden ist.

Die meisten STK500 kompatiblen Boards haben anstelle der RS232 Schnittstelle einen USB-UART Chip, dessen Treiber einen virtuellen COM Port bereit stellt.

Das Board wird vom AVR Studio 4, Atmel/Microchip Studio 7, und Avrdude unterstützt. Die MPLAB X IDE unterstützt dieses Board nicht.

Atmel AVRISP mkII

Der Atmel AVRISP mkII ist mein lieblings Programmieradapter, weil er sehr robust ist und den ganzen Versorgungsspannungsbereich von 1,6 bis 5,5 Volt unterstützt. Debuggen kann man damit nicht.

Zum PC hin hat er einen USB Anschluss. Anders als das STK500 wird er jedoch nicht über einen (virtuellen) COM Port angesprochen, sondern direkt über USB. Die Atmel IDEs benutzen dazu den Jungo Treiber (wird zusammen mit der IDE installiert), während andere Windows Programme meist die Installation des generischen libusb Treibers erfordern. Für Linux und Mac OS ist kein Treiber nötig.

Der Atmel AVRISP mkII unterstützt AVR Mikrocontroller mit ISP, TPI und PDI Schnittstelle. Er wird vom AVR Studio 4, Atmel/Microchip Studio 7, und Avrdude unterstützt. Die MPLAB X IDE unterstützt diesen Programmieradapter nicht.

Originale gibt es nur noch gebraucht zu kaufen, aber es werden kompatible Nachbauten angeboten. Manche Geräte die so aussehen enthalten jedoch gar keinen AVRISP mkII, sondern sind zum STK500 kompatibel.

Atmel ICE

Wer AVR Mikrocontroller nicht nur programmieren sondern auch debuggen wollte, musste lange Zeit diesen teuren Atmel ICE verwenden. Bitte verwechsele dieses Produkt nicht mit den älteren "AVR JTAG ICE" und "AVR JTAGICE mkII".

Atmel ICE

Der Atmel ICE unterstützt alle AVR Mikrocontroller mit ISP, DebugWire, JTAG, TPI, PDI und UPDI Schnittstelle. Außerdem unterstützt er einige SAM ARM Controller mit SWD und JTAG. Er unterstützt den vollen Versorgungsspannungsbereich von 1,6 bis 5,5 Volt.

Die Anschlüsse des Gerätes haben 1,27 mm Raster, so dass man auf spezielle Adaptekabel angewiesen ist.

Der Atmel ICE wird vom Atmel/Microchip Studio 7 und der MPLAB X IDE seit Version 5.05 unterstützt. Die Arduino IDE und Avrdude unterstützen ihn ebenfalls, aber nur als Programmieradapter ohne debugging. Dazu ist unter Windows die Installation des generischen libusb Treibers erforderlich. Für Linux und Mac OS ist kein Treiber nötig.

AVR JTAGICE mkII

Hierbei handelt es sich um ein problematisches Produkt, dass nur noch in gefälschter Form aus Asien vertrieben wird. Die guten Originale wurden zuletzt 2016 produziert. Zahlreiche Leute haben berichtet, dass ihr Nachbau nicht funktioniert. Zudem besteht der Verdacht, dass das Atmel Studio die gefälschten Geräte erkennt und unbrauchbar macht.

Microchip MPLAB Snap

Von der Firma Microchip gibt es den MPLAB Snap, mit dem man so ziemlich alle Mikrocontroller dieser Firma programmieren und auch debuggen kann.

Microchip MPLAB SNAP

Der MPLAB Snap arbeitet mit Spannungen von 1,4 bis 5 Volt. Er unterstütz inzwischen die meisten von Atmel geerbten AVR Mikrocontroller mit ISP, DebugWire und JTA, sowie SAM ARM Controller mit SWD und JTAG. Nach einer Modifikation kann er auch TPI, PDI und UPDI. Mit einer anderen Firmware unterstützt er außerdem die PIC, PIC32 und dsPIC Mikrocontroller von Microchip.

Der MPLAB Snap kann ausschließlich mit der MPLAB X IDE verwendet werden.

Diamex

Von der Firma Diamex gibt es einige recht gute Programmieradapter ohne Debugger Funktion, zum Beispiel diese:

Diamex USB-ISP Stick Diamex AVR-Prog

Beide Programmieradapter können die Zielschaltung optional mit 3,3 V und 5 V aus dem USB Kabel versorgen.

Der "Diamex USB ISP Stick" passt sich flexibel an die Versorgungsspannung der Zielschaltung an. Der Stick ist voll kompatibel zum Atmel STK500, AVR Studio 4, Atmel/Microchip Studio 7, und Avrdude. Der zugehörige Treiber wird nur unter Windows 7 und 8 benötigt.

Der größere "Diamex AVR-Prog" Adapter kann nur mit 3,3 V und 5 V programmieren. Dafür unterstützt er neben ISP auch TPI und PDI Schnittstellen. Der Adapter ist voll kompatibel zum Atmel AVRISP mkII, AVR Studio 4, Atmel/Microchip Studio 7 und Avrdude. Unter Windows wird der libusb Treiber benötigt. Für Linux und Mac OS ist kein Treiber nötig.

Die MPLAB X IDE unterstützt keinen Programmieradapter von Diamex.

USBASP

Der USBASP ist ein alter Programmieradapter von Thomas Fischl. Er beschränkt sich auf das Programmieren von AVR Mikrocontroller mit ISP Schnittstelle, ohne Debugging.

Zahlreiche chinesische Händler bieten Nachbauten zu einem sehr geringen Preis an. Sie können den Mikrocontroller wahlweise mit 3,3 oder 5 Volt versorgen, aber ihre Signale haben trotzdem immer 5 Volt Pegel, was ich für einen groben Designfehler halte. Wegen dem veralteten 10 poligen Anschluss braucht man einen Adapter. Bei der Gelegenheit habe ich vier 180 Ohm Widerstände in die Signal-Leitungen eingefügt, welche meine 3,3 Volt Schaltungen vor Überspannung beschützen.

Die Umschaltung der Übertragungsrate wird je nach Firmware unterschiedlich gehandhabt:

Der USBASP ist nicht zu keinem anderen Programmieradapter kompatibel, daher wird er von den Entwicklungsumgebungen von Atmel/Microchip nicht unterstützt. Er wird aber von der Arduino IDE und von Avrdude unterstützt.

Unter Windows wird der libusb Treiber benötigt. Für Linux und Mac OS ist kein Treiber nötig.

Avrdude

Avrdude von Joerg Wunsch ist ein sehr weit verbreitetes Bedienprogramm für viele ISP Programmieradapter. Sogar die Arduino IDE benutzt es als Unterprogramm. Avrdude wird über Komandozeilen-Parameter gesteuert, aber es gibt auch grafische Benutzeroberflächen dazu.

Linux Benutzer finden das Programm im Paketmanager ihrer Distribution.
Download für Windows: avrdude-6.3-mingw32.zip

Die richtigen Kommandozeilen-Optionen findet man schnell mit Google, indem man nach dem Namen des Programmieradapters und "Avrdude" sucht. Beispiele:

Programmieradapter Befehl
Atmel STK500, Diamex USB-ISP Stick avrdude -c stk500 -P COM6 -B16 -p attiny2313
Atmel AVRISP mfkII, Diamex AVR-Prog avrdude -c avrispmkii -P usb -B16 -p attiny2313
USBASP avrdude -c usbasp -P usb -B16 -p attiny2313
ICprog-AVR2.0 avrdude -c avr910 -P \\.\COM10 -b 115200 -p attiny2313
Arduino Boards mit altem Bootloader avrdude -c arduino -P COM3 -b 57600 -p atmega328
Arduino Boards mit neuem Bootloader avrdude -c arduino -P COM4 -b 115200 -p atmega328

Bei Programmieradaptern, die im Gerätemanager mit einem virtuellen COM Port erscheinen, muss man diesen hinter -P angeben. Zweistellige COM Port Nummern muss man wie im Beispiel mit COM10 schreiben. Bei Geräten ohne COM Port gibt man "-P usb" an.

Unter Linux heißen die seriellen Ports /dev/ttyUSB0 oder so ähnlich. Im Zweifelsfall hilft die Ausgabe vom Befehl sudo dmesg, wenn man ihn direkt nach dem Einstecken des USB Steckers eintippt. Unter Umständen brauchen Linux Benutzer Root Rechte, damit sie auf USB Geräte zugreifen dürfen (sudo avrdude ... eingeben).

Der Parameter -B16 reduziert die Geschwindigkeit der Kommunikation zwischen Programmieradapter und Mikrocontroller. Ohne diesen Parameter würde er den standardmäßig mit nur 1Mhz getakteten Mikrocontroller überfordern. Je größer die Zahl, umso langsamer die Kommunikation. Der Parameter wird von manchen Programmieradaptern ignoriert.

Der Parameter -p ... gibt an, welcher Mikrocontroller-Typ angeschlossen ist.

So teste ich Avrdude mit einem Atmel AVRISP mkII unter Ubuntu Linux:

Avrdude liest die Signatur und die Fuses des Mikrocontrollers aus. Wenn Avrdude (wie in diesem Fall) meckert, dass die Signatur falsch sei, dann hat man entweder den Mikrocontroller-Typ falsch angegeben, oder die Übertragung zwischen Programmieradapter und Mikrocontroller ist gestört. Die häufigsten Ursachen für gestörte Übertragungen sind:

Wenn du so weit bist, dass Avrdude die Signatur erfolgreich ausliest, kannst du versuchen, den Programmspeicher zu beschreiben. Dazu gibt es weitere Kommandozeilen-Parameter. Aber mache das besser mit Hilfe einer GUI, einem Script oder dem Makefile, nicht manuell.

Als GUI empfehle ich AVR8 Burn-O-Mat, welches eine Java Runtime in Version 8 oder neuer benötigt. Oder alternativ AVRDUDESS, welches in .NET programmiert wurde und unter Linux mit "mono" ausgeführt werden kann.

Avr-Osp II

Für ISP Programmieradapter, die PC seitig mit den Protokollen AVR910, AVR911, AVRISP, AVROSP und AVROSPII kommunizieren, kann man auch das Windows Programm Avr-Osp II .547 benutzen. Zur russischen Webseite des Autors geht es hier lang.

AVR Modelle mit ISP

Ich empfehle ich diese AVR Modelle:

Diese 7 Reihen gehören zu den klassischen AVR Mikrocontrollern der zweiten Generation, mit ISP Schnittstelle zum Programmieren und DebugWire zum Debuggen. Die Buchstaben hinter der Modellnummer bedeuten: