AVR In System Programmer

Wechseln zu: Navigation, Suche

Einführung[Bearbeiten]

In-System-Programming (ISP) bedeutet, einen Mikrocontroller oder anderen programmierbaren Baustein im eingebauten Zustand zu programmieren. Dazu muss der Mikrocontroller entsprechend beschaltet sein. Das bedeutet, die benötigten Anschlüsse am Mikrocontroller müssen zugänglich und nicht ohne weitere Vorkehrungen anderweitig benutzt sein - siehe Atmel Application Note AVR042.

Atmel verwendet für ihre 8-Bit RISC Mikrocontroller zum Teil unterschiedliche ISP-Protokolle. Das bekannteste davon wird einfach als ISP bezeichnet. Insgesamt findet man:

ISP
Der Normalfall. Bei vielen, aber nicht allen AVRs teilen sich SPI- und ISP-Schnittstelle die Pins. Je nach AVR gibt es leichte Unterschiede im Protokoll. Das Protokoll für einen Typ ist im Datenblatt unter Memory Programming -> Serial Downloading beschrieben.
TPI
Tiny Programming Interface. Einige AVRs der Tiny-Serie, besonders die 6-Pin Tinys.
PDI
Programming and Debugging Interface. Die XMEGAs.
JTAG
AVRs mit JTAG Debugging-Schnittstelle lassen sich auch über JTAG in-system-programmieren.
Bootloader
Einige wenige AVRs kommen bereits mit einem einprogrammierten Bootloader. Bei diesen kann man ein zum Bootloader passendes Programm nutzen um den AVR über eine im Bootloader definierte Schnittstelle programmieren. Auf Bootloadern basierende Systeme haben ansonsten ein Henne-Ei Problem. Irgendwie muss der Bootloader einmal konventionell in den AVR programmiert werden, zum Beispiel mit ISP.

Atmels debugWire ist keine Programmierschnittstelle, sondern eine reines Debugging-Interface. Zum Programmieren verwendet man bei AVRs mit debugWire daher normalerweise ISP.

Atmel hat für die AVR 8-Bit RISC Mikrocontroller mehrere Application Notes herausgegeben, auf deren Basis eine Vielzahl von Programmiergeräten (programmer) entwickelt wurden.

Natürlich liefert Atmel auch eigene, fertige Programmiergeräte (AVRISP (mk I), AVRISP mk II, AVR-Dragon, ...), Programmiersoftware (AVRProg, AVR Studio) und Entwicklungsboards mit integriertem Programmiergerät (z. B. STK500).

FAQ/Tipp: "Welchen ISP-Adapter sollte man sich zulegen oder bauen?"

Man sollte sich einen fertigen, original Atmel (keinen Clone) ISP-Adapter kaufen. Zum Beispiel für ISP (und PDI) Programmierung Atmels original AVRISP mkII für rund 36,- Euro.

Das ist eine Investition, die viel Zeit und Ärger spart, denn es geht nichts über zuverlässiges Werkzeug. Beim Umgang mit µCs ist es sehr frustrierend an drei Fronten gleichzeitig zu kämpfen:

  1. Bugs in der Software,
  2. Bugs in der Schaltung und
  3. Bugs/Probleme beim ISP-Adapter-/PC-Gespann.

Wenigstens Probleme mit dem ISP-Adapter lassen sich durch den Kauf eines zuverlässigen ISP-Adapters eliminieren. Siehe auch diverse Forenbeiträge u.a. [1] und [2].

Sehr unzuverlässig sind häufig billige oder selbstgebaute Programmierkabel mit nichts außer ein paar Widerständen. Unzuverlässig sind häufig auch billige oder selbstgebaute Programmierkabel mit einem einfachen Bustreiber. Nur weil sie bei manchen funktionieren heißt das nicht, dass sie überall problemlos funktionieren.

Parallelport- (Druckerport-) ISP-Adapter funktionieren gar nicht, wenn man sie mit einem USB <-> Druckerport Adapter an einen USB-Port am PC anschließt. Einfach (unintelligente) ISP-Adapter für die serielle Schnittstelle funktionieren gar nicht oder extrem langsam, wenn man sie mit einem USB <-> Seriell Adapter am PC anschließt. Gute intelligente serielle Programmieradapter, wie der in Atmels STK500 eingebaute, funktionieren normalerweise mit einem USB-Adapter.

Bei allen Programmieradaptern mit eigener Firmware, einschließlich der Original-Adapter von Atmel, ist man darauf angewiesen, dass der Hersteller wenn nötig Firmware-Updates bereitstellt. Bei Clones ist die Versorgung mit Firmware manchmal fraglich.

Oftmals funktionieren auch die Treiber der Clones unter 64-Bit Betriebssystem nicht richtig oder nur mit Tricks, die leider wichtige Sicherheitsfunktionen des Betriebssystem abschalten. Der AVRISP mkII funktioniert dagegen auch unter Windows 7 (64-Bit).

Application Notes[Bearbeiten]

  • AVR910 (PDF) "Low-cost" In-system programming (AVRISP) beschreibt einen einfachen, kostengünstigen Programmieradapter zur Übertragung von Programmen in den Mikrocontroller. Auf dem Programmer befindet sich ein Mikrocontroller (natürlich von Atmel ;-), der serielle Steuerkommandos und Daten vom PC in Programmiersignale für den Mikrocontroller umsetzt.
  • AVR911 (PDF) Open source serial programmer (AVROSP) beschreibt eine open source Programmiersoftware zur Übertragung von Programmen in den Mikrocontroller.
  • AVR109 (PDF) Self-Programming mit Hilfe eines Bootloaders. Hier wird im Mikrocontroller zunächst ein mikrocontroller-spezifisches Bootloader-Programm abgelegt. Dieses Programm empfängt das eigentliche Benutzerprogramm oder Daten z. B. über einen seriellen Anschluss (UART), legt es ggf. im Speicher (Flash-ROM, EEPROM) ab und führt ggf. anschliessend das Benutzerprogramm aus.

Pinbelegung[Bearbeiten]

ISP[Bearbeiten]

Die Standard-Pinbelegung des ISP-Steckers zum Anschluss des Mikrocontrollers sieht nach obigen Application Notes und der AVR042 (PDF) folgendermaßen aus (Anschluss auf der Platine, Ansicht von oben). Atmel bevorzugt dabei bereits seit Jahren den 6-poligen Anschluss.

Avr-isp-pinout.png
 10-poliger       6-poliger
 Anschluss        Anschluss
 
 1 MOSI           1 MISO
 2 VCC            2 VCC
 3 - (*)          3 SCK
 4,6,8,10 GND     4 MOSI
 5 RESET          5 RESET
 7 SCK            6 GND
 9 MISO

Pin 1 ist am Pfostenstecker mit einem kleinen Pfeil gekennzeichnet.

Um Verwechslungen zu vermeiden, empfiehlt es sich, für die einzelnen Leitungen unterschiedliche Farben zu verwenden. Atmel hat dafür keine Festlegung getroffen, so dass es keinen festen Standard gibt. Üblich ist jedoch eine Farbzuordnung wie beim guloboard:

 1 MISO  weiß
 2 VCC   rot
 3 SCK   blau
 4 MOSI  grün
 5 RESET gelb
 6 GND   schwarz

(*) Einige Programmieradapter (Ponyprog-Adapter nach Lancos-Schaltplan) unterstützen an Pin 3 des 10-poligen Steckers eine LED (Kathode an Pin), die "Programmierzugriff" signalisieren soll. Dies ist aber kaum nützlich, daher wird der Pin auch von Atmel als N/C (not connected) definiert und beim original Atmel AVRISP mit GND verbunden.

Der 10-polige Anschluss wurde von der Firma Kanda beim STK200 verwendet und ist deshalb auch als "Kanda-Standard" bekannt und war zur Zeit der STK200 Programmieradapter relativ weit verbreitet. Die Anschlussbelegung über einen 6-poligen Stecker stammt von Atmel selbst und ist platzsparender auf der Platine.

Am besten kauft oder fertigt man sich einen Adapter 6 <-> 10 (siehe [3], [4], [5], [6]), dann lassen sich praktisch alle Boards mit jedem Programmer programmieren.

Kabeloben.jpg Kabelunten.jpg Isp kab.jpg

Zehnpolige Messerleisten (Wannenstecker) zur Montage auf einer µC Platine zum verpolungssicheren Anschluss des Programmieradapters sind fast "überall" verfügbar, nach den sechspoligen muss man häufig etwas suchen. Mittlerweile sind sie endlich bei Reichelt erhältlich (WSL 6G).
Alternativ bleibt nur der Griff zu den nicht verpolungssicheren 2xN Stiftleisten (z. B. 2x40), wobei man eine Stiftleiste auf 2x3 Pole kürzt.

Sechspolige Federleisten (Pfostenbuchsen) zum Anquetschen an ein Programmierkabel sind dagegen zumindest bei den großen Versendern und Distributoren erhältlich (z. B. von Bürklin Art.53F3500; Conrad Art.701980-62; Farnell Art.1097021; Reichelt PFL 6). Kleine lokale Elektronikläden führen diese jedoch häufig nicht. Zu den sechpoligen Pfostenbuchsen gibt es keine Alternative, wenn man ein sechpoliges Programmierkabel bauen möchte. Zehnpolige Pfostenbuchsen lassen sich nicht auf sechs Pole kürzen. Korrektur: Man kann die äußeren pins ( 2 rechts, 2 links) einfach rausdrücken, dann passt der 6pol in die Buchse. Verpolungsschutz besteht weiterhin.

Je nach Programmieradapter hat der VCC-Anschluss unterschiedliche Funktionen:

1. Versorgung des Programmieradapters mit Strom aus der Schaltung, wie es bei vielen Parallelport-Adaptern der Fall ist.

2. Versorgung der Schaltung mit Strom aus dem Programmieradapter. Dies ist insbesondere beim STK500 möglich und dank dessen programmierbarer Versorgungsspannung manchmal ganz praktisch.

3. Messung der Betriebsspannung der Schaltung, so dass der Programmieradapter sich auf diese Spannung einstellen kann und so ein 3,3 V Board mit 3,3 V und ein 5 V Board mit 5 V programmiert. So wie zum Beispiel beim AVRISP mkII. Daher wird VCC auf neueren Schaltbildern auch als Vtg oder VTref bezeichnet (Atmel kann sich da nicht auf eine Bezeichnung einigen).

Je nach verwendetem Programmer muss man daher sorgfältig auf die Beschaltung von VCC/Vtg/VTref und auf die Stromversorgung von Board und Programmer achten.

TPI[Bearbeiten]

Die TPI-Programmierung setzt sich aus mehreren Schichten zusammen: Hardware (Ansteuerung der IO-Pins), Speicher-Management (stellt Funktionen zum Flashen bereit) und der Speicher selbst.

 Data  1 2 VCC
 Clock 3 4 N.C.
 Reset 5 6 GND

Standard TPI connector used on e.g. STK600 and AVRISP mkII.

PDI[Bearbeiten]

Atmel Board-Schnittstelle & AVRISP MkII[Bearbeiten]

Für Mikrocontroller-Boards schlägt Atmel einen 6-Pin Header, 2,54 mm Raster, mit folgender Pinbelegung vor (Ansicht von Oben):

DATA  1 2  VCC
N.C.  3 4  N.C.
 CLK  5 6  GND

(N.C.: Not Connected, nicht verbunden). Diese Belegung wird auch von Atmels AVRISP MkII im PDI-Modus verwendet.

Bei Atmels eigenem XPlain Eval-Kit und anderen Programmieradaptern geht es zur Zeit jedoch noch fröhlich durcheinander. Folgenden Pinbelegungen lassen sich finden.

Atmel XPlain Eval-Board[Bearbeiten]

Hier hat Atmel die Xmega PDI- und JTAG-Schnittstelle gemeinsam auf den Header J100 gelegt. Die PDI-Belegung ist wie folgt:

      1  2  GND
      3  4  VCC
      5  6  CLK
 VCC  7  8  DATA
      9 10  GND

Nur jeweils ein VCC- und ein GND-Anschluss muss verwendet werden. Es bieten sich die Pins 2 und 4 an.

Man beachte die Position von DATA auf Pin 8 bei dieser Belegung von PDI auf dem XPlain JTAG-Header.

Atmel JTAGICE MkII[Bearbeiten]

Einige sehr alte JTAGICE MkII unterstützen kein PDI. Alle neueren, in den letzten Jahren hergestellte tun es. Eventuell ist ein Firmware-Upgrade über AVR-Studio nötig.

Laut [7] und der eingebauten Hilfe von AVR Studio 4.18 SP 1 verwendet ein JTAGICE MkII im PDI-Modus folgende Pinbelegung:

      1  2  GND
      3  4  VTref
      5  6  CLK
      7  8
DATA  9 10  GND

Man beachte, dass DATA hier angeblich auf Pin 9 liegt. (VTref dürfte VCC entsprechen). In der Hilfe zu AVR Studio 4.18 SP 1 ist der Pin CLK mit PDI_CLK, und der Pin DATA mit PDI_DATA bezeichnet.

Atmel AVR Dragon[Bearbeiten]

Erst mit der Dragon-Firmware im SP 1 für AVR Studio 4.18 soll der PDI-Support des AVR Dragon funktionieren. Angekündigt war PDI-Support bereits für AVR Studio 4.18.

Leider hat Atmel es versäumt in der Dragon-Dokumentation die Pinbelegung für PDI auf der Seite des Dragon anzugeben. In der Studio-Dokumentation ist von einem ominösen Dragon PDI Adapter die Rede, der Teil des "Dragon Kit" sein soll. Allerdings wird der Dragon 'nackt' ausgeliefert und bisher gibt es keine Berichte darüber, dass jemand diesen ominösen Adapter gesehen hat. Von neueren Versionen des JTAGICE mkII ist hingegen bekannt, dass sie mit einem XMEGA PDI adapter kit geliefert werden.

Angeblich ist es nötig, beim Dragon jeweils einen 330Ω Widerstand in die CLK und DATA Leitung zu legen, um Probleme mit dem Überschwingen der Signale zu vermeiden.

Programmer-Varianten[Bearbeiten]

Mittlerweile existiert eine fast unüberschaubare Zahl von Programmer-Varianten und Untervarianten. Hier sollen nur die wichtigsten Varianten mit Bauanleitungen aufgelistet werden, geordnet nach der Art des Anschlusses an den PC.

Zur Zeit (März 2012) gibt es vermehrt Probleme, mit den neuen Varianten 5.x des AVR Studios, kompatible Programmer, die nicht von Atmel selbst hergestellt wurden, anzusteuern. Es sollte beim Erwerb/Nachbau auf die Zusicherung der Komptibilität zum gewünschen AVR Studio geachtet werden.

Parallelport[Bearbeiten]

STK200-kompatibel[Bearbeiten]

Fast alle erhältlichen Parallelport-Programmieradapter, u.a. auch der hier im Shop angebotene, sind kompatibel zum Programmer des STK200 / STK300.

Paralleles Interface für AVR und PonyProg[Bearbeiten]

Schaltplan und Erläuterungen bei Scott-Falk Hühn

SP12 Programmer[Bearbeiten]

Schaltplan, Erläuterungen und Software für mehrere Plattformen, darunter auch MSDOS, gibt es bei Steven Bolt. Ken's Dongle ist ein spezieller Kabeladapter für SP12 zur Verbesserung der Signalqualität. Anpassung an neue Typen erfolgt durch leicht selbst erstellbare Beschreibungsdateien.

Serieller Port (RS-232)[Bearbeiten]

Atmel AVRISP, STK500, AVR910[Bearbeiten]

Der original AVRISP von Atmel, das STK500 und der Programmer aus der Application Note AVR910 enthalten einen Mikrocontroller, der die Umsetzung der seriellen Daten auf das ISP- und TPI-Programmierinterface vornimmt. Sie lassen sich direkt mit dem AVR-Studio programmieren und sind auch problemlos mit einem USB-seriell-Adapter verwendbar.

Ein Layout mit Schaltplan und erweitertem Sourcecode findet sich in diesem Thread in der Codesammlung AVR910 Programmer, Schaltplan, Layout, Firmware.

Das AVR910 Design ist u.a. auf der Seite von Serasidis Vasilis im Detail beschrieben.

Eine weitere, auführliche Anleitung zum AVR910 gibt es in deutsch auf der Seite von Klaus Leidinger.

SI-Prog[Bearbeiten]

Daneben gibt es noch weitere Programmieradapter für den seriellen Port, die auf den eigenen Mikrocontroller im Programmieradapter verzichten und das ISP-Programmierprotokoll über die Steuerleitungen des RS-232-Port nachbilden. Das Programmierprogramm auf dem PC sendet jetzt keine Steuerkommandos und Daten mehr, sondern gibt direkt die Programmiersignale an der seriellen Schnittstelle aus ("Pinwackeln an den Statuspins"). Der Nachteil dieser Adapter ist, dass sie meistens relativ langsam sind und nur unter wenigen Betriebssystemen funktionieren. Ein Beispiel dafür ist SI-Prog.

Sercon2[Bearbeiten]

Mit einer etwas anderen Steckerbelegung als der SI-Prog arbeitet die Sercon Familie an Adaptern. Nähere Unterlagen dazu finden sich hier

Selbstbau-Programmer, basierend auf dem FTDI chip (via avrdude)[Bearbeiten]

http://irq5.wordpress.com/2010/07/15/programming-the-attiny10/

USB[Bearbeiten]

Die meisten USB-Programmieradapter verwenden einen USB-seriell-Wandler und ein STK500/AVRPROG-kompatibles Protokoll und können damit direkt aus dem AVR-Studio programmiert werden.

Eine Quick-and-Dirty Programmierlösung bietet der #USB-Hub-ISP, der außer einem USB-Hub nur Standard-Bauteile voraussetzt.

Atmel AVRISP MKII[Bearbeiten]

Nachfolger des Atmel AVRISP "MKI". Mit USB-Schnittstelle, leistungsfähigerem Programmiercontroller und erweitertem Hardwareschutz. Programmiersoftware: AVR-Studio und AVRDUDE. Herstellerinformation bei atmel.com

