Die Basis der von mir umgesetzten Projekte soll jeweils ein Mikrocontroller der Firma Atmel (www.atmel.com) bilden.

Gründe für Atmel:

Der Hauptgrund für meine Entscheidung, es mit einem AVR zu probieren, war, dass ein relativ breites Informationsspektrum im Internet vorhanden war. Zusätzlich existieren spezielle Foren (mikrocontroller.net), welche einem bei Fragen auch einmal weiterhelfen können. Hier sei auf die Linkliste verwiesen.

Zusätzlich ist ein vollständiges Open-Source Software-Paket zu dieser Controllerfamilie verfügbar.

Dazu zählt unter anderem das AVR-Studio zum Wandeln (assemblieren) von *.asm – Dateien in *.hex – Dateien, welche direkt in den Controller geladen werden können. Zusätzlich ermöglicht es das Simulieren des geschriebenen Codes auf einer virtuellen Maschine. So können Programmfehler festgestellt und beseitigt werden.

Als nächstes ist "Pony-Prog“  zu erwähnen. Dieses dient zum Laden des erzeugten *.hex – Files in den Controller über die parallele bzw. auch serielle Schnittstelle des Computers.  Ein weiteres Programm zum Programmieren des Controllers ist "yaap". Beide Programme sind über Google recht einfach zu finden.

Am besten ist meiner Meinung nach für den Anfänger WinAVR geeignet. Hierbei handelt es sich um ein umfassendes Software- und Bibliothekenpaket. Enthalten sind unter anderem der avrgcc – Compiler welcher aus *.c – Dateien direkt *.hex Dateien kompiliert und assembliert. Einziger Nachteil ist, das man ihn nur über die Kommandozeile verwenden kann, da kein GUI (Graphical User Interface) verfügbar ist. Zusätzlich bringt WinAVR das "Programmers Notepad" mit. Hiermit verfügt man gleich über einen Editor, welcher Syntax-Highlighting beherrscht. Noch zu erwähnen wäre avrdude, welcher nahezu den selben Funktionsumfang wie Ponyprog hat. Alle enthaltenen Komponenten aufzuzählen würde hier jedoch den Rahmen sprengen und wäre auch nicht unbedingt sinnvoll.

Ein weiterer Vorteil ist, das der Controller gut beschaffbar zu einem vergleichsweise günstigen Preis (Conrad, Reichelt & Co) ist. Er ist in einer DIL-Package erhältlich, was ihn relativ leicht handhabbar macht. So habe ich meine ersten Gehversuche auf Lochrasterplatinen gemacht. Dies reicht für den Anfang vollkommen aus, da sich bei mir durch ständiges umherbasteln soundso ständig das Layout geändert hat.

Ein wesentliches Feature ist, das der AVR über einen Flash-Speicher verfügt (bis zu 10000mal widerbeschreibbar). In Verbindung mit seiner Fähigkeit, In-System-Programmierbar (ISP) zu sein, was die Anschaffung eines teuren Programmiergerätes erspart ist das eine wesentliche Erleichterung für den Neueinsteiger. Da viele (mich eingeschlossen) oft nach dem Trial & Error Prinzip arbeiten, ist diese Fähigkeit unverzichtbar. Durch sie können ständig Änderungen an der Software vorgenommen werden, ohne den Controller aus der jeweiligen Schaltung entfernen zu müssen.

 

Zum Erlernen der Programmierung eines Mikrocontrollers erschien es mir zunächst sinnvoll, einfache Basisschaltungen mit einem ATmega8 aufzubauen, um die Möglichkeiten, welche ein solcher Mikrocontroller bietet kennen zulernen. Dabei sollte allem anderen voran ein Studium des Datenblattes erfolgen. Hierzu sind jedoch gute Englischkenntnisse und ein gewisses technisches Grundverständnis nötig. Aus ihm können man unter anderem folgende Daten entnommen werden:

Maximale Taktfrequenz: 16MHz
8 KByte In-System-Self-Programmable Flash
512 Byte EEPROM
1 KByte internal SRAM

