Startseite

ISP Programmieradapter

Ein 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.

Diese Seite beschreibt ISP Programmieradapter, da alle von mir empfohlenen AVR Mikrocontroller eine ISP Schnittstelle haben. Es gibt aber auch Modelle mit anderen Programmierschnittstellen, für die du ggf. einen anderen 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.

USB Treiber

Manche Geräte haben einen virtuellen COM Port, andere werden über einen generischen USB Treiber angesprochen.

Linux

Virtuelle COM Ports

Linux enthält standardmäßig die Treiber für alle virtuellen COM Ports. Die virtuellen COM-Ports heissen /dev/ttyUSB0, /dev/ttyACM0, oder so ähnlich. Als root Benutzer kannst du den Befehl sudo dmesg -T direkt nach dem Anstecken des USB Kabels benutzen, um den Namen des virtuellen COM Portes heraus zu finden.

Normale (nicht root) Benutzer müssen Mitglied der Gruppe "dialout" sein, um diese Ports benutzen zu dürfen.

Geräte ohne COM Port

Programmieradapter ohne (virtuellen) COM Port werden in der Regel durch den libusb Treiber angesprochen, der in jeder Standardinstalltion enthalten ist.

Um normalen (nicht root) Benutzern Zugriff zu gewähren, legt man typischerweise eine "udev-rule" an. Mit Google wirst du entsprechende Beispiele passend für deinen Programmieradapter finden.

Windows

Virtuelle COM Ports

USB Geräte mit virtuellem COM Port lösen beim Anstecken die Installation des Treibers passend zum USB Chip aus. Viele Treiber kann Windows 10 automatisch finden, nur den CH340/CH341 muss man manuell installieren. Für alte und gefälschte PL2303 Chips siehe dort.

Du kannst im Gerätemanager beobachten, welcher COM Ports erscheint, sobald du das Gerät anschließt. Dort werden auch Fehlermeldungen angezeigt, falls der Treiber nicht geladen werden konnte.

Geräte ohne COM Port

WCID kompatible Programmieradapter werden automatisch vom winusb Treiber unterstützt, der im Lieferumfang von Windows enthalten ist. Für die anderen Programmieradapter braucht man meistens den älteren libusb-win32 Treiber. Software von Atmel verwendet hingegen den eigenen Jungo Treiber. Man kann alle drei Treiber problemlos parallel installieren.

Programme, die mit der Bibliothek libusb v1.0.9 von 2012 (oder neuer) erstellt wurden, unterstützen sowohl den alten libusb-win32 als auch den neuen winusb Treiber. Ältere Programme mit libusb unterstützen nur den alten libusb-win32 Treiber.

Programmieradapter

Hier stelle ich ein paar gängige Programmieradapter vor. Die Liste ist nicht vollständig.

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, Arduino 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.

Der Atmel AVRISP mkII unterstützt AVR Mikrocontroller mit ISP, TPI und PDI Schnittstelle.

Er wird vom AVR Studio 4, Atmel/Microchip Studio 7, Arduino und Avrdude unterstützt. Die MPLAB X IDE unterstützt diesen Programmieradapter nicht.

Atmels Software installiert den benötigten Jungo Treiber gleich mit. Für andere Programme brauchst du unter Windows den libusb-win32 Treiber. Linux geht ohne Treiber-Installation.

Originale gibt es nur noch gebraucht zu kaufen, aber es werden kompatible Nachbauten angeboten. Manche Geräte die so aussehen enthalten allerdings 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 JTAGICE 3" 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 Adapterkabel angewiesen ist.

Der Atmel ICE wird von Atmel/Microchip Studio 7 und der MPLAB X IDE voll unterstützt. Arduino und Avrdude können den Atmel ICE nur zum Programmieren von AVR nutzen, jedoch nicht zum Debuggen.

Atmels Software installiert den benötigten Jungo Treiber gleich mit. Für andere Programme brauchst du unter Windows den libusb-win32 Treiber. Linux geht ohne Treiber-Installation.

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. Mit seiner originalen Firmware unterstützt er die PIC, PIC32 und dsPIC Mikrocontroller von Microchip. Man kann mit der MPLAB X IDE auf eine andere Firmware wechseln, welche AVR Mikrocontroller mit DebugWire, ISP, JTAG, TPI, PDI, UPDI, sowie SAM ARM Controller mit SWD und JTAG unterstützt.

Der MPLAB Snap verwendet unter Windows den winusb Treiber. Linux geht ohne Treiber-Installation. Er kann man mit Avrdude und der MPLAB X IDE benutzt 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

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, Arduino und Avrdude. Der zugehörige Treiber für den virtuellen COM Port wird nur unter Windows 7 und 8 benötigt. Windows 10 enthält bereits einen passenden Treiber.

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, Arduino und Avrdude. Atmels Software installiert den benötigten Jungo Treiber gleich mit. Für andere Programme brauchst du unter Windows den libusb-win32 Treiber. Linux geht ohne Treiber-Installation.

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

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 meistens ein Adapterkabel. Bei meinem habe ich vier 180 Ohm Widerstände in die Signal-Leitungen eingefügt, welche meine 3,3 Volt Schaltungen vor Überspannung beschützen.

Für Mikrocontroller mit weniger als 4 MHz Systemtakt muss man die Übertragungsrate reduzieren, was je nach Firmware unterschiedlich gemacht wird:

Der USBASP ist zu keinem anderen Programmieradapter kompatibel. Die Software von Atmel und Microchip unterstützt den USBASP nicht. Du kannst ihn aber mit Avrdude und der Arduino IDE benutzen.

Unter Windows brauchst du normalerweise den libusb-win32 Treiber. Es gibt eine modifizierte Firmware Version, die den winusb Treiber unterstützt. Linux geht ohne Treiber-Installation.

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. Der Download für Windows ist dort.

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 COM3 -B16 -p attiny2313
Atmel AVRISP mfkII, Diamex AVR-Prog avrdude -c avrispmkii -B16 -p attiny2313
Atmel ICE avrdude -c atmelice_isp -B16 -p attiny2313
MPLAB Snap avrdude -c snap_isp -B16 -p attiny2313
USBASP avrdude -c usbasp -B16 -p attiny2313
ICprog-AVR2.0 avrdude -c avr910 -P COM3 -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 COM3 -b 115200 -p atmega328
Arduino Uno als ISP Programmieradapter avrdude -c stk500v1 -P COM3 -b 19200 -p attiny2313

Alte Avrdude Versionen erfordern unter Windows für zweistellige COM-Port Nummern die besondere Schreibweise "-P \\.\COM10".

Beispiel für einen virtuellen COM Port unter Linux: "-P /dev/ttyUSB0".

Bei USB Geräten ohne virtuellen COM Port gibt man "-P usb" an oder lässt den Parameter ganz weg.

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.

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 und Bootloader, die PC seitig mit dem AVROSP Protokoll (= AVR 910/911) kommunizieren, kann man auch das Windows Programm Avr-Osp II 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: