AVR-Programmierung

Viele Einsteiger fragen sich: "Wie bekommt man eigentlich die Software in den Mikrocontroller hinein?" Auf dieser Seite möchte ich zeigen, dass das gar nicht so kompliziert ist. Mit einem einfachen Adapter für die parallele oder serielle PC-Schnittstelle sowie der kostenlosen Software "PonyProg2000" können die AVR Mikrocontroller aller Projekte dieser Seite programmiert werden. Zur Demonstration dient eine kleine Schaltung mit einem ATmega8 (LED-Blinker), die auf einem Steckbrett aufgebaut werden kann.

Letzte Bearbeitung: 08.01.2010

Allgemeines

Zuerst eine kurze Erklärung: Der Begriff Programmieren wird im Zusammenhang mit Mikrocontrollern für 2 verschiedene Dinge verwendet. Zum einen beschreibt er die Tätigkeit, ein Programm für einen Mikrocontroller zu erstellen und zum anderen beschreibt er den Vorgang, ein fertiges Programm in den Speicher eines Mikrocontrollers zu übertragen. Auf dieser Seite soll es nur um letzteres gehen, also die Übertragung eines bereits fertig entwickelten Programms in den Controller-Speicher.

Bis auf eine Ausnahme verwenden alle Projekte, die auf diesen Seiten vorgestellt werden, Mikrocontroller aus der AVR-Produktreihe der Firma ATMEL. Ein großer Vorteil dieser Controller ist, dass sie über eine relativ einfache Schnittstelle programmiert werden können. Diese besteht aus 4 Leitungen, über die die zu programmierenden Daten seriell in den Speicher des Controllers übertragen werden. Auch das Auslesen des Speichers und das Konfigurieren des Controllers ist über diese Leitungen möglich. Der Controller kann bei dieser Prozedur in der fertigen Schaltung verbleiben und muss nicht ausgebaut werden. Hier hat sich der Begriff ISP (In System Programming) durchgesetzt. Zur Verbindung mit einem PC genügt ein relativ einfacher Adapter, der an die parallele oder serielle Schnittstelle des PC angeschlossen wird. Weiterhin wird noch etwas Software benötigt und hier hat sich bei mir das kostenlose Programm PonyProg2000 bewährt.

Schaltung

Doch zunächst zur Hardware des Programmieradapters: Hier gibt es, wie schon erwähnt, zwei Versionen. Eine ist für den Anschluss an eine parallele PC-Schnittstelle (LPT) bestimmt, die andere für den Anschluss an eine serielle PC-Schnittstelle (COM). Beide werden gleichermaßen von PonyProg2000 unterstützt und stellen eine ISP-Schnittstelle zur Verfügung, die direkt mit den AVR-Projekten auf meiner Seite verbunden werden kann. Für welche Version man sich entscheidet, hängt davon ab, welche Schnittstelle zur Verfügung steht. Leider sind aktuelle PCs nur noch selten mit einer LPT- oder COM-Schnittstelle ausgestattet. In diesem Fall lässt sich ein älterer PC noch gut verwenden, der vielleicht schon ausgemustert wurde. Wenn auch das nicht möglich ist, dann empfehle ich eine USB-Lösung. Diese ist dann allerdings nicht mehr so einfach zu realisieren, weitere Informationen sind im Abschnitt USB am Ende dieses Artikels zu finden.

Das nebenstehende Bild zeigt die Schaltungsversion für den parallelen Port. Hier werden neben den erforderlichen Steckverbindern nur 2 Widerstände benötigt. Diese sind notwendig, um die Ausgänge des LPT-Port sowie die Programmieranschlüsse des angeschlossenen Controllers zu schützen. Der Vorteil dieser Version ist die einfache Schaltung. Nachteilig ist allerdings, dass LPT-Ports beim PC nicht besonders gut geschützt sind und man sehr vorsichtig arbeiten muss.

Diese Stückliste enthält die benötigten Bauteile für die parallele Version.