zwei 8-bit Zähler und ein 16 Bit Zähler (mit jeweils eigenen Vorteilern und Vergleichs-Modi)
Echtzeitzähler mit separatem Oszillator
3 PWM Kanäle (Puls-Weiten-Modulation)
ADU’s mit 8 bis 10 Bit Genauigkeit
Byte-Orientierte zweiadrige Schnittstelle
Master/Slave SPI serielle Schnittstelle
Watchdog Timer mit eigenem Oszillator
Analog-Wert Vergleicher
Externe und Interne Interruptquellen
5 verschiedene Sleep-Modi

Eine Erklärung der oben genannten Eigenschaften erfolgt an der jeweils passenden Stelle.

Die nachfolgende Grafik zeigt das Gehäuse (DIL-28 oder auch PDIP genannt) des ATmega8.

Als erste Basisschaltung eignet sich meiner Meinung nach die folgende recht gut, sie kann auch einfach um zusätzliche Komponenten erweitert werden.

Sie verfügt über 5 Eingänge (Taster) an den Pins 2 bis 6 und 5 Ausgänge (LEDs) an den Pins 14 bis 18. Die Betriebsspannung der Schaltung beträgt 5V. An Pin 1 ist ein Reset-Taster angeschlossen. Die Stiftleiste auf der rechten Seite dient zum Anschluss eines Programmieradapters, denn ich möchte den Controller ja schließlich programmieren. Der MC wird mit Hilfe der Pins MISO, MOSI, CLK und /RESET programmiert. Wer es wagt, mit einem ATMega128 einsteigen zu wollen, dem sei gesagt, dass dieser über die Pins /RESET, CLK, RXD0 und TXD0 programmiert wird.
Aufgebaut wurde die Schaltung auf einer Lochrasterplatine, was für den Anfang auch am einfachsten ist. Zu beachten ist, dass die Kapazität zwischen Vcc und Masse möglichst nahe am Controller platziert wird. Für den MC empfiehlt sich die Verwendung einer entsprechend 28-poligen Fassung. Auch sollte der Quarz nicht zu weit vom Controller entfernt sein. Dieses Vorgehen vermeidet Störungen.

Hier eine Beispielschaltung für einen Programmieradapter:

Es ist zu beachten, dass die Pins des Programmieradapters mit denen der Stiftleiste aus der obigen Beispielschaltung übereinstimmen. Wer den Adapter nicht selbst aufbauen möchte, findet im Internet auch einige Möglichkeiten ihn fertig aufgebaut zu beziehen. Auch sollte man darauf achten, die Signalleitungen an die richtigen Klemmen der Buchse für die parallelen Schnittstelle anzulöten. Verbindlich sind hierbei die klein über die Leitungen geschriebenen Pin-Nummern und nicht deren Position auf der Grafik!
Es gibt auch diverse fertig aufgebaute Programmier-Stecker zu kaufen. Hier sei beispielsweise der Adapter von www.mikrocontroller.net erwähnt, welcher auch mein erster war. Er gleicht vom Aufbau her im Prinzip dem oben dargestellten. Seine Bezeichnung in diversen Programmen ist "Ponyprog - STK200 kompatibel".
Alternativ kann man auch bei www.reichelt.de einen original ISP von Atmel beziehen. Sein Bezeichnung ist "AVRISP". Dieser funktioniert über die serielle (COM) Schnittstelle des Computers. Man kann ihn zusätzlich durch einen USB/seriell Adapter ergänzen, falls ein Betrieb an einem neueren PC bzw. Notebook vorgesehen ist. Eine Treiber-CD wird mitgeliefert. Es wird auf dem Rechner per Software ein zusätzlicher COM-Port bereit gestellt, welcher dann bei der Programmierung im Programm (bspw. Ponyprog oder AVRStudio) oder im makefile (avrdude) angegeben werden muss. Große Geschwindigkeitsunterschiede zwischen den verschiedenen Varianten konnte ich nicht feststellen.

Hier noch eine Schaltung zur Spannungsstabilisierung . Die Sicherung einer stabilen Spannung ist für einen MC von essentieller Wichtigkeit. Sie kann auch dem Datenblatt des Spannungsreglers entnommen werden.