Der AVRISP MKII führt ca. 1s nach dem Einschalten der Versorgungsspannung einen Reset aus. Lässt man den Programmer beim Testen der Schaltung gesteckt und startet diese durch Einschalten von Vcc, kann dies zu unangenehmen Nebeneffekten führen. Z.B. wird eine gerade angelaufene Datenübertragung nach 1s abrupt abgebrochen, startet neu und läuft danach fehlerfrei.

Dave Jones hat im EEVblog #158 ein Videotutorial erstellt, wie man beim Atmel AVRISP "MKI" mit dem LM317 Spannungsregler 3.3V oder 5V Versorgungsspannungen für das Targetboard nachrüstet. Im Video schlägt Dave als bessere Lösung die Verwendung eines Low-Drop-Spannungsreglers vor. Dafür eignet sich z.B. der LM1117

Weiter unten auf dieser Seite wird auch ein einfacher, kompatibler Nachbau namens usbprog vorgestellt.

Atmel AT90USBKEY[Bearbeiten]

Mit hilfe des AVRISP-MKII Clone Projekts aus dem LUFA Paket wird aus dem AT90USBKEY recht einfach ein Programmer, der mit AVR-Studio und AVRDUDE genutzt werden kann.

AVRISP mkII Klon mit dem Teensy-Board und der Lufa-Bibliothek[Bearbeiten]

Mit der LUFA-Bibliothek und dem TEENSY 2.0 Board kann schnell ein AVRISP mk2 Klon gebaut werden, der auch mit AVR-Studio in Windows einwandfrei zusammenarbeitet. Weitere Infos auf weigu.lu.

AVRISP mkII Klon mit dem Atmega32U2-Breakout-Board und der Lufa-Bibliothek[Bearbeiten]

Mit der LUFA-Bibliothek (Eine Anleitung gibt es hier) und dem Atmega32U2-Breakout-Board kann problemlos ein AVRISP mkII-Klon programmiert werden. Um praktisch auf die Programmierpins zugreifen zu können gibt es dieses Addon-Board für das Breakout-Board. Der Programmer läuft problemlos mit AVR-Studio unter Windows.

Bascom USB ISP[Bearbeiten]

Beliebter USB programmer der speziell für den Bascom Compiler entwickelt wurde. Unterstützt Bascom einen neuen AVR-Controller, so kann dies automatisch auch dieser USB Programmer, eine neue Firmware ist nicht erforderlich. Ein weiterer Vorteil ist, dass er speziell für Bascom entwickelt wurde und in der IDE unterstützt wird. Er unterstützt alle Features von Bascom, auch die automatische Fusebit-Einstellung per Direktive im Quellcode.

Angenehm ist auch, dass er keine 5V benötigt. Im Gegenteil, er kann sogar Boards über das übliche ISP-Programmierkabel mit 5V versorgen, so dass viele Boards auch ohne weitere Spannungsquelle programmiert werden können. Ein wirklich empfehlenswerter Qualitätsprogrammer für alle Programmierer, die ausschließlich mit Bascom arbeiten wollen

Im Online- / Auktionshandel werden auch Alternativen angeboten, teils recht schick im Plexiglasgehäuse für ca. 20 Euro. Angeboten z. B. als "USB 2.0 Full Speed low cost Programmer für ATMEGA Chips" oder "AVR USB ISP Programmer ATMEL ATMEGA STK500". Die Adapter funktionieren auch mit BasCom (aber auch mit AVR Studio), z. B. mit der Einstellung "STK500 native driver".

Man kann die Targetspannungsversorgung per USB zwischen 3,3 und 5V umschalten oder ganz abschalten (per DIP-Schalter). Sie sind per USB an den PC angeschlossen und arbeiten über einen virtuellen COM-Port. Achtung: In BasCom funktioniert das nur bis COM9. Wenn sich das Gerät z. B. auf COM15 installiert, wird es im BasCom evtl. nicht gefunden. Dann in der Systemsteuerung entsprechend umstellen.

Atmel AVR Dragon[Bearbeiten]

Hauptartikel AVR-Dragon

Der AVR Dragon ist ein preiswerter ISP (und ICE) von Atmel, der aufgrund Preis/Leistungs-Verhältnisses schnell populär wurde. Atmel wurde von dieser Popularität überrascht, da der Dragon wohl ursprünglich nur als ein "Gimmick" zur Verbreitung von AVRs in Asien gedacht war.

Die großen Vorteile des Dragons sind, dass er alle Programmiermodi beherrscht, inklusive High-Voltage Parallel Programming ("verfuste" AVRs retten), dass er ein natives USB-Interface hat, von AVR-Studio unterstützt wird, und sogar JTAG und debugWIRE ICE / Debugging unterstützt (bei den AVRs die dies können).

Zu den größten bekannten Nachteilen gehören, dass der Dragon völlig "nackt" kommt. Kein USB-Kabel, kein Gehäuse, nicht einmal Abstandsbolzen unter der Platine, keine Patchkabel und nicht einmal die Fassungen zum Einstecken von AVRs sind bestückt. Eine gedruckte Anleitung gibt es auch nicht. Daneben wird aufgrund des Stromverbrauchs des Dragon ein USB-Hub mit Netzteil benötigt.

Weiter ist der Dragon dafür bekannt, empfindlich auf statische Aufladungen zu reagieren. Ein Spannungsregler und ein Ausgangstreiber gehen dabei besonders gerne kaputt. Ein gerne von Anfängern gemachter Fehler ist es, den Dragon im Betrieb auf dem mitgelieferten "Schaumstoff" aus der Verpackung liegen zu lassen. Das ist jedoch kein Schaumstoff, sondern leitendes Moosgummi.

Weitere Schutzmaßnahmen für gefährdete AVR Dragons findet man auf der Dragonlair-Seite von Nard Awater.

Der Dragon wird unter Linux z. B. von der avrdude-Programmiersoftware unterstützt. Unerklärlicherweise stellt Atmel die Dokumentation und Beschreibung des Dragon nur als Teil der Online-Hilfe der AVR-Studio Software unter Windows zur Verfügung. Weiterhin lassen sich Firmware-Updates auch nur mittels eine proprietären Atmel-Software unter Windows einspielen. Daher ist der Dragon für Linux-Benutzer nur dann zu empfehlen, wenn man zusätzlich noch Zugriff auf eine Windows-Installation hat.

