C-Programmierung mit AVR-GCC/ Benötigte Werkzeuge


Diese Seite basiert auf dem Text, der vom mikrocontroller.net/articles/AVR-GCC-Tutorial#Benötigte_Werkzeuge übernommen wurde. Dieser Text steht unter der Creative Commons Lizenz BY-SA, die nur die Namensnennung erforderlich macht. Die Liste aller Autoren findet man in der Versionsgeschichte des AVR-GCC-Tutorials.

Einführung Bearbeiten

 
Ein Mikrocontroller von Atmel

In diesem Buch werden wir uns mit den Mikrocontrollern der Firma Atmel beschäftigen. Der Vollständigkeit halber sei aber auch gesagt, dass auch andere Firmen Mikrocontroller herstellen. Da die Produktpalette aber so groß ist und damit auch die Möglichkeiten der Programmierung steigt, beschränken wir uns hier auf eine Mikrocontroller-Familie.

Die Entwicklung von Programmen von Mikrocontrollern unterscheidet sich stark von der Programmierung auf PC-Systemen. Bei der ersten Betrachtung fallen einige vermeintliche Schwächen und Einschränkungen auf.

Einschränkungen Bearbeiten

Minimale Ressourcen Bearbeiten

Ein Mikrocontroller besitzt nur eingeschränkte Ressourcen. Meist besitzt er im Vergleich zu PC-Systemen nur sehr wenig RAM. Auch der Programmspeicher sieht im ersten Moment nur sehr klein aus. Im Laufe des Buches wirst du aber schnell merken, dass diese Einschränkungen eigentlich gar keine sind. Für die Einsatzmöglichkeiten eines Mikrocontrollers bieten diese genügend Ressourcen um die von Ihnen verlangten Aufgaben zu bewältigen. Oftmals bleibt sogar noch einiges an Platz um weitere Funktionen einbauen zu können.

Kein Betriebssystem Bearbeiten

Da durch den begrenzten Speicherplatz kein herkömmliches Betriebssystem wie Windows oder Linux installiert werden kann, können wir auch nicht auf Funktionen zugreifen, die uns ein Betriebssystem bereitstellen würde. Dazu zählen unter anderem auch Multitasking und Dateiverwaltung. Alle Funktionen, die wir nutzen möchten müssen wir selbst hinzufügen. Entweder durch eigene Programmierung oder durch geeignete Bibliotheken.

Eingeschränktes Debugging Bearbeiten

Das Debugging stellt sich als schwierig heraus, da man ein vom Entwicklungssystem unabhängiges Gerät debuggen möchte. Ein Mikrocontroller kann ohne weiteres nicht mit dem Entwicklungssystem kommunizieren. Daher müssen einige Besonderheiten beachtet werden.

Um einen Mikrocontroller wie ein Programm auf dem PC zu debuggen, benötigt man ein spezielles Gerät, das die Verbindung zwischen Mikrocontroller und PC herstellt. Ebenso ist die Anzahl der Breakpoints, anhand derer man das Programm unterbrechen kann, limitiert. Nur bei teureren Debuggern existiert ein Aufrufstack, der anzeigt, wann welche Routine aufgerufen wurde. Als letzte Einschränkung lässt sich festhalten, dass sich längst nicht alle Mikrocontroller auch auf diese Art und Weise debuggen lassen. Der Mikrocontroller muss eine spezielle Schnittstelle unterstützen, die allerdings nicht auf jeden Mikrocontroller passt, da es doch sehr unterschiedliche Bauformen gibt.

Entwicklungsablauf Bearbeiten

 
AVRISP mkII als Programmer

Aufgrund der oben genannten Einschränkungen, bzw. besser Besonderheiten, sieht auch der Entwicklungsablauf etwas anders aus, als bei PC-Programmen.

Die ersten beiden Schritte sollten jedem aus der allgemeinen C-Programmierung bekannt sein.

  1. Editieren der Quelldateien mit Texteditor
  2. Kompilieren
  3. Übertragen der Dateien auf das Zielsystem
  4. Debuggen

Sobald man etwas ändert, fängt man wieder bei Punkt eins an. Übersetzt das Programm und lädt es auf den Controller herunter. Danach kann das Debuggen beginnen. Das Übertragen auf den Mikrocontroller geschieht über einen sogenannten Programmer. Dazu aber später im Buch mehr.

Entwicklungskette Bearbeiten

Um einen Mikrocontroller programmieren zu können, müssen wir zunächst eine "Entwicklungskette" herstellen. Die Entwicklungskette besteht aus einem PC, mit dem wir das Programm entwickeln und übersetzen, aus einem Programmer, der uns das fertige Programm in den Mikrocontroller lädt, und zum Schluss natürlich auch aus einen funktionierenden Mikrocontroller. Da für die Grundfunktionen eines Mikrocontrollers eine spezielle Schaltung nötig ist und wir uns hier lediglich um die Programmierung kümmern möchten, empfehle ich, für den Anfang erst einmal eine Experimentierplatine zu verwenden. Dann kann man auch sicher sein, dass ein vielleicht auftretender Fehler nicht von der Hardwareschaltung kommt.

