aus RN-Wissen, der freien Wissensdatenbank
Wechseln zu: Navigation, Suche



Einführung

Als Programmer wird die Hardwarekomponente bezeichnet, mit der das ausführbare Mikrocontrollerprogramm (Firmware, HEX-File) auf den Controller übertragen wird. Es gibt verschiedene Konzepte der Programmübertragung. Neben dem Konzept des Bootloaders, der Parallelprogrammierung und des JTAG-Interfaces, spielt bei Atmel Mikrocontrollern das Verfahren des "serial Download" eine große Rolle. Bekannt ist diese Variante der Programmierung als ISP (In System Programmierung). Dabei wird das SPI (Serial Processor Interface) genutzt, welches bei fast allen AVR-Controllern zu finden ist. ISP-Programmer zeichnen sich dadurch aus, dass der Hardwareaufwand für diese sehr gering ist. Das hat natürlich Auswirkungen auf den Preis. Für einen "Standard" ISP Parallel-Programmer liegen die Materialkosten im Cent-Bereich. Bei solchen "billig" Programmern werden die eigentlichen Programmierprotokolle (siehe Abschnitt Memory Programing in AVR Datenblättern) durch ein entsprechendes Programm auf dem PC erzeugt (AVR-Prog, PonyProg, YAAP, AVRDUDE, Bascom usw.) und die Programmerhardware ist bestenfalls zur Pegelanpassung da. Letztlich gibt es sogar derartige Programmer, die nur aus drei Schutzwiderständen bestehen. Meist wird aber ein kleiner preiswerter Treiberbaustein eingebaut, der für eine sichere Datenübertragung auch bei längeren Programmierkabeln sorgt. Damit ist ein extrem günstiger Einstieg in die Programmierung von Atmel AVR-Controllern möglich. Aufwendiger werden dann Programmer, die tatsächlich über eigene "Intelligenz" verfügen. Dabei handelt es sich in der Regel um so genannte Serial-Programmer. Hier erfolgt die Datenübertragung an den Programmer per serieller Schnittstelle oder über USB. Der Programmer selbst besitzt einen Controller, der die Daten empfängt und das Programmierprotokoll ausführt. Der weit verbreitete SI-Prog (siehe PonyProg) wird zwar an die Serielle Schnittstelle angeschlossen, ist dem Wesen nach aber den Parallelprogrammern äquivalent (einfache Pegelanpassung, keine eigene Intelligenz). Darin liegt auch die Ursache, warum der SI-Prog nie an einem handelsüblichen USB zu Serial-Adapter laufen wird.

Parallelport ISP Programmer

STK 200 kompatible Programmer

Bei den Parallelportprogrammern handelt es sich oft um Nachbauten von Programmierinterfaces der ersten Starterkits von ATMEL dem STK200 oder STK300. Damit wird auch geworben in dem man diese als STK200 kompatibel oder als sogenannte Standard-ISP-Programmer bezeichnet. Der Vorteil dieser Programmer liegt tatsächlich darin, dass so ziemlich jede Programmersoftware diese unterstützt - nur direkt von AVRStudio geht es nicht. Die Kompatibilität bezieht sich hier auf die Belegung der Leitungen am LPT-Port. Es hat nichts mit der Verwendung eines Treiberschaltkreises bei den meisten dieser Programmer zu tun.

LPT-Pinning des STK200
SCK   = 6;
MOSI  = 7;
RESET = 9;
MISO  = 10;

SP12 kompatible Programmer

Bei dem SP12 (von Steve Bolt) Programmer handelt es sich ursprünglich um eine extrem einfache Lösung, bei der nur drei Schutzwiderstände und keine weitere Pegelanpassung benutzt wurde. Dieser Programmer, zum fast Nulltarif, erfreut sich großer Beliebtheit. Der Hauptgrund dafür liegt aber in seiner Schaltungslösung, die es erlaubt, das Zielsystem über den LPT-Port mit Spannung zu versorgen. Bei der STK200 Schaltung muss der Programmer vom Zielsystem versorgt werden. Es wird beim SP12 also zum Programieren kein zusätzliches Netzteil benötigt. Inzwischen werden ernsthafte SP12 Programmer auch mit einem Bustreiber versehen.

LPT-Pinning des SP12
VCC   = 4,5,6,7,8;
RESET = 3;
SCK   = 2;
MOSI  = 9;
MISO  = 11;

Pseudo serielle Programmer (SI-Prog)

Ein Programmer, der vor allem wegen seiner guten Unterstützung durch das beliebte PonyProg eine weite Verbreitung erfahren hat, ist der SI-Prog. Dieser wird oft als serieller Programmer bezeichnet. Richtig ist, dass er an den COM-Port des PCs angeschlossen wird. Aber die Schaltung verrät, daß hier die Steuerleitungen wie DTR, RTS und CTS des COM-Ports verwendet werden, um ein SPI-Protokoll zu fahren. Die eigentlichen Signalleitungen TxD und RxD sind bei diesem Adapter gar nicht angeschlossen. Damit ist es auch beim besten USB-RS232-Adapter nicht möglich, diesen Programmer an einem modernen Notebook anzuschließen, der nur noch über USB verfügt. Deshalb kann PonyProg dann nicht mehr als Programmiertool verwendet werden.

Echte serielle Programmer

Echte serielle Programmer basieren oft entweder auf dem Atmel Application-Note AN910 oder sind STK500 kompatible Programmer. Allen gemeinsam ist das Vorhandensein eines Controllers mit entsprechender AVR910 oder STK500 kompatibler Firmware. Diese kann meist über einen Bootloader aktualisiert werden. Da ein Controller und eine reguläre RS232 Pegelanpassung (z.B. mit einem MAX232) kostenintensiver als das Material für einen Parallelprogrammer ist, sind diese in der Regel auch teurer. Dafür ist aber eine kompatible Lösung erhältlich, die, wie der STK200, durch die meisten Flash-Tools unterstützt wird und auch mit handelsüblichen USB-Serial-Adaptern betrieben werden kann.