USBisp[Bearbeiten]

AVR Programmierdongle mit USB Anschluss und kompatibel zum STK500-Protokoll. Unter anderem programmierbar mit AVR-Studio, AVRDUDE und uisp. Schaltplan (PDF), Layout (PDF), Erläuterungen und Firmware gibt es vom Entwickler Matthias Weißer.

USB avrisp[Bearbeiten]

USB AVR Programmer auf Basis des AVR 910 Designs. Den Schaltplan, Layout und Erläuterungen (englisch) gibt es von Joakim Arfvidsson.

Evertool[Bearbeiten]

Mit USB-seriell-Wandler. Getestet mit Adapterkabeln/ICs von FTDI, SiLabs und Prolific (Adapterkabel z. B. für ca. 10EUR bei Reichelt).

USBasp[Bearbeiten]

Thomas Fischls USBasp ist ein Openhardware-/Openfirmware-USB-ISP-Adapter. Er basiert auf einem ATmega8, ATmega8L, ATmega88 oder ATtiny85, der mittels einer rein auf Firmware basierenden USB-Implementierung von Objective Development arbeitet.

Bezugsquellen:

Zum Ansteuern des USBasp wird AVRDUDE in einem speziellen Modus benötigt, der ab Version 5.2 standardmäßig vorhanden ist (vorher waren Patches nötig).

Zum Programmieren von neuen ATtinys muss der Jumper Slow SCK gesetzt werden. Alternativ ist es möglich mit der zusätzlichen Option von avrdude "-B100" die Periodendauer von SCK auf etwa 100 µs oder noch länger zu vergrößern (funktioniert nur, wenn die Firmware des USBasp vom Mai 2011 oder neuer ist).

Der originale USBasp hat den Nachteil, dass er nicht die Targetspannung zum Programmieren benutzt, sondern immer seine 5V. Deshalb kann es Probleme geben, wenn das Target mit einer niedrigen Spannung versorgt wird, da der USBasp die Target-Highpegel eventuell nicht mehr als High erkennt. Abhilfe kann ein kleiner Hack schaffen, mit dem der µC wahlweise mit 5V oder mit ~3.6V betrieben wird: http://www.mikrocontroller.net/topic/109648?goto=2031524#2031524

Der Optoisolated USBASP 1.8V to 6V ist eine Hardwareänderung ebenfalls mit breitem Targetspannungsbereich und zusätzlich galvanischer Isolation über die Optokoppler 6N317 (schnelle Datenleitungen) und PC817 (langsame Resetleitung).

Manche USBasp sind umschaltbar zwischen 5 V und 3,3 V. Falls man später darüber eine Schaltung mit 3,3 Volt betreiben will – etwa zum direkten Ansprechen einer SD-Karte – lohnt gezieltes Nachfragen vor dem Kauf.

AvrUsb500[Bearbeiten]

  • AvrUsb500 - an open source Atmel AVR Programmer, stk500 V2 compatible, with USB interface
  • meCHAOS - Nachbau mit neuem Platinenlayout und weiteren Funktionen.

usbprog[Bearbeiten]

usbprog von Benedikt Sauter ist ein USB Programmieradapter, der fast alle Atmel-Mikrocontroller unterstützt (ATiny, ATMega, AT89, AT90, ...) und daneben auch für ARM7/9 und MSP universell einsetzbar ist. Unterstützung für Xmega gibt es nicht.

Der Programmer wurde so entwickelt, dass man die Firmware auf dem Adapter über die USB-Verbindung austauschen kann. Dadurch sollte der Adapter lange attraktiv bleiben, da alles rund um das Projekt als open Source veröffentlicht ist und daher neue Controller einfach in die usbprog-Firmware integriert werden können. Es ensteht gerade eine Firmware für einen einfachen JTAG-Adapter. Damit kann man dann ganz einfach debuggen (voraussichtlich auch aus dem AVR Studio aus).

Man kann den Adapter auch als 1:1 AVRISP-mkII-kompatibles Gerät betreiben. Dafür muss man eine andere Firmware einspielen, die ebenfalls Teil des Projektes ist. Der Vorteil ist der, dass man so auf jede bestehende Programmiersoftware zurückgreifen kann, die das originale AVRISP mkII unterstützt. Getestet wurde usbprog bis jetzt mit avrdude (Linux und Windows) und dem AVR Studio 4 (Windows).

Hinweis: Damit der Programmer mit AVR Studio 5.x zusammen arbeitet, muss die Firmware aktualisiert werden: http://www.usbprog.org/index.php/Firmwares (siehe Update-Hinweis)

Derzeit kann man bei der embedded projects GmbH die Versionen 3.3 und 4.0 bestellen. Näheres im Projekt-Wiki.

AVR-Doper[Bearbeiten]

AVR-Doper kann neben ISP auch im High-Voltage Serial Mode als AVR HV-Programmer programmieren. Rein auf Firmware basierende USB-Implementierung. BUS-Powered. Einseitige Platine und damit auch für Selbstbauer geeignet. Verwendet einen Mega8 zur Steuerung des Programmers. Ist kompatibel zu AVR-Studio durch STK500-Protokoll.

USB AVR-Lab[Bearbeiten]

USB AVR-Lab besteht aus einer sehr einfachen Hardware, usb wird in Software gemacht. Mit einem Bootloader nebst Applikation kann die Funktion des Lab´s zwischen

  • AVRISPmkII kompatiblem Programmer (AVR Studio, Linux, MacOS)
  • JTAGICEmkII kompatibler AVR Programmer (AVR Studio, Linux, MacOS) (keine AVR32, kein Xmega)
  • OpenOCD Interface (sehr viel ARM Controller, PLD´s, FPGA´s)
  • STK500v2 kompatiblem Programmer (AVR Studio)
  • USBasp kompatiblem Programmer (Linux, MacOS)
  • JTAG Boundary Scan Interface + Software
  • RS232/RS485 Wandler
  • I2C Logger
  • I2C Interface (zur benutzung aus eigenen Programmen)
  • Oszi
  • 6-Kanal Logik Analyzer (in Entwicklung)
  • Labornetzteil (in Entwicklung)

