www.mikrocontroller.net

AVR In System Programmer

Inhaltsverzeichnis

[bearbeiten] Einführung

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 (z.B. STK500) mit integriertem Programmiergerät.

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

Es geht nichts über ein wirklich zuverlässiges Werkzeug. Beim Umgang mit µCs ist es sehr frustrierend, an drei Fronten gleichzeitig zu kämpfen: Bugs in der Software, Bugs In der Schaltung und Bugs beim ISP-Adapter/PC-Gespann. Wenigstens die letzte Wanzenquelle kann man mit einem zuverlässigen ISP-Adapter eliminieren. Siehe auch diverse Forenbeiträge u.a. von Jörg

[bearbeiten] Application Notes

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

[bearbeiten] Pinbelegung

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):

Bild: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 einen kleinen Pfeil gekennzeichnet.

(*) 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 relativ weit verbreitet. Die Anschlussbelegung über einen 6-poligen Stecker stammt von Atmel selbst. Der 10-polige Anschluss wird zwar häufiger genutzt (insbesondere bei billigen Parallelport-Adaptern) aber der 6-polige Anschluss ist platzsparender auf der Platine.

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. Alternativ bleibt nur der Griff zu den nicht verpolungssicheren 2xN Stiftleisten (z.B. 2x40), wobei man eine Stiftleiste auf 2x6 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.

Der VCC-Anschluss kann einerseits den Programmieradapter mit Strom versorgen, wie es bei vielen Parallelport-Adaptern der Fall ist. Er kann aber auch dazu verwendet werden, die zu programmierende Schaltung aus dem Programmieradapter mit Strom zu versorgen, was insbesondere beim STK500 möglich und dank dessen programmierbarer Versorgungsspannung manchmal ganz praktisch ist. Werden jedoch beide Seiten separat mit Strom versorgt, sollten die Stromversorgungen nicht über den VCC-Pin des ISP-Anschlusses miteinander verbunden werden, da manche Spannungsregler-ICs das nicht verkraften.

[bearbeiten] Programmer-Varianten

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.

[bearbeiten] Parallelport

[bearbeiten] STK200-kompatibel

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

[bearbeiten] Paralleles Interface für AVR und PonyProg

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

[bearbeiten] SP12 Programmer

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.

[bearbeiten] Serieller Port (RS-232)

[bearbeiten] Atmel AVRISP, STK500, AVR910

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

Einen AVR-ISP STK500 Protokoll Programmmer und JTAGICE kompatiblen Programmer/Debugger können Sie auf folgender Homepage bestellen: myevertool

[bearbeiten] SI-Prog

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.

[bearbeiten] Sercon2

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

[bearbeiten] USB

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.

[bearbeiten] Atmel AVRISP MKII

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

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

[bearbeiten] Atmel 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 grossen 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 mit Einschränkungen (max. 32K AVRs) sogar JTAG und debugWIRE ICE / Debugging unterstützt (bei den AVRs die dies können).

Zu den grössten 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 Schutzmassnahmen 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 lässt 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.

[bearbeiten] USBisp

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.

[bearbeiten] USB avrisp

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

[bearbeiten] Evertool

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

[bearbeiten] USBasp

Thomas Fischls USBasp ist ein Openhardware/Openfirmware USB-ISP-Adapter. Er basiert auf einem ATmega8 (oder ATmega88), der mittels einer rein auf Firmware basierenden USB-Implementierung von Objective Development arbeitet. Zum Ansteuern wird AVRDUDE in einem speziellen Modus benötigt, der ab Version 5.2 standardmäßig vorhanden ist (vorher waren Patches nötig). Eine MacOS X Anpassung stammt von Sven Schwiecker.

  • Einen preiswerten Bausatz incl. Dokumentation gibt es hier.

[bearbeiten] AvrUsb500

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

[bearbeiten] usbprog

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.

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 (vorraussichtlich 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).

Derzeit kann man bei Benedikt Sauter Platinen und Bauteile im Set für 22 EUR (neue v3 für 32 EUR) bestellen. Näheres auf der Projektseite.

[bearbeiten] AVR-Doper

AVR-Doper kann neben ISP auch im High-Voltage Mode als AVR HV-Programmer programmieren. Rein auf Firmware basierenden 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.

[bearbeiten] USB AVR-ISP

USB AVR-ISP besteht aus einer sehr einfachen Hardware, usb wird in Software gemacht. Der Programmer ist STK500v2 kompatibel und kann damit z.b. direkt aus dem AVR Studio angesprochen werden. Ausserdem unterstützt er nun mit einer separaten Firmware das AVR910 Protokoll. Statusanzeige des Targets (angeschlossen, falsch angeschlossen,nicht angeschlossen), max. 3 Mhz ISP Freq, einen Terminalmodus zur Informationsanzeige über das angeschlossene Target sowie Einstellungen.

[bearbeiten] USBtinyISP

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 und MacOS X getestet. Bei Adafruit sind auch Selbstbaukits erhältlich.

[bearbeiten] UCOM-IR

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.

[bearbeiten] Standalone

[bearbeiten] TheCableAVR-SD (kommerziell)

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.

[bearbeiten] ButtLoad

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.

[bearbeiten] PalmAVR

[bearbeiten] Geschwindigkeitsvergleich

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)

[bearbeiten] Software

  • 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)
  • 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

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

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.

webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net