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 schwierig ist und hierfür
auch keine speziellen Kenntnisse erforderlich sind. Mit einem preiswerten USB-Programmiergerät sowie der kostenlosen Software myAVR ProgTool können die AVR Mikrocontroller
aller Projekte dieser Seite programmiert werden. Am Beispiel des Projektes Wohnraumuhr wird demonstriert, wie die Hard- und Software unter Windows richtig
konfiguriert und bedient wird.

Status | aktiv |
Letzte Bearbeitung | 02.01.2013 |

Stückliste mit den Bauteilen für das Adapterkabel auf 5-poligen ISP | |
Bezugsquelle für das USB-Programmiergerät mySmartUSB light | shop.myavr.de/index.php?sp=article.sp.php&artID=200006 |
Treiber für das USB-Programmiergerät mySmartUSB light | shop.myavr.de/index.php?sp=download.sp.php&suchwort=dl46 |
Konfigurationsprogramm mySmartUSB light - SupportBox | shop.myavr.de/index.php?sp=download.sp.php&suchwort=dl197 |
Programmier-Software myAVR ProgTool | shop.myavr.de/index.php?sp=download.sp.php&suchwort=dl112 |

Allgemeines | Allgemeine Informationen über die Programmierung von Mikrocontrollern |
Hardware | Installation des Programmiergerätes mySmartUSB light |
Software | Installation und Konfiguration der Software mySmartUSB light - SupportBox und myAVR ProgTool |
Andere Programmiergeräte | Weitere Programmiergeräte und Programmieradapter für AVR-Mikrocontroller |
Der Begriff Programmieren wird im Zusammenhang mit Mikrocontrollern für 2 verschiedene Dinge verwendet, was oft zu Missverständnissen führt. Zum einen beschreibt dieser Begriff die Tätigkeit, ein Programm für einen Mikrocontroller zu entwickeln und zum anderen beschreibt er den Vorgang, ein fertig entwickeltes Programm in den Speicher eines Mikrocontrollers zu übertragen. Auf dieser Seite soll es um letzteres gehen, d.h. ich möchte am Beispiel eines Projektes zeigen, wie man ein Programm in den Mikrocontroller überträgt und das Projekt damit zum Leben erweckt. Hierfür sind übrigens keine speziellen Kenntnisse über Mikrocontroller und Programmiersprachen erforderlich.
Bis auf eine Ausnahme werden in meinen Projekten Mikrocontroller aus der AVR-Produktreihe der Firma Atmel verwendet. Ein großer Vorteil dieser Controller ist, dass sie über eine relativ einfache Schnittstelle programmiert werden können. Diese besteht aus 4 Leitungen (und einer Masseleitung), über die ein Programm seriell in den Speicher des Mikrocontrollers übertragen werden kann. Der Controller kann bei dieser Prozedur in der Schaltung verbleiben und muss nicht ausgebaut werden. Hier hat sich der Begriff ISP (In System Programming) durchgesetzt und alle Projekte auf meiner Seite können über diese ISP-Schnittstelle programmiert werden. ISP bietet aber noch mehr: Es können neben dem Programm auch Daten (z.B. mit Voreinstellungen) im Controller abgelegt werden und es besteht die Möglichkeit, den Controller über so genannte Fuse-Bits zu konfigurieren.Folgende Begriffe werden im Zusammenhang mit der Programmierung immer wieder auftauchen, deshalb möchte ich sie kurz erläutern:
Begriff | Beschreibung |
---|---|
Flash | Mit Flash wird der Speicher im Mikrocontroller bezeichnet, in dem das Programm abgelegt wird. Wird der Controller eingeschaltet, dann beginnt er mit dem Lesen des Flash-Speichers bei Adresse 0 und interpretiert diese Informationen als Befehle. Der Flash-Speicher muss also in jedem Fall programmiert werden, damit der Controller überhaupt arbeiten kann. Zu jedem Mikrocontroller-Projekt gehört eine Datei projektname.hex - diese enthält immer das Programm für den Flash-Speicher des Controllers. Dieser Speicher kann übrigens nur komplett gelöscht und neu beschrieben werden, die Änderung einzelner Bytes ist nicht möglich. |
EEPROM | Dieser Speicher ist dafür gedacht, Daten aller Art aufzubewahren (z.B. Einstellungen oder vom Benutzer eingegebene Daten). Bei einigen älteren Projekten ist es erforderlich, Daten in das EEPROM zu programmieren. Dies erkennt man daran, dass dem Projekt eine Datei projektname.eep beiliegt. Fehlt diese Datei, dann braucht man sich nicht um das EEPROM zu kümmern. |
Fuse-Bits | Über diese Bits werden grundsätzliche Funktionen des Controllers eingestellt: Taktquelle, Start-Bedingungen, Debug-Funktionen, Bootloader, Speicherschutz und anderes. Die Fuse-Bits können leider nicht als Datei in den Controller geladen werden. Sie müssen zunächst in einer Eingabe-Maske gesetzt und anschließend an den Controller gesendet werden. Bei allen Projekten dieser Seite zeigt ein Bild die richtigen Einstellungen, außerdem befindet sich eine Datei projektname-fusebits.gif im Download-Paket jedes Projektes. |
Alle in der Tabelle beschriebenen Elemente haben übrigens die Eigenschaft, dass der programmierte Inhalt dauerhaft gespeichert wird, also auch bei Abschaltung der Stromversorgung erhalten bleibt. Außerdem ist jederzeit eine Neuprogrammierung möglich.
Ich beschäftige mich inzwischen seit vielen Jahren mit AVR-Mikrocontrollern und in dieser Zeit habe ich verschiedene Programmiergeräte oder Programmieradapter benutzt und getestet. Lange Zeit war ein einfacher, selbst gebauter Adapter für die parallele oder serielle Schnittstelle mein Favorit. Aber die Technik entwickelt sich weiter und der USB-Anschluss hat inzwischen die parallelen und seriellen Anschlüsse (LPT und COM) am PC komplett verdrängt. Aus diesem Grund ist es heute sinnvoll, ein Programmiergerät mit USB-Anschluss zu verwenden.

