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.