Das alte Protokoll nach AN910 ist problematisch bei der Unterstützung neuer Controller, denn hier muß der Programmer die ID des Controllers kennen. Für neue Controller braucht man also ein Update der Software im Programmer. Wichtige Weiterentwicklungen bei den Serialprogrammern ist das AVR911 und das STK500v2 Protokoll. Es sollte beim Neuerwerb darauf geachtet, dass eines dieser aktuellen Protokolle unterstützt wird.

USB Programmer

Aufbau eines einfachen USBasp
Einfacher USBasp

Bei USB-Programmern handelt es sich eigentlich nicht um eine eigenständige Gruppe von Programmern, sondern um AVR910- oder STK500-kompatible Lösungen. Das Besondere ist hier, dass der Programmer selbst über eine USB-Schnittstelle verfügt und deswegen ohne Weiteres an neuere PCs angeschlossen werden kann. Unter Windows muss in aller Regel ein entsprechender Treiber installiert werden, der im System einen virtuellen COM-Port zur Verfügung stellt, unter Linux hingegen ist dies normalerweise nicht notwendig, weil solche Geräte von Haus aus unterstützt werden.

Für langsame USB-Geschwindigkeiten kann ein AVR-Mikrocontroller das USB-Interface emulieren. Es gibt Baupläne für günstige Programmierer, die so auf den extra USB Controller verzichten (z.B. USB AVR-Lab, AVR-Doper, USBasp, siehe Weblinks). Das USB-Protokoll ist meistens nur minimalistisch und nicht vollständig umgesetzt, wodurch es theoretisch zu Inkompatibilitäten kommen kann.

Nichts desto trotz hat die Nutzung der AVR als virtuelle USB-Controller den großen Vorteil, dass sich nun ohne SMD-Bauteile auch USB-Programmierer bauen lassen, die an modernen Laptops, ohne serielle Schnittstelle funktionieren.

JTAG & PDI Programmer

Mit veröffentlichung der Xmegas hat sich ATMEL vom ISP Standard getrennt, statt dessen komt PDI oder JTAG zum Einsatz.

Anbieter entsprechender Programmieradapter sind z.Zt. spärlich.

Im Internet und auch hier im RN-Wissen stösst man auf der Suche nach JTAG-Programmern schnell auf eine Nachbauversion des JTAG ICE, dieser ist der vorläufer des mmt. aktuellen JTAG ICE MKII. Der JTAG ICE unterstützt nach meinen Recherchen jedoch nicht die aktuellen X-Megas.

Auf der suche nach entsprechende Programmern bin ich, bis auf einen, auf die relativ teuerern und für Hobbyisten unerschwinglichen Programmer gestossen.

JTAG ICE MKII [1]
AVR-ONE! [2]   
AVR-Dragon [3]

letzter unterstützt u.a. ISP, JTAG und PDI Programmierung, also alles was man benötigt.

Der AVR-Dragon ist von den aufgeführten Geräte mmt. die günstigste variante (ca €50,-) soll allerdings etwas empfindlch sein und über keinerlei Schutzmechanismen verfügen und keinerlei Ausstattung (Kabel/Anleitung) bereit stellen.


ISP-Anschluss

10poliger ISP Anschluss

Die am meisten verwendete Steckerbelegung, nicht nur Im Roboternetz. Genauere Beschreibung unter RN-Definitionen. Nahezu alle RN-Bauanleitungen nutzen diese Belegung.

1 - MOSI
2 - VCC
3 - LED (oft auch unbelegt)
4 - GND
5 - RST
6 - GND
7 - SCK
8 - GND
9 - MISO
10 - GND

6poliger ISP Anschluss

Nur in wenigen Roboternetz-Projekten gebräuchlich. Dieser Stecker spart etwas Platz, ist aber teurer als die zehnpolige Variante.

1 - MISO
2 - VCC
3 - SCK
4 - MOSI
5 - RST
6 - GND

Adapter 10polig <-> 6polig

Ein Adapter zur Verbindung der beiden Steckerarten lässt sich einfach auf einem Stück Lochrasterplatine aufbauen. Hier ein mögliches Layout, mit dem ein sehr platzsparender Aufbau möglich ist.

Am besten baut man die Schaltung auf einer Platine mit Punktraster auf, dann muss man keine Leiterbahnen auftrennen.

Wichtig ist, dass Pin 3 des zehnpoligen Steckers vor dem Löten entfernt wird (lässt sich mit einer Zange herausziehen, ggf. vorher den Pin etwas mit dem Lötkolben erwärmen). Dann kann die Masseverbindung von Pin6/sechspol zu Pin4,6,8,10/zehnpol einfach auf der Unterseite durch diese Lücke geführt werden. So ergibt sich ein besonders einfaches Layout ohne Leitungskreuzungen.

Nun werden die Stecker eingelötet, und alle Verbindungen auf der Unterseite der Platine hergestellt. Da sich dabei keine Leitungen überkreuzen, kann unisolierter Draht verwendet werden. Um ihn stabil zu befestigen, kann man ihn noch auf die unbelegten Lötaugen entlang des Drahtes anlöten.

Schließlich empfiehlt es sich (nach erfolgreichem Funktionstest) die Unterseite der Platine zu isolieren (z.B. mit Klebeband), damit keine Kurzschlüsse mit anderen metallischen Gegenständen auftreten können.

Ispadapter.jpg Ispadapter layout.png
ISP-Adapter Lochraster-Layout

Autor

Siehe auch

Weblinks