Benötigte Hardware Bearbeiten

Um einen Mikrocontroller betreiben zu können benötigst du eine funktionierende Schaltung um den Controller herum. Da wir uns hier in erster Linie nur mit der Programmierung beschäftigen wollen, gehe ich hier nicht detailliert auf die Schaltung ein. Um schnell Erfolge zu erzielen, bietet es sich an, ein fertiges Evaluationboard zu kaufen. Diese Platinen enthalten alle wichtigen Schaltungen, wie zum Beispiel zur Spannungsversorgung oder Takt.

Benötigte Software Bearbeiten

Um eigene Programme für die AVRs zu erstellen, nutzen wir in diesem Buch die Programmiersprache C. Um dieser Programmiersprache beizubringen, wie die einzelnen Funktionen unseres Mikrocontrollers angesteuert werden können, bedarf es einiger Bibliotheken. Eine der hier verwendeten Bibliotheken ist die avr-libc. Diese beinhaltet alle wichtigen Grundfunktionen, um direkt loslegen zu können.

Um unsere Programme, die wir im Laufe dieses Buches schreiben werden, zu übersetzen, benötigen wir noch einen Compiler. Der Compiler, der für die Mikrocontroller von Atmel geeignet ist, ist der Open-Source-Compiler avr-gcc.

Unter Windows können wir WinAVR installieren. Das Softwarepaket enthält den Compiler sowie die Grundbibliothek. Das aktuelle WinAVR erhälst du auf der Sourceforgeseite der Programmierer.

http://sourceforge.net/projects/winavr/files/WinAVR/

Dort kannst du ein Installationspaket herunterladen, das dir den Compiler sowie die Bibliothek installiert.

Unter Linux muss der Compiler und die Bibliothek in der Softwareverwaltung der Distribution installiert werden. Da es eine Menge an Distributionen gibt und hier nicht jeder Weg beschreiben werden kann, soll hier exemplarisch der Installationsweg unter Ubuntu erklärt werden.

In einem Terminal lassen sich alle Softwareteile bequem über einen Kommandozeilenbefehl installieren.

apt-get install gcc-avr avr-libc

Möglicherweise ist zur erfolgreichen Installation noch ein sudo nötig.

Alternativ zu einer Installation unter Verwendung der Paketverwaltung kann auch die Arduino IDE aus dem Internet heruntergeladen werden, die ebenfalls Compiler und Standardbibliothek enthält. Einfach unter dem Link https://www.arduino.cc/en/Main/Software die gewünschte Variante 32-bit bzw. 64-bit auswählen.

Insbesondere unter Xubuntu (16.04) empfiehlt sich das Herunterladen der Arduino IDE.

  1. Die Paketverwaltung enthält zwar eine aktuelle gcc Version (4.9.2).
  2. Die avr-libc liegt allerdings nur in Version 1.8.0svn vor (Release Datum: 2011-12-29)

Die benötigten Werkzeuge finden sich nach Entpacken des Archivs im Unterverzeichnis /hardware/tools/.

Wir haben jetzt die Grundvoraussetzungen geschaffen, um eigene Programme für unseren Mikrocontroller zu programmieren.

Platine oder Versuchsaufbau Bearbeiten

Oben wurde ja schon einmal das Thema Hardware angesprochen. Um seinen Dienst tun zu können, benötigt unser Mikrocontroller eine Schaltung, die ihn mit dem richtigen Takt und mit Spannung versorgt.

Die Erfahrung zeigt, dass es am Anfang leichter ist, mit einer getesteten Hardwareumgebung zu beginnen. Du hast im Fehlerfall nicht das Problem, dass du den Fehler in der Hardware und der Software suchen musst. Du kannst dich also darauf verlassen, dass die Hardware einwandfrei funktioniert und kannst dich ganz auf den Programmcode konzentrieren.

Für erfahrene Elektroniker sollte es allerdings auch kein Problem sein, ein eigenes Testboard auf einer Lochrasterplatine oder Steckbrett aufzubauen. Schaltungspläne gibt es für die unterschiedlichen Mikrocontroller im Internet.

 
Arduino Uno

Für einen schnellen Start ist das Evaluationboard von Pollin oder ein Arduino am besten geeignet. Das Pollinboard kostet als Fertigmodul etwa 23€. Es ist allerdings auch als Bausatz erhältlich. Dann kostet es um die 15€. Die Arduinos gibt es in verschiedenen Ausführungen, teilweise sogar mit Elektronikstartersets, die einige grundlegende Bauteile enthalten. Für einen Arduino Uno sollte man um die 30€ rechnen. Vorteil beim Arduino ist, dass der Programmer schon integriert ist, was bei anderen Boards nicht der Fall ist.

