Vorwort
Im folgenden habe ich einen vergleichsweise umfangreichen Artikel verfasst, der sich mit dem einfachen und vor allem preiswerten aber insbesondere unkomplizierten Einstieg in die Programmierung von Mikroprozessoren beschäftigt. Statt auf die Software Atmel Studio des gleichnamigen Chipherstellers setze ich ausdrücklich auf Eclipse, da diese Entwicklungsumgebung auch andere Programmiersprachen unterstützt und sicherlich auch schon auf manchem Rechner vorhanden ist. So spart man sich die Installation zusätzlicher Software und findet sich gleichzeitig in einer (vielleicht) bereits bekannten Entwicklungsumgebung wieder.
Dieses Tutorial beschäftigt sich ausdrücklich nicht mit dem Erlernen der Programmiersprache C oder dem Programmieren selbst, sondern um die kostengünstige Beschaffung, Installation und Einrichtung der benötigten Hard- und Software.
Es wurde deshalb in zwei Teile gegliedert: Den Hardware-Kauf und die Software-Installation. Ist bereits Hardware vorhanden, kann der erste Teil ggf. einfach übersprungen werden.
Hardwarebeschaffung und Kaufüberlegungen
Als ich mich vor rund einem Jahr erstmals selbst in die Materie rund um Mikroprozessor und Atmega eingearbeitet habe, stand vor allem der Kostenfaktor im Vordergrund. In vielen Foren wird direkt auf vergleichsweise teure Programmierhardware und Entwicklungsboards verwiesen. Mit 30-100 Euro fallen diese Preise sicher nicht in die Kategorie exorbitant teuer, gleichzeitig lässt sich hier durch geschicktes Kaufen und einige Tricks dennoch Geld sparen. Ich bin stattdessen der Meinung, dass bereits ein minimales Etar von 15 Euro einen guten Einstieg ermöglicht.
Entwicklungsboard und -plattform
An sich sind für die Programmierung von Mikrocontrollern nur drei Dinge erforderlich: Der eigentliche Mikroprozessor, ein passender Programmer sowie einige wenige Dioden und Widerstände. Für ersteren ist, zumindest bei klassischen Modellen, ein Betrag zwischen etwa einem und drei Euro fällig, der Zweite kostet minimal drei bis vier Euro, während die Preisspanne nach oben hin praktisch offen ist. Mit etwas Draht lassen sich die Anschlüsse des Programmers (auch In-System-Programmer, abgekürzt ISP) nun mit dem Mikrocontroller (im Folgenden auch µC) und den noch nötigen Einzelteilen verbinden. Mehr braucht es eigentlich nicht. Eine minimalistischer Schaltplan findet sich zum Beispiel bei mikrocontroller.net, der Quarz ist nicht unbedingt nötig.
Die Umsetzung in die Praxis scheitert aber spätestens an der begrenzten Anzahl an Händen, die einem Menschen zu Verfügung stehen. Wir müssten die 4-5 benötigten Drähte selbst an die Beinchen des Mikrocontrollers und gleichzeitig den ISP halten. Das ist nicht nur fummelig, sondern schlichtweg unmöglich. Außerdem: Spätestens bei der einfachsten denkbaren Anwendung, etwa einer blinkenden LED, muss auch diese mit dem Mikroprozessor verbunden werden. An ein “Ranhalten” des Drahts an die Beinchen ist kaum zu denken.
Aus klassischen Elektronik-Baukästen kennt man sicherlich die sogenannten “Breadboards”, auf denen sich einfach und bequem elektronische Schaltungen aufbauen lassen. Das funktioniert auch mit dem oben verlinkten Schaltplan, auch wenn man die Beinchen des µC möglicherweise nur “auf biegen und brechen” in die Löcher des Boards bekommt. Diese Lösung ist gar nicht so schlecht, besitzt aber weiterhin einen Nachteil: Die einzelnen Ports (also dort, wo Bauteile angeschlossen werden) des Mikrocontrollers müssen immer im Datenblatt (hier verlinkt: Datenblatt des Atemga 8) des Herstellers nachgeschlagen und anschließend am Chip abgezählt werden. Außerdem müssen weiterhin auch die zusätzlichen Bauteile auf dem Boards einmalig platziert werden.
Die nächste Möglichkeit: Alle benötigten Bauteile, einen Sockel (dieser lässt sich fest verlöten, der Mikroprozessor kann dann einfach “eingelegt” und bei Defekt oder Bedarf getauscht werden) für den µC, eine Reihe von Buchsenleisten und am Ende noch eine Lochrasterplatine kaufen. Im Anschluss müssen diese noch verlötet werden, dafür ist man im Besitz eines eigenen “Entwicklungsboards”. Der Aufbau dauert je nach Lötkenntnissen etwa zwei bis drei Stunden, ist frickelig und in meinem Fall funktionierte am Ende ein Port der Port-C-Reihe nicht (wenn euch das nichts sagt: Keine Angst, wird in der Einführung von Mikroprozessor.net näher erläutert, mehr zu dieser Einführung am Ende des Artikels). Im Gegenzug verbessern sich so sicher die eigenen Lötfähigkeiten (vergleiche Bild).
Deutlich komfortabler und nicht viel teurer ist die Nutzung eines Arduino-Klons. Arduino ist eine eigenständige Plattform zum Experimentieren mit Mikrocontrollern. Der Hauptunterschied ist die etwas unterschiedliche Programmiersyntax sowie ein Betriebssystem, das standardmäßig etwa 2 Kilobyte des Programmspeichers der Mikroprozessoren einnimmt. Das mag sich nicht nach viel anhören, aber bei einem verfügbaren Speicher von 32 Kilobyte relativiert sich diese Größe schnell.
Auf Amazon finden sich solche Klone des Arduino Uno (besitzt einen ATmega 328, der sich meiner Meinung nach für den Einstieg am besten eignet, da er ggf. auch später auf Lochrrasterplatinen o.ä. verlötet werden kann) ab etwa 12 Euro. Günstiger (ab etwa 6 Euro) geht es auf unbekannteren chinesischen Webseiten mit etwas missverständlichen Namen wie etwa banggood.com, die ähnlich wie eBay aufgebaut und durchaus seriös sind. Dafür beträgt die Lieferzeit etwa einen Monat. Vereinzelt lassen sich ähnliche Angebote, ebenfalls aus Fernost, auch auf eBay finden – einfach auf beiden Webseiten nach “Arduino Uno” suchen. Über den Zoll muss man sich übrigens keine Gedanken machen: Warensendungen bis 26 Euro unterliegen weder einer Zahlung der Umsatzsteuer (19% zusätzlich) noch irgendwelchen Zöllen. Angaben natürlich ohne Gewähr.
Schöner Vorteil bei der Arduino-Lösung: Wenn das “blanke” Mikroprozessor-Programmieren doch nichts für einen ist, lässt sich immernoch auf die Arduino-Plattform umsatteln. Wurde der µC dann bereits einmalig mit einem eigenen Programm beschrieben, muss allerdings ggf. das Arduino-Betriebssystem wieder auf den Chip übertragen werden.
Ein kleiner Hinweis noch: Die Anschlüsse auf dem Arduino-Entwicklungsboard sind von 1 bis X durchnummeriert. Sie entsprechen damit nicht der Bezeichnung von Port B bis Port D im Datenblatt von Atmel. Eine kurze Markierung auf dem Board löst dieses Problem (siehe Bild). In der Abbildung unten ist Port B1 Nummer 8, Port B6 Nummer 13. Wer nicht genau weiß, was ich meine: Diesen Absatz einfach überspringen und das Bild zur Rate ziehen. Ein wirklicher Nachteil ist das nicht, spätestens nach kurzer Beschäftigung mit der tatsächlichen Programmierung der Chips wird dann klar, was hier gemeint ist.
Programmer / ISP
Zuletzt fehlt nun noch der Programmer. Ebenfalls aus Fernost finden sich eine Reihe von bereits vorgelöteten und fertigen USBasp-Programmierern. Mit Preisen ab 2,30 Euro aus China und 4,00 Euro aus Deutschland geht es kaum günstiger. Der Programmer enthält bei den meisten Angeboten ein zehnpoliges ISP-Kabel – wenn ihr ein Angebot mit sechspoligem Anschluss findet, so nehmt dieses in Anspruch – andernfalls wird noch ein passender Adapter benötigt, der für etwa 1,50 Euro inklusive Versand aus China zu haben ist (nach “ISP adapter” suchen). Alternativ lässt sich dieser mit passenden Steckerleisten (Abstand 2,54mm) auch eigenhändig zusammenlöten. Wer auf Nummer sicher gehen will, kann auch direkt zwei Programmer bestellen – so können mögliche Defekte bei einem der beiden Programmer ausgeschlossen werden, falls doch einmal etwas nicht funktioniert. Das spart im Zweifelsfall Frust und Nerven, zumal diese Kosten bei den geringen Preisen kaum ausschlaggebend sind.
Zubehör
Als interessantes Zubehör bieten sich eventuell noch einige Jumper-Kabel an, mit denen sich die Ports des Arduinos bequem mit einem passenden Breadboard (ebenfalls sinnvoll) verbinden lassen. Gerade das Breadboard sowie einige elektronische Kleinteile sind oft bereits durch gekaufte Elektronik-Experimentiersets vorhanden, diese lassen sich möglicherweise “ausschlachten”. Natürlich dürfen auch Kleinteile wie etwa LEDs nicht fehlen.
Zusammenfassung von Hardware und Kosten
Gehen wir unsere kleine Einkaufsliste nun noch einmal kurz durch. Ich gehe dabei jeweils von den günstigen Preisen aus Fernost aus: Ein Arduino-Klon für 6,50 Euro, der Programmer inklusive Adapter für rund 5 Euro sowie eine Breadboard, Jumper-Kabel und einige Kleinteile für circa 7,50 Euro. Sind letztere bereits vorhanden ist der im Titel beworbene günstige Einstieg in die Programmierung von Mikroprozessoren bereits für 11,50 Euro möglich – wohlgemerkt für ein halbwegs anständiges Entwicklungsboard und einen passenden Programmer. Mit Kleinteilen ist man ab 18 bzw. aufgerundet 20 Euro dabei.
Software-Installation
Zur Installation der benötigten Software werden insgesamt fünf Komponenten benötigt, wobei einzelne dabei unter Umständen schon auf dem System vorhanden sein können. Dies ist nötig, bevor wir unsere zuvor gekaufte Hardware-Konfiguration erstmals testen. Die nachfolgende Liste enthält entsprechende Download-Links sowie einige Anmerkungen.
- USBasp-Treiber
Der zuvor unter “Hardware” genannte, rund 3-4 Euro teure Controller basiert auf dem USBasp-Layout von Thomas Fischl. Zum Betrieb unter Windows wird dazu der passende Treiber benötigt, der sich auf der Webseite des Autors herunterladen lässt (Abschnitt “Drivers”). - WinAVR
Hinter dieser kryptischen Abkürzung versteckt sich eine sogenannte Toolchain zur Entwicklung von Software auf Mikroprozessoren wie etwa dem ATmega328. Dabei handelt es sich um ein Softwarebündel, das neben dem Compiler (also der Software, die den C-Programmercode in Maschinensprache übersetzt) auch die Software zum eigentlichen Transfer auf den Mikroprozessor enthält. WinAVR wird seit 2010 nicht mehr gepflegt oder fortgeführt, da der Entwickler mittlerweile selbst hauptberuflich für Atmel arbeitet – die Toolchain lässt sich dennoch weiterhin problemlos nutzen. - Java Runtime Environment / Java Development Kit
Die Entwicklungsumgebung Eclipse benötigt selbst die Java Runtime Environment, da das Programm auf Java-Basis entwickelt wurde. Wer neben der AVR-Programmierung auch in die Java-Programmierung hineinschnuppern möchte, kann sich direkt das komplette Java Development Kit von der Herstellerseite herunterladen und benötigt die Runtime Environment dann nicht mehr, da sie direkt mit heruntergeladen wird. Wichtig: Bitte in beiden Fällen die 32-Bit Version (Windows x86) installieren, auch wenn ein 64-Bit Betriebssystem in Benutzung ist – mehr dazu in der eigentlichen Installationsanleitung weiter unten. - Eclipse
Unter diesem Namen versteckt sich eine multifunktionale Programmierumgebung. Anfangs mag das Arbeiten mit Eclipse etwas unhandlich sein, hat man sich aber erst einmal zurechtgefunden, lernt man das Programm schnell schätzen. Auch hier gilt: Bitte die 32-Bit Version herunterladen, selbst wenn ein 64-Bit Betriebssystem in Verwendung ist. Auf der Downloadseite gibt es zudem unterschiedliche Versionen, die Standardausführung ganz oben ist absolut ausreichend. - AVR Eclipse (Plugin)
Mit dem AVR Eclipse-Plugin lässt sich die AVR-Toolchain (in unserem Fall WinAVR) unter Eclipse integrieren. Damit lassen sich C-Dateien später in Windeseile kompilieren und direkt auf den Mikroprozessor übertragen, ohne dass große Umwege über die Konsole notwendig sind. Ein Download wird später mit dem Installations-Assistenten von Eclipse durchgeführt, aus diesem Grund ist kein Downloadlink hinterlegt.
Installation des USBasp-Treibers
Zu Beginn der Software-Installation wird der gekaufte USBasp-Programmierer direkt in einen USB-Port des Computers gesteckt. Dabei sollte es sich, wenn möglich, um einen Port direkt auf dem Mainboard (also auf der Hinterseite des PC-Gehäuses) handeln. Der Grund: Bei zu langen USB-Kabeln wird das Gerät nicht korrekt erkannt. Zu dieser Leitungslänge zählt auch die integrierte Verdrahtung, etwa von Mainboard zu den USB-Anschlüssen auf der Vorderseite des Gehäuses. USB-Hubs und ähnliche Peripherie sollte weitesgehend vermieden werden.
In jedem Fall sucht Windows nach Anschluss des Geräts erst einmal nach Treibern. Im Anschluss und ebenfalls in beiden Fällen erscheint dann das Dialogfenster “Die Gerätetreibersoftware wurde nicht installiert”. Bei korrekter Identifikation des Geräts durch den PC erscheint auch der Gerätename “USBasp” auf dem Schirm, andernfalls ist lediglich von einem “Unkown Device” die Rede. In letzterem Fall liegt meist der oben genannte Fehler vor!
Zur Installation der Treiber muss nun der Geräte-Manager geöffnet werden. Dazu kann unter Start einfach nach “Geräte-Manager” gesucht werden. Unter dem Reiter “Andere Geräte” sollte der USBasp-Programmer zu finden sein, nun ist ein Rechtsklick auf den Eintrag mit anschließendem Klick auf “Treibersoftware aktualisieren” nötig.
Im nachfolgenden Dialogfenster bietet das Betriebssystem zwei Optionen an, die korrekte Wahl fällt auf “Auf dem Computer nach Treibersoftware suchen.”
Nun navigieren wir zu dem zuvor heruntergeladenen Ordner auf unserer Festplatte. In der Liesmich-Datei des Entwicklers von USBasp wird empfohlen, bei Nutzung mit WinAVR die ältere Dateiversion zu nutzen (0.1.12.1).
Nach Klick auf “OK” berichtet Windows, dass der Herausgeber der Treibersoftware nicht überprüft werden konnte. In unserem Fall ist die Quelle jedoch vertrauenswürdig und (als privater Entwickler) nicht digital verifiziert, daher wird die Installation mit der entsprechenden Bestätigung fortgesetzt.
Möglicherweise kommt es im weiteren Verlauf der Installation zur Fehlermeldung “Fehler beim Installieren der Treibersoftware für das Gerät.” – in diesem Fall wiederholen wir die Installation (gehen also im Geräte-Manager erneut auf “Treibersoftware aktualisieren”), wählen nun aber die neuere Version des Treibers aus. Im Anschluss sollte der Treiber erfolgreich installiert werden.
Installation von WinAVR
Deutlich problemloser geht für gewöhnlich die Installation der WinAVR-Toolchain vonstatten. Auf der oben hinterlegten Sourceforge-Seite wird erst der Ordner mit der neuesten Version ausgewählt (zur Zeit und wohl auch in Zukunft 20100110), durch ein Klick auf die anschließend angezeigte *.exe-Datei wird diese heruntergeladen. Bei der nachfolgenden, Windows-typischen Installation gibt es nur einen einzigen Fallstrick: Der Installationspfad darf unter keinen Umständen Leerzeichen enthalten. Bedeutet im Klartext: “C:\Programme (x86)\WinAVR” ist zum Beispiel nicht möglich, “C:\WinAVR” sollte hingegen ohne Probleme funktionieren.
Installation der Java Runtime Environment bzw. des Development Kit
Je nach Programmierambitionen im Java-Bereich muss nun eines der beiden genannten Softwarepakete installiert werden. Möchte man mit Eclipse wirklich nur im C- und C++-Bereich unterwegs sein, so sollte man zur ersten Möglichkeit greifen. Andernfalls bietet sich direkt die Installation des JDK an, da dieses die JRE bereits enthält. Unabhängig vom verwendeten Betriebssystem muss hier aber in jedem Fall die 32-Bit Version verwendet werden. Bei Wahl der 64-Bit-Version gibt es später Kompatiblitätsprobleme mit dem C-Compiler, dieser funktioniert lediglch mit der 32-Bit-Version von Eclipse und damit der 32-Bit-Version der JRE bzw. JDK. Bei der Installation sollte es zu keinen Problemen kommen.
Installation von Eclipse
Ist Eclipse heruntergeladen, muss es nur noch in einen passenden Ordner (sinnvollerweise direkt C:\Programme\Eclipse o.ä.) extrahiert werden, eine Installation ist nicht notwendig. Auch hier wird wieder die 32-Bit Version benötigt. Beschwert sich das Programm beim ersten Programmstart, dass keine korrekte Java-Version vorhanden ist, sollte der PC neugestartet werden. Existiert die Fehlermeldung weiterhin, so wurde möglicherweise die falsche Java-Version (JDK bzw. JRE) installiert (etwa 64-Bit Version von Eclipse und 32-Bit Version von Java – in beiden Fällen bitte die 32-Bit Varianten verwenden!). Alternativ kann auch eine falsch gesetzte PATH-Variable Grund für die Misere sein, zur Behebung des Problems bietet sich eine traditionelle Suchmaschinen-Anfrage an (“Eclipse kann Java Development Kit nicht finden”).
Beim Start von Eclipse wird zudem nach dem “Workspace” des Benutzers gefragt. Hier werden automatisch alle Eclipse-Projekte abgelegt und gespeichert. Mit der Standardoption unter “C:\Benutzer\Benutzername\workspace” macht man meist nichts falsch; wird der Haken unter “Use this as default and do not ask me again” nicht gesetzt, so erscheint das Dialogfeld so oder so beim nächsten Programmstart erneut.
Installation des AVR Eclipse Plugins
Als letzter Schritt muss nun noch das passende Plugin für Eclipse heruntergeladen und installiert werden. Das passiert direkt im Programm selbst; im Menü unter Help -> Install New Software findet sich dazu die passende Option.
Nun muss unter “Work with:” die URL des Plugins eingetragen werden. Diese lautet “http://avr-eclipse.sourceforge.net/updatesite” und wird mit einem Klick auf “Add” bestätigt. Erneut erscheint ein Dialogfenster, nach Festlegung eines passenden Namens und Klick auf “OK” lädt die Liste nun. Dies kann, insbesondere bei langsameren Internetverbindungen oder überlaufenen Servern durchaus einige Sekunden bis eine Minute in Anspurch nehmen, in Ausnahmefällen auch noch länger.
Eclipse-Konfiguration und erstes Testprogramm
Ist die nötige Software zusammen mit allen Plugins und Treibern installiert, geht es noch an die korrekte Konfiguration von Eclipse. Zum Test der später eingerichteten Konfiguration erstellen wir erst ein neues C/AVR-Projekt.
Natürlich ist ein leeres Projekt nur der Anfang. Es fehlt noch die erste C-Datei, die sich mit einem Rechtsklick auf das neue Projekt im Project Explorer (ggf. über Window -> Project Explorer einblenden) erstellen lässt.
Wir schreiben ein einfaches Programm, um die korrekte Übertragung auf den Mikrocontroller zu testen. Dieses kann zum Beispiel wie folgt aussehen.
#include <avr/io.h>
int main(void){
while(1){ //leere While-Schleife}
return 1;
}
Bevor wir das Projekt übertragen, müssen wir noch einige Einstellungen vornehmen. Diese Einstellungen sind unter Project -> Properties und anschließend unter AVR -> AVRDude und Target Hardware zu finden.
Ein letzter Schritt bevor unser Testprojekt das erste Mal kompiliert wird: Rechts neben dem Hammer in der Navigationsleiste findet sich ein kleiner Reiter. Dieser muss auf “2 Release” umgestellt werden. Anschließend kompilieren wir unser Beispielprojekt das erste Mal, indem wir auf den Hammer oder das “010-Code-Icon” rechts daneben klicken.
Bei Fehlermeldungen müssen diese vor der ersten Übertragung zum Mikrocontroller behoben werden. Für den nächsten Schritt muss dieser nun über das USBasp-Programmierkabel mit dem PC verbunden sein. Ist das der Fall, so testen wir die Übertragung unseres ersten Programms durch einen Klick auf den grünen “AVR-nach-unten” Button. Die “Console” sollte nach einer erfolgreichen Übertragung in etwa wie im Bild unten aussehen.
Mehr zum Thema Atmega- und Mikroprozessor-Programmierung
Unser Tutorial endet an dieser Stelle. Das hat einen ganz einfachen Grund: Die Programmierung von Mikroprozessoren ist ein recht umfangreiches Thema, das sich niemals in einem einzelnen Artikel zusammenfassen ließe – nicht umsonst gibt es ganze Bücherreihen, die sich allein damit beschäftigen. Gleichzeitig existiert auch ein sehr schönes und vor allem umfangreiches Tutorial auf der der Seite mikroprozessor.net, das in seinem Umfang kaum zu überbieten ist. Ich empfehle es deshalb ausdrücklich zum Aneignen des nötigen Know-Hows, zumal auch im Forum viele Detailfragen beantwortet werden können. Selbstverständlich freue ich mich auch über Feedback und Fragen zu diesem Artikel: Hinterlasst einfach ein Kommentar.