Beim seriellen Programmieradapter ist der Material-Aufwand etwas größer. Der Vorteil ist aber, dass COM-Schnittstellen am PC etwas robuster sind und auch mal einen Kurzschluss vertragen. Diese Schaltung ist übrigens eine etwas vereinfachte Version des SI-Prog-Interfaces, welches auf der PonyProg-Homepage vorgestellt wird. Hier wurden alle Komponenten entfernt, die nicht für die AVR-Programmierung benötigt werden. Aber es wurden auch Bauteile hinzugefügt: R4 und R6 ermöglichen den Anschluss an Schaltungen mit 3,3V Betriebsspannung und C1 kann ein einigen Fällen Kommunikationsprobleme beseitigen. Im Test funktionierte die Schaltung mit Werten von 220p bis 1n einwandfrei.

Diese Stückliste enthält die benötigten Bauteile für die serielle Version. Es ist auch ein Platinenlayout für Standard-Bauteile und ein Platinenlayout für SMD-Bauteile verfügbar.

Bei allen AVR-Projekten habe ich für den ISP-Anschluss einen Platz sparenden 5-poligen Steckverbinder verwendet. Dieser besteht aus einer Buchsenleiste im 2,54mm Raster (einreihige IC-Fassung). Diese Buchsen lassen sich ineinander stecken, so dass sowohl für den Teil auf der Platine als auch für den Stecker die gleichen Komponenten zum Einsatz kommen.

Der Standard von ATMEL sieht jedoch ganz anders aus. Hier gibt es 2 Varianten: Weit verbreitet ist der Anschluss über einen 10-poligen Wannenstecker, weniger häufig ist der 6-polige Anschluss (ebenfalls als Wannenstecker) anzutreffen.

Die beiden nebenstehenden Schaltungen zeigen, wie man die Programmieradapter auch für die originalen 6- oder 10-poligen ISP-Anschlüsse verwenden kann.

Als Ergänzung zum parallelen und seriellen Programmieradapter hat Lothar Jasper zwei Platinen erstellt, auf die alle 28- und 40-poligen AVR-Controller im PDIP-Gehäuse gesteckt werden können. Eine kleinere Version ist für Standard IC-Fassungen vorgesehen und eine größere Version kann mit Textool-Fassungen bestückt werden. Damit können praktisch alle größeren AVR programmiert werden.

Aufbau

Die wenigen Bauteile der Programmieradapter lassen sich mit etwas Geschick im Steckergehäuse unterbringen. Recht problemlos geht das bei der Version für den parallelen Anschluss, hier haben die beiden Widerstände genügend Platz im großen Gehäuse.

Etwas schwieriger ist es beim seriellen Adapter. Ich habe hier eine kleine Lochraster-Platine passend zurechtgesägt und dort alle Bauteile aufgelötet. Da sich bei so einem engen Aufbau schnell Fehler einschleichen können, sollte man vor der Inbetriebnahme unbedingt nochmals alle Verbindungen kontrollieren und vor allem prüfen, dass keine Kurzschlüsse vorhanden sind.
Wer sich so eine Konstruktion nicht zutraut, der kann die Schaltung auch auf einer separaten Platine aufbauen und diese über ein kurzes Kabel mit dem Stecker verbinden.

Und so sieht der Programmieranschluss aus. Ich habe hier (wie schon erwähnt) einreihige IC-Sockelleisten verwendet, die sehr preiswert sind und sich einfach auf die benötigte Länge kürzen lassen. Auf der Seite, wo normalerweise die ICs eingesteckt werden, habe ich die 5 Leitungen eingelötet und die Stifte, die sonst in die Platine kommen, dienen hier als Stecker. Die Lötstellen habe ich später mit Zweikomponentenkleber vergossen.

Wie man im Test-Projekt weiter unten sehen kann, ist dieser Steckverbinder recht praktisch, da man eine direkte Verbindung zu einem Experimentier-Steckbrett herstellen kann. Der einzige Nachteil ist, dass man den Stecker auch verkehrt herum aufstecken kann, was aber unbedingt vermieden werden sollte. Deshalb habe ich bei allen ISP-Anschlüssen meiner Projekte den Masseanschluss mit einer Markierung versehen (schwarzer Punkt auf der Platine) um Verwechslungen auszuschließen.

Wichtiger Hinweis: Etwas kritisch ist die Kabelverbindung. Ich verwende hier 4-adriges geschirmtes Kabel, wobei der Schirm gleichzeitig als Masse-Leitung dient. Sehr gut geeignet sind auch Flachbandkabel, Kabel mit verdrillten Adern sollten jedoch nicht verwendet werden. Über die maximale Kabellänge streiten sich noch die Experten, aber es gilt die Regel: so kurz wie möglich. Meine Kabel haben eine Länge von ca. 2m und funktionieren tadellos mit allen AT90Sxxxx, ATtiny und ATmega Typen bei Taktfrequenzen von 1 bis 16MHz. Es gibt aber Fälle, wo auch bei dieser Länge Probleme auftreten. Beim seriellen Adapter liegt die Ursache vermutlich an der MISO-Leitung: Hier wird der CMOS-Pegel des AVR direkt an die RS-232 Schnittstelle geführt und das liegt außerhalb der Spezifikationen. Man könnte zwar einen Treiber zwischenschalten, dieser würde aber den Aufwand enorm erhöhen und eine zusätzliche Stromversorgung benötigen. Deshalb empfehle ich die einfachste Lösung: Kabel kürzen.

Software

Als Programmiersoftware kommt das bereits erwähnte PonyProg2000 zum Einsatz. Dieses kann kostenlos genutzt werden und es ist für Windows und Linux verfügbar. Offiziell handelt es sich bei PonyProg2000 um eine Beta-Version, was vermutlich damit zusammenhängt, dass noch nicht alle der neueren AVR Controller implementiert sind. Die nachfolgende Beschreibung und die Bilder beziehen sich übrigens auf die bei der Texterstellung aktuelle Version 2.06c.

Die Installation von PonyProg2000 bedarf eigentlich keiner weiteren Erklärung. Beim ersten Start des Programms ist eine Kalibrierung erforderlich, also einfach im Menü Setup die Option Calibration aufrufen und den angezeigten Hinweisen folgen. Und so präsentiert sich PonyProg2000:

Unter der Menüzeile sind zwei Symbolleisten angeordnet, hier kann man praktisch alle wichtigen Funktionen direkt aufrufen. Im Hauptfenster (welches jetzt noch leer ist) werden später die Daten angezeigt, die in den Controller geschrieben werden sollen. Zunächst muss aber der verwendete Programmieradapter eingestellt werden: Dazu wird im Menü Setup die Option Interface Setup aufgerufen. Alternativ kann man auch auf dieses Symbol klicken.

   

Das linke Bild zeigt die empfohlenen Einstellungen für den parallelen Adapter, bei Windows 95 oder 98 kann man auch die Option Avr ISP API verwenden. Im rechten Bild sind die Einstellungen für den seriellen Adapter zu sehen. Mit dem Button Probe lässt sich prüfen, ob der angeschlossene Programmieradapter erkannt wird. Kommt hier die Meldung Test Ok, dann hat PonyProg Zugriff auf den Adapter. Dies ist zwar noch keine Garantie, dass der Programmieradapter auch wirklich funktioniert, aber es ist schon ein gutes Zeichen. Falls hier Test Failed gemeldet wird, dann sollten nochmals alle Einstellungen und gegebenenfalls auch die Hardware überprüft werden.

Test-Projekt

Das im folgenden Abschnitt beschriebene Test-Projekt dient (wie der Name schon sagt) zum Test aller zum Programmieren nötigen Komponenten. Wer noch keine Erfahrungen mit Mikrocontrollern hat, sollte diese kleine Schaltung aufbauen und alle Beispiele testen.

Kurz zur Schaltung: Ein ATmega8 wird in einer Minimalkonfiguration betrieben. C1 dient als Stützkondensator und sollte sich möglichst nah am Controller befinden. X1 sowie C2 und C3 sorgen für einen stabilen Takt von 4 MHz und auch diese Bauteile sollten in der Nähe des Controllers angeordnet werden. Am Controlleranschluss PD0 ist über den Vorwiderstand R1 die LED D1 angeschlossen, die später zum Blinken gebracht werden soll. Interessant ist der 5-polige mit ISP bezeichnete Steckverbinder, hier wird der Programmieradapter angeschlossen.

Zur Versorgung der Schaltung wird eine stabilisierte Spannung von 5V benötigt. Ein Labornetzgerät ist für diesen Zweck am besten geeignet. Es kann aber auch ein Steckernetzteil verwendet werden, aber man sollte darauf achten, dass dieses Netzteil wirklich eine geregelte Spannung liefert. Für die meisten modernen Schaltnetzteile trifft dies zu, nicht jedoch für viele ältere Trafo-Netzteile.

Diese Stückliste enthält alle Bauteile, die für das Test-Projekt benötigt werden.

Falls nur ein ungeregeltes Steckernetzteil zur Verfügung steht, dann ist das auch kein Problem. Mit der nebenstehenden Schaltung kann daraus eine Spannung von +5V erzeugt werden. Zur Not lässt sich auch eine 9V Batterie als Spannungsquelle verwenden.

Hier wurde das Test-Projekt auf einem Steckbrett aufgebaut. Der Vorteil dieses Systems ist, dass man sehr einfach Änderungen an der Schaltung durchführen kann. Außerdem lässt sich der Programmierstecker direkt aufstecken. Es ist aber auch möglich, die Schaltung auf einer kleinen Lochrasterplatine unterzubringen. Wichtig: die Kondensatoren C1-C3 und der Quarz X1 sollten sich in der Nähe des Controllers befinden und über möglichst kurze Kabel angeschlossen werden.

Auf dem Bild wurde der Programmieradapter bereits angeschlossen. Allgemein wird empfohlen, beim Verbinden und Trennen des Programmieradapters alle Geräte auszuschalten. Die Praxis hat aber gezeigt, dass es nicht notwendig ist, den PC deswegen herunterzufahren. Die Stromversorgung für das AVR-Projekt sollte aber ausgeschaltet werden, wenn die ISP-Verbindung hergestellt oder getrennt wird. Ich habe mir außerdem angewöhnt, beim Verbinden den ISP-Stecker etwas schräg anzusetzen, so dass beim Einstecken zuerst die Masseleitung verbunden wird und stecke erst dann komplett ein.

Damit der Controller weiß, dass er jetzt eine LED zum Blinken bringen soll, muss er mit dem entsprechenden Programm ausgestattet werden. Für diesen Zweck verfügen alle AVR Mikrocontroller über einen FLASH-Speicher. Wird der Controller eingeschaltet, dann beginnt er mit dem Lesen des FLASH-Speichers bei Adresse 0 und interpretiert diese Daten als Befehle. Der FLASH-Speicher muss also in jedem Fall programmiert werden, damit der Controller überhaupt arbeiten kann. Weiterhin gibt es noch einen EEPROM-Speicher, welcher dafür gedacht ist, Daten (z.B. für die Konfiguration) aufzubewahren. Dieser wird meist vom Controller-Programm verwaltet, es ist aber auch möglich, den EEPROM-Speicher mittels ISP zu beschreiben oder auszulesen. Man sollte sich einprägen, dass es beim EEPROM-Speicher jederzeit möglich ist, einzelne Zellen zu verändern, während der FLASH-Speicher nur komplett gelöscht und neu beschrieben werden kann.

FLASH-Speicher

Um das Test-Projekt zum Leben zu erwecken, soll nun ein Programm in den FLASH-Speicher des ATmega8 übertragen werden. Dieses Programm definiert den Anschluss PB0 als Ausgangsport und wechselt dann ständig das Ausgangssignal von PB0 zwischen Low- und High-Pegel. Wird der Controller mit einer Taktfrequenz von 4MHz betrieben, dann ergibt sich eine Blinkfrequenz von ca. 1Hz. Zunächst ist erforderlich, die Datei avr-test.zip zu downloaden. Hier sind folgende 3 Dateien enthalten:

testprojekt.asm Diese Datei enthält den Quelltext des Programms in Assemblersprache. Hier sind alle Befehle zum Blinken einer LED für den ATmega8 im Klartext aufgelistet, so dass sie für den Programmierer gut lesbar sind. In dieser Form kann die Datei jedoch nicht vom Mikrocontroller verarbeitet werden, deshalb muss der Quelltext in eine vom Controller lesbare Form umgewandelt werden.
testprojekt.hex In dieser Datei befinden sich die Befehle aus dem Assembler-Quelltext in einer vom Controller lesbaren Form. Diese Datei muss in den FLASH-Speicher des ATmega8 unseres Test-Projektes programmiert werden, damit der Controller das Programm ausführen kann.
testprojekt.eep Diese Datei enthält einige Daten für den EEPROM des ATmega8. Für die Funktion des Test-Projektes ist diese Datei nicht erforderlich, sie wird hier nur verwendet, um die Programmierung des EEPROM-Speichers zu demonstrieren.

Aber jetzt zur Praxis: Auf dem PC wird PonyProg gestartet, der Programmieradapter angesteckt (zuerst am PC, dann am Test-Projekt) und als letztes wird die Stromversorgung des Test-Projektes eingeschaltet. In PonyProg geht es folgendermaßen weiter:

Device [AVR micro] [ATmega8] Über die Menü-Option Device oder die beiden Auswahlfelder auf der oberen Symbolleiste wird zunächst die Chip-Familie und danach der Chip-Typ ausgewählt.
Open Program Memory (FLASH) File Ein Klick auf dieses Symbol zeigt einen Öffnen-Dialog, hier wird die Datei testprojekt.hex ausgewählt. PonyProg lädt den Inhalt dieser Datei in einen Puffer und zeigt dessen Inhalt anschließend im Hauptfenster an (hexadezimal und als Text).
Write Device Beim Klick auf dieses Symbol erscheint eine Sicherheitsabfrage und nach deren Bestätigung mit Yes startet der Programmiervorgang. Dabei wird der Inhalt des Puffers komplett in den Controller geschrieben und anschließend zum Vergleich wieder ausgelesen. Wurde die gesamte Prozedur erfolgreich abgeschlossen, dann erscheint die Meldung Write successful.

Zeitgleich zur Erfolgsmeldung auf dem PC wird das Programm im Controller gestartet und die LED blinkt - Herzlichen Glückwunsch! Übrigens, der gesamte Programmiervorgang dauert bei diesem Beispielprogramm ungefähr 20 Sekunden.

EEPROM-Speicher

Einige Projekte wie z.B. die Multifunktionsuhr oder das Anzeigemodul 1 benötigen Einstellungsdaten im EEPROM-Speicher. Hier muss also neben dem FLASH- auch der EEPROM-Speicher des Controllers programmiert werden. Bei einem solchen Projekt wird folgendermaßen vorgegangen:

Device [AVR micro] [ATmega8] Über die Menü-Option Device oder die beiden Auswahlfelder auf der oberen Symbolleiste wird zunächst die Chip-Familie und danach der Chip-Typ ausgewählt.
Open Program Memory (FLASH) File Ein Klick auf dieses Symbol zeigt einen Öffnen-Dialog, hier wird die Datei testprojekt.hex ausgewählt. PonyProg lädt den Inhalt dieser Datei in einen Puffer und zeigt dessen Inhalt anschließend im Hauptfenster an (hexadezimal und als Text).
Open Data Memory (EEPROM) File Ein Klick auf dieses Symbol zeigt einen Öffnen-Dialog, hier wird die Datei testprojekt.eep ausgewählt. Gegebenenfalls muss der Dateityp erst auf *.eep oder * geändert werden, damit die richtige Datei im Auswahlfenster angezeigt wird. PonyProg lädt den Inhalt dieser Datei ebenfalls in den Puffer und zeigt dessen Inhalt im Hauptfenster an, wobei die EEPROM-Daten ganz am Ende zu finden sind.
Write Device Beim Klick auf dieses Symbol erscheint eine Sicherheitsabfrage und nach deren Bestätigung mit Yes startet der Programmiervorgang. Dabei wird der Inhalt des Puffers komplett in den Controller geschrieben und anschließend zum Vergleich wieder ausgelesen. Wurde die gesamte Prozedur erfolgreich abgeschlossen, dann erscheint die Meldung Write successful.