getauscht werden. Mit der STK500v2 kompatiblen Firmware kann der Programmer direkt aus dem AVR Studio heraus voll kompatibel zum AVR-ISP mkII arbeiten. Zusätzlich bietet der Programmer den virtuellen Com Port als Debug Port an solange nicht geflasht wird. Man kann also direkt mit dem Terminalprogramm auf seinen AVR zugreifen über den ISP Adapter. Dieser Modus wird von jeder ISP Firmware unterstützt. Statusanzeige des Targets (angeschlossen, falsch angeschlossen, nicht angeschlossen), max. 3 Mhz ISP Freq. Das Ganze ist sehr günstig in der Beschaffung (10 Eur Bauteile bei Reichelt + 3,5 Eur Platine von ullihome.de, oder 15 Eur bestückt von ullihome.de)

USBtinyISP[Bearbeiten]

USBtinyISP ist ein preiswerter (ca. 16$ für die Bauteile) AVR ISP Programmer und SPI Interface auf open-source Basis. Als Software kann z.B. AVRDUDE oder AVRStudio verwendet werden. Der Programmer wurde auf Windows, MacOS X und Ubuntu (ab 9.04) getestet. Bei Adafruit sind auch Selbstbaukits erhältlich. Eine miniaturisierte Version findet sich hier www.mikrocontroller.net/articles/AVR-ISP-Stick. Diese ist ab 6,90€ als Bausatz bei eHaJo.de erhältlich.

UCOM-IR[Bearbeiten]

Der UCOM-IR Programmieradapter ist ein kommerzieller Bausatz (ca. 25 €), der auf einem AT90USB162 basiert. Durch die Verwendung des STK500v2 Protokolls kann zur Programmierung sowohl das AVR-Studio wie auch AVRDUDE verwendet werden. Zusätzlich hat der Adapter einen IR-Empfänger und zwei Sendedioden, die zur Kommunikation und zur Fernsteuerung verwendet werden können.

Selbstbau-Programmer, basierend auf dem vUSB stack[Bearbeiten]

http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=90498

USB-Hub-ISP[Bearbeiten]

HUB ISP - Solving the USB-Only "Chicken or Egg" Problem:
HUB ISP can write an AVR chip using only a USB hub, one cheap/common logic chip, and a few resistors.
http://www.pjrc.com/hub_isp/

Launchprog[Bearbeiten]

Der Launchprog ist ein AVR-ISP-Programmer nach der Atmel AVR910-Appnote, der auf einem TI Launchpad 1.4 mit dem beiliegenden MSP430G2211 und dem beiliegenden Uhrenquarz läuft. Nach außen hin ist der Launchprog wie ein AVR910 zu verwenden. Allerdings muss die Geschwindigkeit der seriellen Schnittstelle auf 9600 Baud eingestelllt werden.
Beispiel der avrdude-Kommandozeile:
avrdude -c avr910 -b 9600 -P <PORT> -p <PART> -U <KOMMANDO>

mySmartUSB[Bearbeiten]

Der mySmartUSB Programmer von myAVR ist ein kompakter ISP Programmer mit USB Anschluss (der Preis liegt bei 28€). Lt. Hersteller kann er auch für die Kommunikation via UART, TWI, SPI verwendet werden (hab ich noch nicht probiert).

ich aber: Beim Schreiben der Fuse Bits musste ich das Tool myAVR_ProgTool.exe verwenden

Mit avrdude ist das Schreiben der Fuse-Bits mit dem AVR910-Modus möglich.

avrdude-Kommandozeile : avrdude -c avr910 -P PORT -p PART -U lfuse:w:0xFF:m -U hfuse:w:0xD9:m


Achtung: Die neuere Version (mySmartUSB MK3) scheint mit der aktuellen Firmwareversion noch große Probleme mit ISP zu haben (siehe Postings im Supportforum: http://myavr.info/myForum/viewforum.php?f=8). Solange diese Probleme nicht ausgemerzt sind, sollte man auf die ältere Version (mySmartUSB MK2) oder ein anderes Produkt ausweichen.

mySmartUSB light[Bearbeiten]

Preiswerter (ca. 15 €) Programmer im USB-Stick Design von myAVR. Der mySmartUSB light verfügt über eine Auto-Speed Funktion die die Frequenz des Programmers automatisch an die Taktfrequenz des Controllers anpasst. Der Programmer kann 5V und 3.3V Systeme programmieren, Treiber gibt es für Windows, Linux und MacOS X und unterstützt wird je nach Firmware-Version das STK500v2 oder AVR910/911 Protokoll.

Amadeus-USB[Bearbeiten]

Amadeus-USB ist ein ISP-Programmer zum Selberbauen. Er unterstützt eine Vielzahl von AVRs und verfügt über ein eigenes User-Interface. Der Programmer enthält einen einfach zu bedienenden Fuse-Editor. Sollte man einmal die falschen Clock-Einstellungen vorgenommen haben, ist das kein Problem, da der Programmer über eine Takterzeugung verfügt, mit der man den AVR wiederbeleben kann. Auch wer mit niedrigen Taktraten arbeitet (z. B. 32kHz), kann einen ATmega64 in ca. 4,8 Sekunden programmieren und vergleichen. Darüber hinaus kann mit geeigneten Makros die Programmausführung getracet werden. Die maximale Programmierdauer beträgt bei einem ATmega64 mit 16MHz Quarz 3,1 Sekunden, wenn der gesamte Speicher geschrieben und verglichen werden muss. Ist das Programm kleiner, geht es natürlich schneller ;-) Für einen ATTiny2313 oder ATTiny24 braucht er weniger als eine Sekunde.

AVR-ISP-Stick[Bearbeiten]

Der AVR-ISP-Stick ist ein OpenSource/CC-Projekt und eine sehr günstige (6,90€!) Alternative zu den restlichen Programmieradaptern auf dem Markt. Er ist als Bausatz erhältlich und bereits über 100 mal im produktiven Einsatz.

µISP-Stick[Bearbeiten]

Der µISP-Stick ist die Weiterentwicklung des AVR-ISP-Sticks. Für 9,90€ bekommt man hier einen vorbestückten Bausatz an dem nur noch die bedrahteten Stecker angelötet werden müssen.