Der Vorteil, dass der Programmer integriert ist, ist auch der Anlass, dass ich mich in diesem Buch des Öfteren auf den Arduino Uno beziehen werde. Auf dem Uno ist ein ATmega328P installiert. Ein weiterer Vorteil ist, dass alle Arduinoboards Open-Source sind. Das bedeutet du kannst dir die Schaltpläne und Bestückungspläne downloaden und somit selbst Boards herstellen oder verändern.


Programmiersoftware und -hardware Bearbeiten

Wenn wir unser erstes Programm endlich erfolgreich übersetzt haben, sollte es auch auf den Mikrocontroller, um dort seine Aufgabe zu erfüllen. Was nützt uns das beste Programm, wenn es auf der Festplatte versauert?

Um Mikrocontroller zu programmieren, nutzt du zum einen einen Programmer. Es gibt viele Programmer zu kaufen; von einigen sind sogar die Schaltpläne online einsehbar. Atmel hat auch einige Programmieradapter entwickelt, die gleichzeitig auch die Debugging-Schnittstelle (JTAG) unterstützen. Programmiert wird ein Mikrocontroller von Atmel per ISP-(In-System-Programmable-)Schnittstelle. Es gibt auch Projekte, die die serielle Schnittstelle direkt mit der ISP verbinden. Davon ist aber abzuraten. Um sicher programmieren zu können, sollte es schon ein richtiger Programmer sein. Ebenfalls habe ich gute Erfahrungen mit dem Arduino Uno als Programmer gemacht. Dort wird ein Sketch (Programm) aufgeladen, welches einen Programmer imitiert.

Hier einige Programmer in der Übersicht.

Vergleich unterschiedlicher Programmieradapter
Hersteller Bezeichnung ISP JTAG Preis
Atmel STK500 Ja Nein ca. 130,-€
Atmel STK600 Ja Ja ca. 300,-€
Atmel AVR Dragon Ja Ja ca. 90,-€
Diamex USBISP All AVR [1] Ja Nein ca. 20,-€
Atmel Atmel-ICE [2] Ja Ja ca. 50.-€

Im Internet findet man zahlreiche Programmer, die nicht unbedingt sehr teuer sind. Als Sonderweg kann man auch einen Arduino mit einer Programmiersoftware versehen und dann als ISP-Programmer nutzen.

Die Software zum Programmieren ist dann allerdings wieder Standard und lässt sich mit fast allen Programmern bedienen. Das kostenlose Programm avrdude steuert den Programmer an und übergibt ihm das fertig kompilierte Programm von deiner Festplatte. Das kleine Programm gibt es sowohl für Windows als auch für Linux. Die Installationen sind auch kinderleicht, sodass hier nicht weiter darauf eingegangen wird. Wie die Software bedient wird, lernen wir später bei unserem ersten Programm.

Die kostenlose Software Atmel-Studio erlaubt das Einstellen aller Fuses, Entwicklung/Emulation mit AVR-GCC und Assembler, Programmierung und das Debuggen via OCD / JTAG. Die gängigen Atmel-Entwicklungsboards und Programmer werden erkannt. Die günstigen ISP-only-Programmer müssen dort ggf. als STK-500-kompatibel eingestellt werden.

Editor oder IDE Bearbeiten

Ein Texteditor genügt um Programme für den Mikrocontroller zu schreiben. Übersetzt wird das Programm sowieso durch den Compiler. Mehr Komfort erhält man bei Einsatz einer integrierten Entwicklungsumgebung (IDE). Für den Anfang reicht Eclipse als IDE für die Programmierung und bietet ein angenehmeres Arbeiten als mit Texteditor und Kommandozeile. Eclipse ist für viele Plattformen erhältlich, grob gesagt überall wo auch avrdude läuft. Mit Eclipse können auch weitere allgemeine Tools wie eine Quellcodeverwaltung angebunden werden, die nicht direkt mit AVR-Programmierung zu tun haben.

Es gibt von Atmel selbst eine IDE. Diese Entwicklungsumgebung heisst Atmel-Studio, bzw. Atmel-AVR-Studio und lässt auch Debugging über JTAG, PDI, aWire, debugWIRE und SWD zu. Auf Windows basiert die IDE auf Visual Studio.

Die Debuggingfunktion ist sehr hilfreich bei der Fehlersuche und benötigt einen Programmer und Mikrocontroller die JTAG/SWD, PDI, aWire oder debugWIRE unterstützen. Für den Anfang reicht auf jeden Fall ISP über SPI oder TPI.

Vergleich einiger IDEs
Bezeichnung Features Win Mac Linux Preis
Atmel AVR Studio Syntax, Build, Debug ja nein ja kostenlos
AVR-Eclipse Syntax, Build ja ja ja open source
Code::Blocks Syntax, Build, Debug ja ja ja open source



  1. http://www.diamex.de/dxshop/USB-ISP-Programmer-fuer-Atmel-AVR-Rev2
  2. http://www.atmel.com/tools/atatmel-ice.aspx