Auch hier startet anschließend das Programm im Controller und die LED blinkt. Das war auch nicht anders zu erwarten, denn schließlich hat sich das Programm nicht verändert und die Daten im EEPROM werden bei diesem Test-Projekt nicht verwendet.

Gelegentlich ist es erforderlich, bei einem bereits laufenden Projekt den EEPROM-Inhalt zu ändern, z.B. um einen neuen Geburtstag in die Multifunktionsuhr einzutragen. In einem solchen Fall will man natürlich das Programm im FLASH-Speicher behalten und nur den EEPROM-Inhalt anpassen. Hier geht man folgendermaßen vor:

Device [AVR micro] [ATmega8] Über die Menü-Option Device oder die beiden Auswahlfelder auf der oberen Symbolleiste wird zunächst die Chip-Familie und danach der Chip-Typ ausgewählt.
Open Data Memory (EEPROM) File Ein Klick auf dieses Symbol zeigt einen Öffnen-Dialog, hier wird die Datei testprojekt.eep ausgewählt. Gegebenenfalls muss der Dateityp erst auf *.eep oder * geändert werden, damit die richtige Datei im Auswahlfenster angezeigt wird. PonyProg lädt den Inhalt dieser Datei in den Puffer und zeigt dessen Inhalt im Hauptfenster an, wobei die EEPROM-Daten ganz am Ende zu finden sind.
Write Data Memory (EEPROM) Beim Klick auf dieses Symbol erscheint eine Sicherheitsabfrage und nach deren Bestätigung mit Yes startet der Programmiervorgang. Dabei wird nur der Inhalt des EEPROM-Puffers in den Controller geschrieben und anschließend zum Vergleich wieder ausgelesen. Wurde die Prozedur erfolgreich abgeschlossen, dann erscheint die Meldung Write successful.

Noch ein kleiner Tipp: In der Regel wird bei einem Mikrocontroller-Projekt nur der FLASH-Speicher mit der hex Datei programmiert. Falls ein Projekt die zusätzliche Programmierung des EEPROM-Speichers erfordert, dann erkennt man dies daran, dass dem Software-Paket neben der hex auch eine eep Datei beiliegt.

Fuse-Bits

Weiter oben im Text hatte ich erwähnt, dass das Programm für das Test-Projekt mit 4MHz läuft und die LED mit ungefähr 1Hz (also im Sekundentakt) blinken soll. Wer das Test-Projekt aufgebaut und alle Programmierschritte durchgeführt hat, wird feststellen, dass die LED viel langsamer blinkt und zwar nur alle 4s, also mit 0,25Hz. Das lässt darauf schließen, dass der Controller mit einer Taktfrequenz von nur 1MHz arbeitet. In der Tat läuft der Controller im Moment mit einem internen Taktoszillator, welcher mit 1MHz schwingt. Man könnte sogar den Quarz aus der Schaltung entfernen und die LED würde weiterhin blinken. Die nächste Aufgabe ist also, den Quarzoszillator des Controllers zu aktivieren. Hierfür sind die Fuse-Bits zuständig, sie ermöglichen die Konfiguration einiger Controller-Funktionen. Die Fuse-Bits sind unabhängig von den beiden Speichern des Controllers und die Einstellungen bleiben so lange erhalten, bis sie wieder geändert werden, wobei Änderungen jederzeit möglich sind.

Zuerst noch eine Warnung: Einstellungen an den Fuse-Bits sollten sehr gewissenhaft durchgeführt werden. Zwar kann man den Controller mit einer falschen Einstellung nicht beschädigen, wohl aber in einen Zustand bringen, in dem er eine weitere Kommunikation verweigert.