Arduino ISP Shield[Bearbeiten]

Ein Arduino-Board kann mit dem entsprechenden Sketch und einfachen Jumperwires oder einem komfortablen Shield benutzt werden, um AVRs ohne Bootloader zu flashen. Eine Anleitung dazu wird bei www.open-electronics.org und hlt.media.mit.edu (via [8]) gegeben.

aTeVaL-Board[Bearbeiten]

Das aTeVaL-Board ist die Weiterentwicklung des Atmel Evalboards von Pollin. Damit lassen sich problemlos alle bedrahteten AVR-Controller programmieren. Der Programmer ist ein AVR-ISP-mkii-Clon und somit 100% kompatibel mit dem Atmelstudio. Für eigene Platinen ist ein 6- und 10-poliger ISP-Stecker vorhanden.

USP-Stick[Bearbeiten]

Der USP-Stick ist ein sehr kleiner Programmieradapter, der in ein USB-A-Gehäuse passt. Er beruht auf der bewährten Hardware des AVR-ISP-Sticks (attiny2313 + quarz) und ist für 4,90€ erhältlich.

guloprog USB-Programmer und Signalwandler[Bearbeiten]

Unter dem Namen guloprog wird eine kleine Platine angeboten, die einen USB-Programmer und einen Signalwandler vereint. Der Programmer wird per USB angeschlossen und meldet sich als Fischl-kompatibler usbasp.

Die Signalwandlerfunktion bietet voneinander unabhängige einfache Schalt- und Abfragemöglichkeiten für die vier sonst zum Programmieren verwendeten Anschlüsse. Jede Leitung kann per Tastatur-Kommando einen Ausgang auf 0 Volt oder auf 5 Volt setzen oder "dimmen" (PWM in Schritten von 0 bis 100%). Alle Anschlüsse können als Digital-Eingang verwendet werden, drei davon wahlweise als Analog-Eingang. Die gemessenen Werte lassen sich ebenfalls per Kommandozeile abfragen und auf diese Weise leicht in andere PC-Programme einbinden (Linux, Mac, Windows).

Herzstück ist ein ATtiny85, der im Gegensatz zu allen ATmegas und fast allen ATtinys auch über den internen RC-Oszillator mit 16 MHz betrieben werden kann. Ein Quarz ist daher nicht erforderlich. Die für V-USB erforderliche Genauigkeit erreicht der Programmer über einen Synchronisationsschritt, der bei jedem Start automatischen durchlaufen wird. Die Firmware steht unter einer freien Lizenz, es werden nur sehr wenige Bauteile benötigt, so dass sich dieser Programmer auch recht gut für den Nachbau eignet. Schaltungs- und softwaretechnisch besteht praktisch Baugleichheit zum Bierdeckel-Programmer.

Standalone[Bearbeiten]

Die folgenden Geräte verfügen über interne Speicher, auf denen der zu programmierende Maschinencode abgelegt werden kann. Zum "flashen" selbst ist keine Verbindung zwischen Arbeitsplatzrechner bzw. Notebook und Programmiergerät erforderlich.

roloFlash (kommerziell)[Bearbeiten]

roloFlash wird mit einer microSD-Karte bestückt, die die zu flashenden Daten enthält. Dadurch können unabhängig von einem PC an jedem beliebigen Ort AVR-Controller geflasht werden.

In einem ersten Schritt wird die microSD-Karte vorbereitet. Durch die auf dem roloFlash eingebaute Scriptsprache roloBasic lässt sich der gewünschte Ablauf sehr flexibel festlegen.

Nun kann roloFlash irgendwo anders ohne PC AVR-Controller flashen. Dabei geben 5 zweifarbigen LEDs Auskunft über den Fortschritt bzw. das Ergebnis des Flash-Prozesses. Fehlbedienungen sind unmöglich, da es keine Bedienelemente gibt.

Einsatzgebiete:

  • Produktion
  • Fehlbedienungssichere Updates beim Kunden

TheCableAVR-SD (kommerziell)[Bearbeiten]

TheCableAVR-SD works by saving the "ISP", "HEX" and "EEP" files required for part programming from the PC application onto an SD-Card and inserting it into TheCableAVR-SD. This programmer is stand alone, making it very handy for field software updates and production programming.

Wird 4/2012 scheinbar nicht mehr verkauft (Forumsbeitrag Priio AVR Programmer?).

ButtLoad[Bearbeiten]

ButtLoad is based on the Atmel AVR Butterfly development board. ButtLoad is specially written firmware which converts a low-cost official Atmel Butterfly evaluation board into a smart ISP programmer for other members of the Atmel AVR family. It supports the entire AVR range, and allows for a complete program (including EEP, HEX, Fuse and Lock Bytes) to be stored and later programmed into a device from the Butterfly's on board non-volatile memory.

ButtLoad basiert auf dem Atmel-AVR Butterfly-development board und ist eine spezielle Firmware, die ein (billiges) Atmel-Butterfly-Board in einen vollwertigen ISP-Programmierer für andere Controller der Atmel-AVR-Familie verwandelt. Es unterstützt den gesamten AVR-Bereich und erlaubt, ein Programm komplett mit EEP, HEX, Sicherungs- und Lock-Bytes im nichtflüchtigen on-board-Speicher des Butterflys abzulegen und dann von dort heraus die Controller zu programmieren.

PalmAVR[Bearbeiten]

ISPnub (Open Source)[Bearbeiten]

ISPnub - Stand-alone AVR In-System-Programmer Module besteht aus einem AVR in dessen Flash ein Programmierskript geladen wird. Der eigentliche Programmiervorgang wird über einen Tastendruck ausgelöst. Die Zahl der Programmierzyklen kann beschränkt werden (z.B. auf ein Fertigungslos beschränkt).

AVR-ISP500, AVR-ISP500 tiny[Bearbeiten]

von Olimex, siehe

Geschwindigkeitsvergleich[Bearbeiten]

Im Rahmen einer Forendiskussion entstand die folgende Messung, die einige der möglichen Programmer in ihrer Geschwindigkeit vergleicht. Mit einbezogen in den Vergleich wurde neben originalen Atmel-ISP-Werkzeugen noch Werkzeuge für JTAG.