Nach Aufbau der Schaltung und dem Anschließen des Controllers müssen mit Hilfe von "Yaap" die entsprechenden Fuse-Bits im Controller gesetzt werden, um eine In-System-Programmierbarkeit zu ermöglichen. Hierbei ist mit Vorsicht vorzugehen, weil man bei setzen der falschen Häkchen den Controller unbrauchbar machen kann.
Hier die entsprechende Grafik (links = vorher; rechts = nachher):

Die Konfiguration dieser Bits kann natürlich auch über Tools wie "Ponyprog" oder das "AVR-Studio" vorgenommen werden. Da in letzter Zeit häufig die Frage auftauchte, wozu diese Fusebits denn gut seien, hier nun die folgende Erklärung:

Mit den Fusbits ist es möglich, bestimmte Eigenschaften eines AVRs fest (nonvolatile) zu programmieren. In unserem Beispiel stellen wir z.B. den AVR von seinem internen RC-Oszillator auf einen externen Oszillator um (durch Veränderung der CKSEL-Bits) Mit Hilfe von BODEN und BODLEVEL aktiviert man die Brown-Out-Detection und legt deren Level fest (hier: 4V). Sie dient dazu, beim Unterschreiten einer definierten Spannungsschwelle den MC "auszuschalten", um undefiniertes Verhalten zu verhindern. Mit Hilfe von BOOTSZ0:1 legt man fest, wie groß der Bootsektor im Flash wird. Im obigen Fall wird er minimiert, da ein Einsteiger im Normalfall keinen Bootloader verwendet, sondern den Flash direkt programmiert. Zu guter letzt noch SPIEN - LASST VON DIESEM EINTRAG BEI EINEM NEUEN AVR PRINZIPIELL DIE FINGER! Wer SPIEN deaktiviert, hat sich gleichzeitig selbst von seinem AVR ausgesperrt, da er nun nicht mehr über MISO, MOSI & Co ansprechbar ist. Im Auslieferungszustand ist dieser Bit immer korrekt gesetzt, also ändert es, egal welche Software ihr verwendet, nie.

Bei der Programmierung habe ich mich für die Hochsprache C entschieden. Dies geschah aus den folgenden Gründen:

Der Erstellung der für den Controller nötigen *.hex Dateien erfolgt bei mir mit Hilfe des Kommandozeilen-Compilers avrgcc. Um ihn zu benutzen, wird zusätzlich ein so genanntes makefile benötigt, welches Informationen für den Compiler beinhaltet, nach welchen Regeln und wie er die Datei in Maschinensprache aus der *.c Datei erstellen soll. Auf die Verwendung von makefiles wird im Abschnitt Tools näher eingegangen. Prinzipiell empfiehlt sich der Download von WinAVR . Es beinhaltet verschiedene Tools und auch das oben beschriebene makefile, fertige Bibliotheken für AVR's und Dokumentation.
Im unter Programme aufgeführten Makefile müssen je nach Projekt einfach nur die jeweiligen Dateinamen am Ende des Files mit der "Ersetzen"-Funktion des Windows-Editors ersetzt werden. Danach legt man das makefile in den selben Ordner wie die *.c-Datei. Nun wird die Kommandozeile aufgerufen (Start -> Programme -> Zubehör). Dort arbeitet man sich mit "cd <zielordner>" aufwärts bzw. "cd.." abwärts in der Verzeichnisstruktur. Dann tippt man nur noch "make <beispieldatei>" (ohne Dateiendung!!!) und avrgcc fängt an zu arbeiten. Sollte keine Fehler vorliegen, liegt die fertige *.hex-Datei nun im selben Ordner.

Eine Einbindung von avrgcc in den Editor "Programmers Notepad" ist unter Tools verfügbar, dies erspart das Rumgetippe in der Eingabeaufforderung. In neuen WinAVR-Paketen ist im Programmers Notepad sogar der Eintrag "make" (unter Tools) schon standardmäßig vorhanden, so dass man sofort loslegen kann.

Nun kann es also mit dem Programmieren losgehen, die Schaltung ist fertig aufgebaut und der Controller über die Stiftleiste und einen entsprechenden Programmieradapter an den PC angeschlossen. Als erstes Beispielprojekt könnte man z.B. realisieren, dass bei einem Tasterdruck die entsprechende LED leuchtet.

Für Ideen und Anregungen sei auf die Rubrik "Programme" verwiesen.

 

Zurück zur Startseite.