Zur Einstellung der Fuse-Bits wird auf das Schloss-Symbol geklickt. Danach liest PonyProg die aktuelle Einstellung aus dem Controller und zeigt diese in einem Fenster an. Falls PonyProg bereits mit dem Controller kommuniziert hat, z.B. beim Programmieren der Speicher, dann hat es die Einstellungen bereits gelesen und zeigt sie direkt an. Bei einem fabrikneuen ATmega8 ergibt sich das nebenstehende Bild.

Die Fuse-Bits werden nun so wie in diesem Bild eingestellt. Ich möchte an dieser Stelle nicht auf die Bedeutung aller Fuse-Bits eingehen, nur soviel: Um den Quarz-Oszillator für das Test-Projekt zu aktivieren, müssen die Bits CKSELx und SUTx geändert werden. CKSEL bedeutet Clock Selection, hier wird jetzt als Taktquelle der Quarzoszillator ausgewählt. SUT steht für Start-up Time und legt eine Wartezeit beim Starten des Controllers fest. Mit der neuen Einstellung wartet der Controller beim Einschalten eine gewisse Zeit, damit sich der Quarz-Oszillator einschwingen kann.

Mit einem Klick auf Write wird die neue Einstellung in den Controller geschrieben und das Fenster wieder geschlossen. Ein Blick auf das Test-Projekt zeigt: die LED blinkt jetzt ungefähr im Sekundentakt.

Für weitere Informationen verweise ich auf die Datenblätter der Controller, hier sind alle Fuse-Bits ausführlich beschrieben. Bei eigenen Versuchen sollte man auf eine Besonderheit achten, es gilt hier folgende Definition:

Fuse-Bit nicht programmiert entspricht dem logischen Wert 1
Fuse-Bit programmiert entspricht dem logischen Wert 0

Diese Definition erscheint etwas verwirrend, aber es gibt eine einfache Erklärung dafür: Die Fuse-Bits funktionieren im Prinzip wie Speicherzellen, so wie sie auch beim FLASH- oder EEPROM-Speicher verwendet werden und diese sind technisch bedingt im leeren bzw. unprogrammierten Zustand auf logisch 1 gesetzt.

Hinweis: Um den Nachbau aller Projekte so einfach wie möglich zu gestalten, enthält jede Beschreibung einen Screenshot von PonyProg mit der richtigen Einstellung der Fuse-Bits.

USB

Die klassischen Schnittstellen LPT und COM sind nur noch selten an aktuellen PCs zu finden, dafür sind meist jede Menge USB-Anschlüsse vorhanden. Leider können die hier vorgestellten einfachen Programmieradapter nicht am USB verwendet werden. Zwar ist es grundsätzlich möglich, den seriellen Adapter über einen USB-RS232-Wandler zu betreiben, aber ich empfehle es nicht. Es funktioniert nicht zuverlässig mit jedem Wandler, außerdem erhöht sich die Programmierzeit um ein Vielfaches. Das liegt daran, dass die Daten nicht byteweise über TXD/RXD übertragen werden, sondern bitweise über Statusleitungen. Wenn also kein PC oder Laptop mit paralleler bzw. serieller Schnittstelle zur Verfügung steht, dann kommt nur eine USB-Lösung in Frage. Diese kann man fertig kaufen, aber auch durchaus selbst bauen. 3 Selbstbau-Lösungen möchte ich im Folgenden vorstellen, allerdings sind diese etwas komplexer und zum Teil mit SMD-Bauteilen aufgebaut. Somit sind sie nicht unbedingt für Einsteiger geeignet. Außerdem verwenden sie einen Mikrocontroller zur Steuerung und für die Inbetriebnahme ist zumindest einmalig ein weiterer Programmieradapter erforderlich. Weiterhin ist immer die Installation eines Treibers erforderlich.

USBisp

USBisp wurde von Matthias Weißer entwickelt und besteht im Kern aus einem FT245BM und einem ATmega8. Beide Chips sind als SMD-Version auf einer kleinen Platine untergebracht, somit erhält man ein sehr kompaktes Programmierinterface. Dieses ist kompatibel zum AVRISP von ATMEL und kann direkt vom AVR Studio aus bedient werden. Zur korrekten Funktion wird der VCP-Treiber von FTDI benötigt. Dieses Interface benutze ich selbst kann es mit gutem Gewissen weiterempfehlen.