Die Testdatei war 29704 Bytes groß. Target ist ein ATmega6490, der mit 8 MHz vom RC-Oszillator getaktet wird. Das alles wurde mit einem AVRDUDE 5.5 getestet.

Programmer     Parameter         Zeit fürs
                              Schreiben  Lesen
-----------------------------------------------
JTAG ICE mkII  default        2,58 s     3,27 s
JTAG           (4 MHz)
-----------------------------------------------
JTAG ICE mkII  1 MHz          8,34 s     8,51 s   (**)
ISP
-----------------------------------------------
AVRISP mkII    250 kHz        5,37 s     5,46 s
               1 MHz          2,45 s     2,45 s
               2 MHz          1,89 s     1,99 s
-----------------------------------------------
STK500         900 kHz        5,84 s     3,49 s
               (schnellstes)
-----------------------------------------------
AVR Dragon     default        2,81 s     3,49 s
JTAG           (4 MHz)
-----------------------------------------------
AVR Dragon     1 MHz          8,34 s     8,64 s
ISP            2 MHz          -          -        (*)
-----------------------------------------------
Parallelport-  keine Delay   13,20 s    12,45 s   (**)
Dongle "alf"   CPU 900 MHz
-----------------------------------------------

(*) Benutzung unmöglich, weder Fuses noch Signature zuverlässig lesbar.

(**) Fuses und Signature OK, aber das programmierte Ergebnis ist fehlerhaft (verify errors)

Software[Bearbeiten]

  • yaap (Windows, diverse Parallelport-Programmer, GUI)
  • PonyProg (Linux, Windows, diverse Programmer für den parallelen und seriellen Port, GUI, am seriellen Port nur "Statuspinwackler" nach dem Schaltplan auf der lancos-Seite)
  • AVRBurner Ponyprog ähnliche Oberfläche für AVRDUDE.
  • AVRDUDE (Unix, Linux, Windows, praktisch alle Programmer, leicht erweiterbar auf andere Parallelportadapter-Anschlussbelegungen, Kommandozeile, auch für AVR Butterfly über dessen vorinstallierten Bootloader/Firmware-Uploader) siehe im Wiki AVRDUDE
  • uisp (Unix, Linux, Windows, praktisch alle Programmer, Kommandozeile, nicht mehr gepflegt).
  • AVR-Studio (nur Programmieradapter mit integriertem Controller für den seriellen Port, z. B. AVR910, ATMEL AVRISP und STK500)
  • Eingebauter Programmer im Bascom-Basic Compiler
  • AvrOspII - GUI Open Source programmer based on Atmels Application note AVR911.
  • Forumsbeitrag - Wie man Ponyprog aus dem AVR-Studio heraus nutzt
  • Kontrollerlab - (Linux), Grafische Oberfläche zu avr-gcc, uisp, avrdude und kate mit built-in debugger und serial terminal. Einfach verständlich und aufgeräumt (im KDE-Stil)
  • myAVRProgTool - Freies Programmiertool und zusätzlich auch als DUDE-GUI geeignet, einfach zu bedienen
  • ISP Programmer von Adam Dybkowski (Opensource, Windows 95, 98, Me, NT 4.0, 2000, XP, 2003, Vista and Windows 7 (32-bit and 64-bit versions))
  • FT2232 ISP Flasher von Andreas Weschenfelder (Windows 95, 98, Me, NT 4.0, 2000, XP, 2003, Vista and Windows 7 (32-bit and 64-bit versions)), verwendet das MPSSE Protokoll der FTDI Chips zur ISP Programmierung
  • Atmel ISP Flasher for Android von Andreas Weschenfelder (Android 4.1.1), verwendet das MPSSE Protokoll der FTDI Chips zur ISP Programmierung, KEINE root-Rechte erforderlich

ISP-Pins am AVR auch für andere Zwecke nutzen[Bearbeiten]

Bei einem Programmer mit eingebautem Tristate-Treiber (z. B. 74HC(T)244) werden die Leitungen MISO, MOSI und SCK hochohmig geschaltet wenn die Programmierung beendet ist, d.h. sie beeinflussen die Schaltung nicht. Man kann die betreffenden Pins am AVR also relativ problemlos als Ausgänge verwenden, wenn man darauf achtet, dass die daran angeschlossene Peripherie durch die Programmierimpulse keinen Schaden nehmen kann. Als Eingänge sollte man die Pins allerdings nicht verwenden, da ein angeschlossener Taster zum Beispiel die Programmierimpulse kurzschließen würde, wenn er gedrückt ist.

Atmel empfiehlt in der Application Note AVR042: AVR Hardware Design Considerations (PDF) Peripherie an der SPI-Schnittstelle, bei gleichzeitiger Verwendung der Schnittstelle als In-System-Programmieranschluss, über Widerstände anzuschliessen.

Ein Widerstand in SCK ist in diesem Zusammenhang aber nur dann sinnvoll, wenn am AVR ein externer SPI-Master hängt, denn nur dann kann ein Konflikt zwischen diesem SCK treibenden Master und dem ebenfalls SCK treibenden ISP auftreten. Ist der AVR hingegen wie üblich selbst der Master, dann ist ein Konflikt ausgeschlossen. Das gleiche gilt für MOSI.

Bei MISO kann ein Konflikt nur auftreten, wenn diese Leitung vom Slave in der ISP-Phase aktiv treibend sein kann. Das ist beispielsweise bei Porterweiterungen (Inputs) mit Schieberegistern der Fall, wenn der Datenausgang des Schieberegisters nicht passivierbar ist (tristate, Z-state). Dann ist ein Serienwiderstand in MISO sinnvoll.

Normale SPI-Slaves mit CS-Leitung, wie ADCs, passivieren jedoch ihren Datenausgang wenn CS inaktiv ist. In diesem Fall ist ein Serienwiderstand in MISO unnötig, es muss nur über schwache Pullup-Widerstände an allen relevanten CS Leitungen sichergestellt sein, dass sie während Reset hochgezogen werden. Manche SPI-Slaves haben die bereits an Bord. Die internen Pullups im AVR sind keine Hilfe, da sie während Reset abgeschaltet sind.

siehe auch AVR HV-Programmer