Auf der eben genannten Seite befindet sich auch ein Link zum Treiber-Download (shop.myavr.de/index.php?sp=download.sp.php&suchwort=dl46). Wichtig: Nach dem Download muss zunächst der Treiber installiert werden und erst dann darf man das Programmiergerät an den PC anschließen. Die Treiber-Installation kann einige Minuten in Anspruch nehmen und erfolgt in mehreren Schritten, dabei ist immer mal ein Mausklick zur Fortsetzung erforderlich. Wenn das geschafft ist, kann das Programmiergerät angeschlossen werden und ist dann nach kurzer Zeit betriebsbereit. Am Programmiergerät muss dann in der Nähe des USB-Anschlusses eine blaue LED aufleuchten, wahrscheinlich leuchtet außerdem noch die LED 5V auf. Nach der Installation muss in der Systemsteuerung (Geräte-Manager) bei den Anschlüssen ein Silicon Labs CP210x USB to UART Bridge (COMxx) hinzugekommen sein. Wichtig für die weitere Arbeit ist der in Klammern stehende COM-Port und deshalb sollte dieser notiert werden.
Im Prinzip ist das Programmiergerät damit einsatzbereit. Über das beiliegende Kabel, welches dem 6-poligen ISP-Standard von Atmel entspricht, kann man das Programmiergerät mit dem ISP-Anschluss eines Projektes verbinden. Leider haben nur wenige meiner Projekte einen passenden ISP-Anschluss und das hat folgenden Grund: Als ich mit der AVR-Programmierung anfing, benutzte ich einen selbst gebauten Programmier-Adapter und wählte ein eigenes System für den Steckverbinder und die Anschlussbelegung. Bei meinem System kommen einreihige IC-Sockelleisten zum Einsatz, die man ineinander stecken und somit sowohl als Buchse auf der Platine als auch als Stecker für das Programmierkabel verwenden kann. Hier muss also noch ein Adapter-Kabel gebaut werden.
Ich habe mir übrigens fest vorgenommen, in künftigen Projekten nur noch den 6-poligen Standard-Anschluss von Atmel zu verwenden.
Für die Arbeit mit dem mySmartUSB light sind mindestens 2 Programme erforderlich:
- mySmartUSB light - SupportBox - Dieses Programm wird benötigt, um das Programmiergerät zu konfigurieren.
- myAVR ProgTool - Mit diesem Programm kann die Programmierung durchgeführt werden.
Im folgenden Abschnitt werden die beiden Programme noch etwas ausführlicher beschrieben. Wer nicht nur Mikrocontroller-Schaltungen nachbauen, sondern auch modifizieren oder komplett neu entwickeln möchte, dem empfehle ich die Installation des Atmel Studio, welches mittlerweile in Version 6 vorliegt (Stand 12/2012). Dieses enthält auch ein Programmiermodul, welches über die Einstellung STK500 mit dem mySmartUSB light zusammenarbeiten kann.
Übrigens, in früheren Versionen dieses Textes hatte ich das AVR Studio 4 anstatt des myAVR ProgTool empfohlen. Inzwischen sehe ich das etwas anders, denn das AVR Studio 4 ist nicht mehr aktuell und nachfolgende Versionen sind so groß geworden (über 1GB), dass es nicht wirklich sinnvoll ist, diese nur für die Programmierungs-Funktion zu installieren.
mySmartUSB light - SupportBox
Im großen Feld darunter wird zunächst eine Info-Seite angezeigt. Nach dem Klick auf die Seite Konfiguration erscheint das nebenstehende Bild, wobei im Auslieferungszustand die Option Stromversorgung beim Brennen auf aktiv gesetzt ist.
Über die Einstellung Versorgungsspannung wird der Programmieranschluss auf die Spannung des angeschlossenen Projektes eingestellt. Diese Einstellung hat nicht nur Einfluss auf die Ausgangsspannung zur Versorgung des Projektes, sondern auch auf die Logikpegel der Programmierleitungen. Diese Einstellung muss unbedingt beachtet werden, auch wenn das angeschlossene Projekt nicht vom Programmiergerät versorgt wird. Bis auf wenige Ausnahmen (z.B. den Akku-Alarm für Modell-Helikopter) arbeiten alle Projekte auf meiner Seite mit 5V. Beim erwähnten Projekt Akku-Alarm sind 3V einzustellen.Die Einstellung Stromversorgung beim Brennen legt fest, ob das Programmiergerät das angeschlossene Projekt während des Programmiervorgangs mit Strom versorgen soll oder nicht. Alle Projekte auf meiner Seite haben eine eigene Stromversorgung und sind nicht für eine Versorgung über das Programmiergerät geeignet. Aus diesem Grund empfehle ich die Einstellung inaktiv wie im nebenstehenden Bild zu verwenden.
Über die beiden Buttons Power On und Power Off lässt sich die Versorgungsspannung zu Testzwecken ein- und ausschalten. Diese Funktion wird hier nicht benötigt.Über die Seite Firmware lässt sich die Firmware des Programmiergerätes updaten oder durch eine alternative Firmware ersetzen. Ich verwende ausschließlich die STK500-Firmware, die bereits vorinstalliert ist. Gegebenenfalls sollte man diese noch auf den aktuellen Stand bringen.
Die Einstellung der Versorgungsspannung und der Stromversorgung beim Brennen wird übrigens im Programmiergerät gespeichert.
myAVR ProgTool
Nach dem Start präsentiert sich das myAVR ProgTool so wie im nebenstehenden Bild. Hier ist auch schon die Seite Brennen aktiviert, über die später der
Programmiervorgang gesteuert wird.
Jetzt ist übrigens auch ein guter Zeitpunkt, das Programmiergerät und auch den zu programmierenden Mikrocontroller anzuschließen. Ich empfehle dabei folgendes Vorgehen:
- Herstellen der Verbindung zwischen dem mySmartUSB light und dem zu programmierenden Mikrocontroller
- Anschließen des mySmartUSB light an den PC
- Einschalten der Stromversorgung des Mikrocontrollers
Für die nachfolgende Beschreibung habe ich die Wohnraumuhr als Beispiel ausgesucht. Wir verbinden also das 6-polige Kabel des mySmartUSB light mit dem ISP-Anschluss der Wohnraumuhr und stecken dann das mySmartUSB light an einen USB-Port des PCs. Anschließend wird die Wohnraumuhr eingeschaltet.
Hier wurde das mySmartUSB light erkannt und auch die aktuellen Einstellungen sind zu sehen. Es ist sogar möglich, die Einstellungen zu ändern, denn alle blauen Felder können angeklickt werden. Interessant ist hier der letzte Eintrag - es wurde nämlich auch der angeschlossene Mikrocontroller erkannt. Ein Klick auf das Feld ATmega8535 übernimmt diesen Controller-Typ und trägt ihn in die entsprechende Auswahlbox ein (siehe nächstes Bild).
Wichtig: Wenn hier ein Fehler auftritt, dann sollte man nicht versuchen, einen Programmiervorgang zu starten. Es muss zuerst der Fehler beseitigen werden - also nochmals alle Verbindungen prüfen und auch kontrollieren, ob die Stromversorgung des Controllers in Ordnung ist.
Damit sind alle Vorbereitungen abgeschlossen und die eigentliche Programmierung kann beginnen. Für unser Beispiel benötigen wir jetzt die aktuelle Software der Wohnraumuhr. Hier gibt es (abhängig von der Hardware) 4 Versionen, ich entscheide mich einfach mal für die Standard-Version. In diesem Zip-Archiv sind folgende Dateien enthalten:
Datei | Beschreibung |
---|---|
wohnuhr.asm | Diese Datei enthält den Quelltext für die Wohnraumuhr-Software und wird hier nicht benötigt. |
wohnuhr.hex | Diese Datei enthält das Programm für den Mikrocontroller, diese muss in den Flash-Speicher programmiert werden. |
wohnuhr.eep | Diese Datei enthält Daten für die Grundeinstellung der Wohnraumuhr, diese muss in das EEPROM programmiert werden. |
wohnuhr-fusebits.gif | Dieses Bild zeigt die richtige Einstellung der Fuse-Bits, hier stehen im unteren Teil des Bildes die für uns wichtigen Informationen: HIGH 0xD1 und LOW 0x3F |
Nun geht es endlich zur Sache: Nach dem Wechsel auf die Seite Brennen werden hier alle Daten für unser Projekt eingegeben.
Die Fuse-Bits müssen natürlich auch noch richtig eingestellt werden, also werden noch Haken bei Fuses brennen:, Low: und High: gesetzt und das Feld bei Low: mit 3F sowie das Feld bei High: mit D1 ausgefüllt.
Wie kommen diese Werte zustande? Die Fuse-Bits sind wie Speicherzellen organisiert, bestehen also aus 8 Bits, die zu einem Byte zusammengefasst sind. Insgesamt haben AVR-Mikrocontroller bis zu 3 solcher Bytes, die mit Low, High und Extended bezeichnet werden. Der ATmega8535 in unserem Beispiel besitzt nur die Bytes Low und High und die optimalen Einstellungen für die Wohnraumuhr ergeben die beiden genannten Werte. Diese Einstellungen sind (wie bereits erwähnt) auf dem Bild wohnuhr-fusebits.gif ganz unten zu sehen.Übrigens, über den Button Bearbeiten kann man die Fuse-Bits auch editieren, auf die Default-Werte des Herstellers zurücksetzen und auch direkt aus dem Controller auslesen oder in den Controller schreiben. Hier ist aber immer Vorsicht geboten, denn eine falsche Fuse-Bit-Einstellung kann dazu führen, dass der Controller nicht mehr mit dem Programmiergerät kommuniziert und dadurch unbrauchbar wird. Insbesondere Einsteigern empfehle ich, die in meinen Projekten empfohlenen Werte wie im Bild unverändert zu übernehmen.
Jetzt wird es spannend: Wenn alle Einstellungen nochmals kontrolliert worden sind (insbesondere die der Fuse-Bits), dann wird auf den Button Brennen (F5) geklickt und die Sicherheitsabfrage mit einem Klick auf Ja bestätigt.
Das myAVR ProgTool wechselt jetzt automatisch zur Seite Ausgabe und zeigt dort alle weiteren Aktivitäten an. So wird zunächst der
Flash-Speicher des Controllers geschrieben, anschließend das EEPROM und zum Schluss werden noch die beiden Bytes mit den Fuse-Einstellungen in den
Controller übertragen. Das Ganze geht recht schnell und dauert nur wenige Sekunden. Anschließend sollte das Ergebnis so aussehen wie im nebenstehenden Bild und damit ist die gesamte Aktion erfolgreich
abgeschlossen.
Jetzt kann das Programmiergerät von der Schaltung entfernt werden und hier ist folgende Reihenfolge empfehlenswert:
- Ausschalten der Stromversorgung des Mikrocontrollers
- Abziehen des mySmartUSB light vom PC
- Trennen der Verbindung zwischen dem mySmartUSB light und dem zu programmierenden Mikrocontroller
Der Vollständigkeit wegen möchte ich noch die Seite Auslesen erwähnen. Damit lässt sich sowohl der Inhalt des Flash als auch der Inhalt des EEPROM auslesen und als Datei speichern.
Es gibt noch eine ganze Reihe weiterer Programmiergeräte für AVR-Mikrocontroller. So bietet natürlich die Herstellerfirma Atmel selbst verschiedene Geräte an, die zum Teil enorm leistungsfähig sind und dadurch auch ihren Preis haben. Als Beispiele sollen hier der Klassiker STK500 (ca. 85€) und das aktuellere Modell AVR Dragon (ca. 60€) genannt werden. Letzteres benutze ich selbst und bietet neben der Programmierung über ISP auch Debugging-Funktionen über JTAG und DebugWIRE.
Weiterhin gibt es noch ganz einfache Programmieradapter, die man mit wenig Aufwand selbst bauen kann. Diese werden an einen parallelen (LPT) oder seriellen Port (COM) an den PC angeschlossen und erfordern eine spezielle Programmier-Software. Ich habe selbst über einen längeren Zeitraum mit solchen Adaptern gearbeitet und diese hier auch dokumentiert. Wer sich für so einen einfachen Programmier-Adapter interessiert, der findet auf der alten Seite AVR-Programmierung alle Informationen.