www.matwei.de/doku.php?id=de:elektronik:usbisp    Homepage von USBisp
www.ftdichip.com/Drivers/VCP.htm    Treiber-Seite von FTDI

USBasp

Eine sehr interessante Lösung ist das USBasp von Thomas Fischl. Dieses besteht nur aus einem ATmega48 oder ATmega8, wobei dieser direkt am USB angeschlossen wird und somit auch die gesamte USB-Kommunikation steuert. Die Schaltung dieses Programmierinterfaces ist recht einfach und so ist auch ein Aufbau auf einer Lochraster-Platine möglich. Als Programmiersoftware kommt hier die freie Software AVRDUDE zum Einsatz, welche für Windows und Linux verfügbar ist. AVRDUDE ist eine Kommandozeilen-Anwendung und wer lieber eine grafische Oberfläche möchte, kann sich noch zusätzlich das Programm AVRBurner installieren. Zwar liegt dem USBasp-Paket ein Treiber bei, dieser hat jedoch bei mir nicht funktioniert. Ich empfehle deshalb, das WinAVR-Paket zu laden und dessen Treiber zu benutzen.

www.fischl.de/usbasp/    Homepage von USBasp
savannah.nongnu.org/projects/avrdude/    Homepage von AVRDUDE (leider keine compilierten Versionen downloadbar)
sourceforge.net/project/showfiles.php?group_id=68108    WinAVR Paket, enthält neben einem AVR C-Compiler auch AVRDUDE und den passenden Treiber für USBasp
www.soft-land.de/index.php?page=avrburner    Homepage von AVRBurner

USBprog

USBprog ist ein weiterer interessanter USB-Programmieradapter, der von Benedikt Sauter entwickelt wurde. Dieser besteht aus 2 ICs: einem USBN9604 und einem ATmega32A. USBprog kann mit verschiedener Firmware geladen und somit für unterschiedliche Zwecke genutzt werden - die Programmierung von AVRs ist nur eine Anwendung davon. Wer den Selbstbau scheut, kann einen vormontierten Bausatz im Shop des Entwicklers bestellen. Ich habe USBprog nicht selbst gestestet, aber es wurde u.a. in der Zeitschrift Elektor publiziert, so dass man davon ausgehen kann, das es zuverlässig funktioniert. Da USBprog mit dem AVR ISP 2 von ATMEL kompatibel ist, kann man direkt im AVR Studio damit arbeiten.

www.embedded-projects.net/index.php?page_id=135    Homepage von USBprog

Diamex DX-ISP

Zum Schluss möchte ich noch einen fertigen USB-Programmer vorstellen. Ein freundlicher Basterlerkollege hat mir diesen Tip gegeben und ich habe daraufhin ein Exemplar bestellt. Dieses Gerät kostete bei der Erstellung des Textes 17,90€ und ist wirklich sein Geld wert. Nach der Installation des Treibers wird ein neuer COM-Port erstellt und über diesem kann man auf den Programmer zugreifen. Er benutzt das STK500v2 Protokoll, so das man z.B. direkt mit AVR-Studio programmieren kann. Es werden sowohl alle aktuellen ATmega, ATtiny als auch die alten AT90 Controller unterstützt. Diesen Programmer habe ich für die Entwicklung der Tischuhr verwendet.

www.srt-versand.de    Hier ist der Diamex DX-ISP USB-Programmer unter der Artikelnummer 5050112 erhältlich.


Allgemeines - Projekt-Überblick - Links, Software - Neuigkeiten - "Klassiker" - Galerie - Impressum
AVR-Programmierung - AVR-Bootloader - Multifunktionsuhr - Tischuhr - Wohnraumuhr - Wecker - Zahnputzuhr - BigBen-Türgong - Fahrtregler - EPROM-Programmiergerät - Temperaturmesssystem - USB-RS232 Interface - Kleine Projekte