Einfuehrung in Mikrocontroller

Transcription

Einfuehrung in Mikrocontroller
Einführung in MCU
Viktor Seib
Inhaltsverzeichnis
1 Einführung
1.1 Geschichte . . . . . . . . . . . . .
1.2 Mikrocontroller (MC) . . . . . . .
1.3 CISC und RISC . . . . . . . . . .
1.4 Unterschiede zu Mikroprozessoren
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2
2
3
5
6
2 Aktuelle Mikrocontroller
8
2.1 Atmel AVR . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2 Vergleich der MC-Familien von Atmel, Microchip und Freescale 9
2.3 Die 8051-Serie . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4 Vergleich: Motorola MC68HC05B6 und Atmel ATmega16 . . . 11
3 AVR-Studio
14
4 Quellenverzeichnis
18
1
Kapitel 1
Einführung
1.1
Geschichte
In den 1960er und 1970er Jahren wurden in der Industrie festverdrahtete
Analog- und Logikschaltungen eingesetzt. Eine solche Schaltung war für eine
bestimmte Aufgabe konzipiert und konnte nur sie erfüllen. Sollte eine andere
Aufgabe erfüllt werden, so wurde dafür entweder eine komplett neue Schaltung aufgebaut, oder aber die bereits vorhandene mühevoll um die neuen
Funktionen ergänzt.
Die Nachteile solcher Schaltungen liegen auf der Hand: Durch den festen
Aufbau sind sie äußerst unflexibel und die Integration neuer Funktionen verursacht hohe Kosten. Daher dürfte es nicht verwundern, dass diese Art von
Schaltungen nicht in der Lage war, mit den steigenden Anforderungen, der
immer weiter fortschreitenden Automatisierung und den anfallenden komplexen Aufgaben Schritt zu halten
Es waren immer öfter Schaltungen gefordert, die schnell und präzise auf
Veränderungen in der Betriebsumgebung reagieren konnten, aber auch ein
hohes Maß an Flexibilität aufwiesen. Alle diese Anforderungen führten zur
Entwicklung programmierbarer Logikkomplexe, den sogenannten Field Programmable Gate Arrays (FPGAs).
Sie bestanden im Wesentlichen aus konfigurierbaren Logikblöcken und einem Befehlsspeicher. Der Speicher konnte nun mit den von der Schaltung
auszuführenden Aufgaben individuell programmiert werden und stellte die
Logikblöcke während der Ausführung seines Programms auf die zu erledigenden Aufgaben ein.
Bei dieser neuen Art der elektronischen Schaltung konnte man zwei wesentliche Bestandteile unterscheiden: die Hardware und die Software. Die
Hardware ist der feste, unveränderliche Teil der Schaltung. Die Software,
2
also das im Befehlsspeicher enthaltene Programm, hingegen kann den jeweiligen Bedürfnissen des Einsatzgebietes angepasst werden und bietet dadurch
eine hohe Flexibilität.
Die ständige Weiterentwicklung der Logikblöcke, die fortschreitende Miniaturisierung und die Integration weiterer Funktionen führte zur Entwicklung der Mikrocontroller.
1.2
Mikrocontroller (MC)
Die heutigen Mikrocontroller kann man als “Ein-Chip-Computer“ bezeichnen. Mit ihnen lassen sich komplexe Aufgaben lösen, für die sonst ein aufwändiger
Schaltungsaufbau notwendig wäre. Die meisten aktuelle Mikrocontroller lassen sich sogar programmieren, wenn sie in einer Schaltung eingebaut sind
(ISP - “in system programming“).
Standardmäßig sind folgende Bestandteile in Mikrocontrollern integriert:
CPU, SRAM und Flash-Speicher für den Programmcode. Weiterhin bieten MCs analoge und digitale Ports, mehrere AD/DA-Wandler, Timer und
Schnittstellen zur Kommunikation mit der Außenwelt.
Die Bit-Zahl eines MCs bezeichnet die Breite des internen Datenbusses.
Typische Werte sind 8-, 16- und 32 Bit. MCs werden in der Regel mit Taktfrequenzen von 1 bis ca. 20 MHz betrieben, teure 32 Bit Modelle sogar mit
weit über 100 MHz.
8 Bit MCs sind sehr weit verbreitet und reichen für Hobby- aber auch
viele Profianwendungen vollkommen aus. Trotzdem werden sie immer mehr
von den 16- und 32 Bittern abgelöst.
3
In der nachstehenden Abbildung ist der allgemeine schematische Aufbau
eines Mikrocontrollers ist in folgender Abbildung dargestellt.
Abbildung
1.1:
Mikrocontroller,
schematischer
Aufbau
http://www.erkenntnishorizont.de/robotik/uc/ucuebersicht.c.php
Quelle:
Mikrocontroller werden meist in der Harvard-Architektur realisiert. Dabei sind der Daten- und Programmspeicher physisch von einander getrennt.
Der Vorteil gegenüber der von Neumann Architektur, bei der Daten und Code im selben Speicherbereich liegen, ist die Möglichkeit mit einem einzigen
Taktzyklus einen Befehl und die dazugehörigen Daten zur CPU zu bringen.
Daher wird diese Architektur bevorzugt bei RISC-Kernen verwendet
4
Die Einsatzgebiete der Mikrocontroller sind sehr vielfältig und so kann
man sie in nahezu allen Bereichen des (elektronischen) Lebens finden. Beispielhaft seien an dieser Stelle aufgeführt:
• Computertechnik: Drucker, Festplattencontroller, Monitore
• Unterhaltungselektronik: Fernseher, Camcorder, Digitalkameras, CDSpieler
• Verkehrstechnik: ABS, Motormanagment, Sicherheitselektronik, Klimaanlagen
• Kommunikation: Handy, Telefon, Fax, Funkgeräte
• Industrie: Prozessautomatisierung, Messwerterfassung, Steuerung und
Regelung
• Haushalt: Waschmaschine, Kühlschrank, Heizung
• Waffensysteme: Bomben, Raketen
Wegen dieser weiten Verbreitung übersteigt die Anzahl der weltweit jährlich
abgesetzten MCs die Anzahl der abgesetzten Mikroprozessoren um ein Vielfaches.
1.3
CISC und RISC
Moderne CPUs können auf zwei verschiedene Weisen aufgebaut werden: entweder als RISC- oder als CISC-Prozessor.
CISC steht für “Complex Instruction Set Computer“ und bezeichnet
einen Prozessor mit einem sehr umfangreichen Befehlssatz (oft mit vielen
hundert Befehlen) und vielen Adressierungsarten. In CISC-Prozessoren sind
alle Befehle mikroprogrammiert, d.h. sie sind in einer Art “Datenbank“ (Steuerwerk) auf dem Chip gespeichert. Das führt aber dazu, dass das Steuerwerk
sehr komplex wird und viel Chipfläche verbraucht. Durch ihre Komplexität
sind die einzelnen CISC-Befehle sehr mächtig, müssen aber aufwendig dekodiert werden und brauchen deutlich länger zur Ausführung, als RISC-Befehle
(in der Regel 4 bis 10 Takte gegenüber 1 bis 2 Takten bei RISC). Die CISCArchitektur wurde in einer Zeit entwickelt, als Hauptspeicher noch klein,
langsam und sehr teuer war. Die Entwickler hatten dabei vor allem ein Ziel
vor Augen: den “Prozessor mit einem Befehl lange [zu] ’beschäftigen’“ [1].
Sobald sich allmählich Hochsprachen durchsetzten, wurden Untersuchungen durchgeführt, in welchem Ausmaß die Assemblerbefehle der Prozessoren
5
von den Compilern genutzt werden. Das Ergebnis: Über 80typischen Anwendung werden mit immer den selben, wenigen, Befehlen umgesetzt. Aus dieser
Erkenntnis entstand die Idee der RISC-Prozessoren (“Reduced Instruction
Set Computer“). Im Gegensatz zur CISC-, kommt die RISC-Architektur mit
wenigen, vergleichsweise simplen Befehlen aus, was den Aufbau des Steuerwerkes erheblich vereinfacht und dadurch einen geringen Fertigungspreis
ermöglicht. Auch die Adressierungsarten wurden im Vergleich zu CISC deutlich reduziert. So ist der Zugriff auf den Speicher nur durch Load- und StoreBefehle möglich. Sonst sind die Operanden für die Befehle ausschließlich Register, weswegen RISC-Prozessoren in der Regel 32 bis 64 davon besitzen.
Neben der Einfachheit der Befehle, hat die hohe Anzahl der Register einen
weiteren Vorteil: Da die Zwischenergebnisse in diesen zwischengespeichert
werden, kann der Zugriff auf sie erheblich schneller erfolgen, als das zum
Beispiel beim Laden aus dem Hauptspeicher möglich wäre.
Die RISC-Befehle werden außerdem nicht - wie bei CISC - mikroprogrammiert, sondern fest verdrahtet, also durch Leiterbahnen auf dem Prozessor
realisiert. Bei RISC wird durchschnittlich ein Befehl pro Takt verarbeitet.
Möglich wird das zum einem durch die Einfachheit der Befehle, die nicht
mehr umständlich decodiert werden müssen und zum anderen durch die parallele Verarbeitung (“Pipelining“). Dabei wird die Abarbeitung eines Befehls
in mehrere Phasen zerlegt, die hintereinander an verschiedenen Stellen im
Prozessor ausgeführt werden. Jede Phase braucht dabei nur einen Takt. Das
bedeutet, dass sobald ein Befehl die erste Phase hinter sich gelassen hat,
diese Phase mit der Abarbeitung des nächsten Befehls anfangen kann, ohne
dass die vollständige Abarbeitung des ersten Befehls abwarten zu müssen.
So ist bei n Phasen der erste Befehl zwar erst nach n Takten vollständig
abgearbeitet, der zweite jedoch schon beim n+1 Takt, der dritte beim n+2
Takt usw.
Das bringt aber auch Probleme mit sich, denn oft sind nachfolgende Befehle auf die Ergebnisse der vorhergehenden angewiesen. Um nicht n Takte
auf das Ergebnis warten zu müssen, werden optimierende Compiler eingesetzt, die den Code umsortieren und die Lücken in der Pipeline durch unabhängige Befehle füllen.
1.4
Unterschiede zu Mikroprozessoren
Der wichtigste Unterschied dürfte wohl sein, dass es sich bei Mikroprozessoren
(MPs) lediglich um eine CPU handelt. Mikrocontroller dagegen sind ganze
Mini-Computer auf einem Chip. Mit anderen Worten: eine CPU ist nur ein
Teil eines MCs.
6
Bei den MPs stand lange Zeit eine hohe Taktfrequenz im Vordergrund.
Die Devise war: Je höher die MHz-Zahl, desto stärker das Kaufargument.
Bei MCs sah das vorrangige Ziel ganz anders aus. Hier wurde versucht immer mehr periphere Funktionen auf kleinstem Raum unterzubringen. Die
Taktfrequenz war hier weniger wichtig und blieb somit weit hinter der der
MPs zurück.
Durch die Integration vieler Komponenten, können die MCs auf eine andere Weise punkten: Während ein Mikroprozessor zahlreiche Geräte (z.B.
RAM, Mainboard) um sich herum braucht, um in Betrieb genommen zu
werden, sind mit Mikrocontrollern sehr einfache Schaltungen möglich, da die
meisten benötigten Teile wie das RAM, oder der Flash-Speicher, bereits integriert sind.
Da die Mikroprozessoren mit viel höheren Takten betrieben werden und
die Anzahl der in ihnen verbauten Transistoren wesentlich höher als die
der Mikrocontroller ist, schlägt sich das auch im Stromverbrauch nieder.
Während MCs sich mit wenigen Miliampere begnügen (Beispiel: der ATmega8 verbraucht bei 16 MHz und 5 Volt 20mA, was einer Leistung von 0,1
Watt entspricht), “verbrauchen“ einige moderne Mikroprozessoren weit über
100 Watt. Die meiste Energie wird jedoch in Wärme umgesetzt (Verlustleistung) und so müssen die heutigen Mikroprozessoren zum Teil sehr aufwändig
gekühlt werden. Bei Mikrocontrollern entfällt dieser Punkt.
7
Kapitel 2
Aktuelle Mikrocontroller
Es dürfte nicht verwundern, dass die Mikrocontroller bei ihrer weiten Verbreitung im heutigen Leben viele verschiedene Hersteller gefunden haben.
Im Folgenden seien einige Hersteller mit ihren MC-Familien beispielhaft aufgeführt:
• Intel (8051-Serie)
• Renesas (H8)
• Zilog (Z8)
• Microchip (Pic)
• Freescale (früher Motorola) (68HC08 bzw. 68HCS08)
• Atmel (AVR, 8051-Serie)
Ich werde mich auf die drei letztgenannten konzentrieren, wobei ich den
AVR-Kern von Atmel gesondert vorstelle.
2.1
Atmel AVR
Bei AVR handelt es sich um einen RISC-Kern, der an der Universität von
Trondheim in Norwegen entwickelt und von Atmel aufgekauft wurde. Die
CPU besitzt 32 allgemeine 8-Bit Register (general purpose registers) und ist
in der Lage in einem einzigen Taktzyklus Daten aus zwei beliebigen Registern
in die ALU zu laden, diese zu verarbeiten und das Ergebnis in einem beliebigen Register zu speichern. Dadurch ist der AVR-Kern in der Lage nahezu 1
Million Anweisungen pro MHz zu verarbeiten (“nahezu“, weil Sprungbefehle
2 Takte benötigen).
8
Laut Atmel hat das Akronym “AVR“ keine Bedeutung. Die Entwickler
des AVR-Kerns Alf Egil Bogen und Vegard Wollan sprechen in einer Arbeit
von “Advanced Virtual RISC“ in Zusammenhang mit dem Kern. Das soll
aber nicht die Bedeutung des Akronyms sein, ebenso wenig wie “Alf (Egil
Bogen)’s and Vegard (Wollan)’s RISC processor“.
Der AVR-Kern wurde für die Programmierung in C optimiert. Die Entwicklung des zugehörigen C-Compilers am Atmel Development Center in
Trondheim begann noch vor Fertigstellung des Kerns. Dadurch waren Optimierungen am Compiler aber auch am Kerndesign möglich.
Für die Programmierung der AVR-Controller gibt es eine kostenlose Entwicklungsumgebung (AVR-Studio, siehe unten), die das Einbinden des CCompilers problemlos erlaubt.
Atmel bietet zur Zeit zwei MC-Familien mit dem AVR-Kern an: die
ATtiny- und die ATmega-Serie. Die ältere AT90-Serie wird dagegen nicht
mehr produziert.
Die Unterschiede zwischen den beiden Serien bestehen vor allem in der
Größe des internen Flash- und Arbeitsspeichers, der Anzahl der I/O-Ports,
der Timer und der AD/DA-Wandler. Weiterhin wurde bei den Controllern
der Tiny-Serie auf die integrierte Echtzeituhr (RTC), die UART-Schnittstelle
sowie auf die in Hardware realisierte Multiplikation verzichtet.
Dagegen sind Funktionen wie das Two-Wire-Interface, ISP, der Watchdog und der Brown Out Detector in beiden MC-Serien vorhanden. Der Befehlssatz ist auch nahezu identisch, dieser weicht nur im Rahmen zusätzlich
integrierter Funktionen in der ATmega-Serie gegenüber der ATtiny-Serie ab.
2.2
Vergleich der MC-Familien von Atmel,
Microchip und Freescale
Eine Übersicht über die aktuellen 8-Bit Mikrocontroller dieser Hersteller findet sich unter folgenden Links:
Microchip:
http://www.microchip.com/ParamChartSearch/chart.aspx?
branchID=1031&mid=10&lang=en&pageId=74
Freescale:
http://www.freescale.com/files/microcontrollers/doc/
fact_sheet/8BITCIPRODMPFS.pdf
9
Atmel (AVR):
http://www.atmel.com/dyn/products/param_table.asp?
family_id=607&OrderBy=part_no&Direction=ASC
Atmel (8051-Serie):
http://www.atmel.com/dyn/products/param_table.asp?
family_id=604&OrderBy=part_no&Direction=ASC
Im Grunde sind sich die Mikrocontrollerfamilien dieser drei Hersteller von
den gebotenen Funktionen her sehr ähnlich. Der markanteste Unterschied
besteht im CPU-Kern: Während Atmel und Microchip auf die RISC- und
die Harvard-Architektur setzen, kommen im M68HC08-Kern (bzw. dem etwas neueren M68HCS08-Kern) von Freescale die CISC- und von-NeumannArchitekturen zum Einsatz. In einem anderen Aspekt hebt sich die PICFamilie von den anderen beiden ab: Sie ist im Gegensatz zu den Controllern
von Atmel und Freescale eher schlecht für die Programmierung in Hochsprachen geeignet.
Die Möglichkeit, die Controller direkt im Zielsystem zu Programmieren
(ISP - In-System Programming) wird dagegen von allen drei MC-Familien
unterstützt.
Die Unterschiede zwischen den low- und high-end MCs dieser Hersteller
liegen vor allem in der Größe des Flash- und Arbeitsspeichers und in der
Anzahl der analogen- und digitalen Ports.
Nachfolgend stelle ich die 8-Bit low-end und high-end Modelle von Atmel,
Microchip und Freescale tabellarisch gegenüber:
Low-end-Vergleich
Flash (KByte)
EEPROM (KByte)
SRAM (KByte)
I/O Pins
digitale I/O-Ports
analoge I/O-Ports
interner Takt (MHz)
Timer
Preis (ca.)
Atmel
ATtiny25
2
0,128
0,128
6
1 (6 Bit)
4 (je 10 Bit)
20
2 (je 8 Bit)
2 Euro
Microchip
Freescale
PIC12F635
MC908QT2A
1,75
1,5
0,128
0,064
0,128
6
6
1 (6 Bit)
1 (6 Bit)
1 (6 Bit)
6 (je 10 Bit)
8 (extern: max. 20)
8
2 (1x 8 Bit, 1x 16 Bit) 2 (je 16 Bit)
2 Euro
1 Euro
10
High-end-Vergleich
Flash (KByte)
EEPROM (KByte)
SRAM (KByte)
I/O Pins
digitale I/O-Ports (Bit)
analoge I/O-Ports (Bit)
interner Takt (MHz)
Timer (Bit)
Preis (ca.)
2.3
Atmel
Microchip
ATMega2560
PIC18F8722
256
128
4
1
8
3,8
86
70
10x 8, 1x 6
8x 8, 1x 6
16x 10
16x 10
16
8 (ext.max. 40)
4x 16, 2x 8
3x 16, 2x 8
12 Euro
9 Euro
Freescale
MC68HC908GR60A
60
2
53
5x 8, 1x 7, 1x 6
24x 10
8
8x 16
7 Euro
Die 8051-Serie
Die 8051 Mikrocontroller Familie wurde am Anfang der 1980er Jahre von
Intel entwickelt und an viele Hersteller lizenziert, darunter auch Atmel. Das
Original ist heute selbstverständlich veraltet, aber es gibt auch aktuelle Entwicklungen, die dem heutigen Stand der Technik entsprechen.
Atmel bietet neben maskenprogrammierten ROM-Typen mit bis zu 64
KByte Speicher (für den Einsatz in frei programmierbaren Logikschaltkreisen - den so genannten FPGAs), auch 8051-Typen mit Flash Speicher an
(AT89-Familie). Diese werden in der RISC-Architektur entwickelt und haben
ebenfalls eine Speicherkapazität von bis zu 64 KByte. Anders als der AVRist der 8051-Kern aber weit von 1 Million Anweisungen pro MHz entfernt.
Die Befehle werden hier in 1 bis 4 Takte abgearbeitet.
Die Flash-Typen bieten außerdem Funktionen wie A/D- Wandler, 16 Bit
Timer und UART.
Die maximale Taktfrequenz beträgt bei den meisten ROM-Typen 60 MHz,
bei den Flash-Speicher-Typen immerhin 20 bis 60 MHz.
2.4
Vergleich: Motorola MC68HC05B6 und
Atmel ATmega16
In diesem Semester (SS 2006) wird das Hardware Praktikum (HWP) an unserer Universität zum letzten Mal mit dem Mikrocontroller von Motorolla
11
durchgeführt. Ab dem nächsten Wintersemester wird dieser durch den ATmega16 ersetzt werden. Ich nehme diesen Technologiewechsel zum Anlass,
um den alten HWP - MC mit dem neuen zu vergleichen und außerdem einen
Atmel Controller aus dem “Mittelfeld“ (also zwischen low- und high-end)
vorzustellen.
Der MC68HC05B6 gehört zu der 68HC05-Familie (deren Nachfolger, die
68HC08 MC-Familie von Freescale, weiter oben bereits vorgestellt wurde)
und wird heute nicht mehr hergestellt. Der ATmega16 arbeitet dagegen mit
dem aktuellen AVR-Kern, findet eine weite Verbreitung und kostet unter
5 Euro. Beide MCs sind für Hochsprachen geeignet, aber nur Atmel bietet
für seine Mikrocontroller eine komfortable und zudem auch noch kostenlose
Entwicklungsumgebung an.
In der folgenden Tabelle sind die wichtigsten Unterschiede und Eigenschaften dieser beiden Mikrocontroller zusammengefasst:
ATmega16
MC68HC05B6
Architektur
Harvard
von Neumann
Instruction Set
RISC
CISC
Befehle (lt. Datenblatt)
131
62
Flash (KByte)
16
ROM
5936 Byte
EEPROM (KByte)
0,5
0,25
SRAM
1024 Byte
176 Byte
I/O Pins
32
24
digitale I/O-Ports
4 (je 8 Bit)
3 (je 8 Bit)
analoge I/O-Ports
8 (je 10 Bit)
8 / 2 (je 8 Bit)
interner Takt (MHz)
16
2,1
Timer
3 (1x 16 Bit, 2x 8 Bit)
2
sonstige Funktionen
4 PWM Kanäle
2 PWM Kanäle
Real-Time-Clock (RTC)
SPI
UART
SCI
Two-Wire-Interface (TWI)
ISP
ISP
Watchdog
Watchdog
Brown Out Detector
20 Interrupts + 3 externe 4 Interrupts + 1 extern
12
Ein scheinbarer Widerspruch scheint sich hier aufzutun, wenn man die
Anzahl der Befehle der beiden MCs miteinander vergleicht: CISC mit ca. 60
und RISC mit mehr als doppelt so vielen Befehlen. Dabei steht RISC doch
für “Reduced Instruction Set Computer“, wie kommt also dieser scheinbare
Widerspruch zu Stande?
Die Antwort ist ganz einfach: Der ATmega16 ist ein aktueller Mikrocontroller, der viel komplexer aufgebaut ist, als der veraltete 68HC05. Durch
zusätzlich integrierte Peripherie bietet er dem Benutzer auch viel mehr Möglichkeiten,
die natürlich alle irgendwie angesprochen werden müssen und daher auch eigene Befehle verlangen.
Was aber auch noch zu der hohen Zahl der Befehle beiträgt, ist die Tatsache, dass Atmel einige Befehle mehrfach aufzählt, wie in [2] beispielhaft
dargestellt ist. In [3] wird von ca. 60 Befehlen gesprochen, während Wikipedia von ca. 70 Befehlen spricht [4].
13
Kapitel 3
AVR-Studio
Für seine AVR-Mikrocontrollerfamilien bietet Atmel die kostenlose Entwicklungsumgebung “AVR-Studio“ an. Diese kann samt aktuellem Service Pack
unter [5] heruntergeladen werden.
Das AVR-Studio erlaubt die Entwicklung von Programmen in C und Assembler unter Windows, bringt aber keinen C-Compiler mit. Daher sollte
zusätzlich “WinAVR“ von [6] heruntergeladen und installiert werden.
WinAVR bringt einen C-Compiler (avr-gcc) mit, dieser wird nach der
Installation automatisch vom AVR-Studio erkannt.
Für die AVR-Entwicklung unter Linux gibt es folgende Alternativen: avrgcc (Compiler), avr-gdb (Debug), AVRdude (Programmiersoftware). Alle diese Programme sind für Windows in dem Packet “WinAVR“ enthalten. Für
Linux müssen sie einzeln zusammengestellt werden.
Beim Starten des AVR-Studios erscheint ein Fenster, das dem Benutzer
die Möglichkeit bietet, entweder ein neues Projekt anzulegen oder ein bereits
bestehendes zu öffnen. Entscheidet man sich für ein neues Projekt, so muss
man zusätzlich festlegen, ob man in Assembler oder in C entwickeln möchte
und anschließend dem Projekt einen Pfad und Dateinamen zuweisen.
Im nächsten Schritt gilt es eine Debug-Plattform und den Mikrocontroller
auf dem das Programm später laufen soll, auszuwählen. Der AVR-Simulator
ist eine kostenlose und im AVR-Studio bereits integrierte Debug-Plattform.
Sofern man keine der sonstigen aufgeführten Plattformen erworben hat, sollte
man sich für den AVR-Simulator entscheiden (so wie ich das auch im weiter
unten aufgeführten Beispiel getan habe). Als MC wählte ich den ATmega16.
Die Debug-Plattform, aber auch der ausgewählt Mikrocontroller sind
nicht an das angelegte Projekt gebunden und können bei jedem Neustart
des Programms geändert werden.
14
Sobald alle Einstellungen vorgenommen wurden, erscheint folgendes Fenster, welches in drei Bereiche unterteilt ist:
Abbildung 3.1: AVR-Studio
Das Fenster auf der linken Seite bietet unter dem Reiter “AVR GCC“
(beim Programmieren in C) oder dem Reiter “Projekt“ (bei AssemblerEntwicklung) eine Übersicht über das aktuelle Projekt. Unter dem Reiter
“I/O View“ kann der aktuelle Zustand des simulierten Mikrocontrollers eingesehen werden. Hier werden zum Beispiel alle Registerinhalte und die Zustände
der Ein- und Ausgabeports angezeigt. Der Reiter “Info“ bietet allgemeine
Informationen über den für das Projekt ausgewählten Mikrocontroller (in
meinem Beispiel: ATmega16).
Das große Fenster auf der rechten Seite ist der Editor. Hier kann der
Quellcode geschrieben und im Debug-Modus auf Fehler überprüft werden.
Der untere Bereich zeigt Compiler-Meldungen an.
15
Im Folgenden werde ich einige Funktionen des AVR-Studios an einem
kleinen Beispielprogramm demonstrieren. Das Programm gibt in einer Endlosschleife die Zahlen von 255 bis 0 an Port A aus. Der Quelltext lautet wie
folgt:
/* Einbinden von header Dateien mit standardisierten
Integer Datentypen und mnemonischen IO-Portnamen */
#include <avr/io.h>
#include <stdint.h>
int main(void)
{
// zahl als unsigned 8-Bit Integer Variable
uint8_t zahl = 255;
// Port A komplett auf Ausgabe setzen
DDRA = 0xff;
// Endlosschleife
while (1)
{
PORTA = zahl;
// Ausgabe an Port A
zahl--; // zahl dekrementieren
}
}
wird das Programm kompiliert, geBei einem Klick auf das Symbol
).
bunden und der Debug-Modus gestartet (erkennbar am gelben Pfeil
Außerdem wechselt das Fenster auf der linken Seite vom Reiter “AVR-GCC“
zum Reiter “I/O View“.
Der gelbe Pfeil zeigt zunächst auf die erste ausführbare Anweisung. Mit
einem Druck auf die Taste F11 (oder das Symbol ), wird die angezeigte
Anweisung ausgeführt und der Pfeil springt zur nächsten. Auf diese Weise
ist es möglich den Programmablauf Schritt für Schritt zu verfolgen.
Alternativ kann durch einen Klick auf
der automatische Programmablauf aktiviert werden (AutoStep). In diesem kleinen Beispiel kann man den
Bewegungen des Pfeils mühelos folgen, aber bei größeren Projekten werden
die schnellen Bewegungen schnell unübersichtlich.
Mit kehrt man zum Einzelschrittmodus zurück oder beendet den DebugModus durch einen Klick auf (mit kann dieser erneut gestartet werden).
16
Ein Klick auf
simuliert das Rücksetzen (Reset) des Mikrocontrollers,
der Pfeil springt wieder auf die erste ausführbare Anweisung zurück und alle
Register werden auf die Initialwerte zurückgesetzt.
Eine interessante Funktion ist über den Button
zugänglich. Dieser
bietet die Möglichkeit, den eigenen C-Code im AVR-Assembler anzusehen.
In der Darstellung des Assemblercodes werden die C-Befehle an der ansprechenden Stelle eingefügt und der Assemblercode automatisch kommentiert.
In der I/O Ansicht im Fenster auf der linken Seite unter dem Punkt
“I/O ATMEGA16“ (gekennzeichnet mit einem Ampelsymbol), gibt es einen
Unterpunkt mit dem Titel “PORTA“. Klappt man diesen auf, kommen drei
weitere Punkte zum Vorschein: PORTA, DDRA und PINA. Auf diese werde
ich jetzt genauer eingehen.
Das DDRA Register gibt die Datenrichtung für den Port A an. Eine eins
(in der I/O-Ansicht ein schwarzes Kästchen) steht für Ausgabe, eine null
(weißes Kästchen) für Eingabe. Die Datenrichtung wird im Beispielprogramm
durch die Anweisung
DDRA = 0xff;
festgelegt, es werden alle Pins des Port A auf Ausgabe geschaltet (die
Ausführung dieses Befehls ist im Debug-Modus nach dreimaligem Drücken
der Taste F11 zu sehen). Im nächsten Schritt wird die Variable “zahl“ an den
Port A ausgegeben. In der I/O-Ansicht passiert folgendes: Zunächst nimmt
PORTA den Wert 0xFF (255) an und beim nächsten Schritt PINA. Wie darf
man das verstehen?
Das Register PORTA steht für den Zustand der internen pull-up-Widerstände,
PINA dagegen für den tatsächlichen Pegel an den einzelnen Ausgabepins.
Bei der Ausgabe der Zahl werden nun zuerst die pull-up-Widerstände
auf den gewünschten Pegel gebracht und erst im nächsten Schritt (also beim
nächsten Takt) wird dieser Wert auch tatsächlich an die Pins ausgegeben.
Somit funktioniert der Simulator im AVR-Studio genau wie ein wirklicher
Mikrocontroller: Bei diesem erfolgt die Ausgabe an die Pins ebenfalls mit
einer Verzögerung von einem Takt.
17
Kapitel 4
Quellenverzeichnis
Abbildungsverzeichnis:
Abb. 1 - Mikrocontroller, schematischer Aufbau:
www.erkenntnishorizont.de/robotik/uc/ucuebersicht.c.php
Abb. 2 - AVR-Studio: selbsgemachtes Screenshot
Quellenverzeichnis:
direkt verwiesene Quellen:
[1]
[2]
[3]
[4]
[5]
[6]
-
www.uni-koblenz.de/~physik/informatik/techC.pdf, Seite 167, Zeile 4
www.rowalt.de/mc/avr/about.htm
www.mikrocontroller.net/articles/AVR
http://de.wikipedia.org/wiki/Atmel_AVR
www.atmel.com/dyn/products/tools_card.asp?tool_id=2725
http://winavr.sourceforge.net/
18
alle Quellen:
Literatur:
Zengin, Zekeriya: Motorola 68HC05: B-Familie,
Verlag Heinz Heise GmbH & Co KG: 19941
König, Anne und Manfred: Das PICmicro Profi-Buch,
Franzis’ Verlag GmbH: 19991
Internet:
www.ti.et-inf.uni-siegen.de/Mitarbeiter/Schwender/
mikrocontroller/Was_ist_ein_Mikrocontroller.pdf
www.mikrocontroller.net/articles/Mikrocontroller
www.mikrocontroller.net/articles/AVR
www.mikrocontroller.net/articles/AVR-GCC
www.mikrocontroller.net/articles/AVR-GCC-Tutorial
www.mikrocontroller.net/articles/PIC
www.mikrocontroller.net/articles/8051
www.mikrocontroller.net/articles/68HC05
www.mikrocontroller.net/articles/68HC08
www.uni-koblenz.de/~physik/informatik/techC.pdf
- Seite 144, sowie 167 ff.
www.at-mix.de/risc.htm
www.at-mix.de/cisc.htm
www.elektronik-kompendium.de/sites/com/0412281.htm
www.elektronik-kompendium.de/sites/com/0501011.htm
www.rowalt.de/mc/avr/about.htm
www.atmel.com/dyn/resources/prod_documents/COMPILER.pdf
http://de.wikipedia.org/wiki/Atmel_AVR
19
aktuelle Mikrocontroller:
www.microchip.com/ParamChartSearch/chart.aspx?
branchID=1031&mid=10&lang=en&pageId=74
www.freescale.com/files/microcontrollers/doc/
fact_sheet/8BITCIPRODMPFS.pdf
www.atmel.com/dyn/products/param_table.asp?
family_id=607&OrderBy=part_no&Direction=ASC
www.atmel.com/dyn/products/param_table.asp?
family_id=604&OrderBy=part_no&Direction=ASC
Datenblätter der in den Vergleichen aufgeführten Mikrocontroller:
ATtiny25:
ATmega2560:
ATmega16:
www.atmel.com/dyn/resources/prod_documents/doc2586.pdf
www.atmel.com/dyn/resources/prod_documents/doc2549.pdf
www.atmel.com/dyn/resources/prod_documents/doc2466.pdf
PIC12F635:
PIC18F8722:
ww1.microchip.com/downloads/en/DeviceDoc/41232B.pdf
ww1.microchip.com/downloads/en/DeviceDoc/39646b.pdf
MC908QT2A:
www.freescale.com/files/microcontrollers/doc/data_sheet/
MC68HC908QY4A.pdf
MC68HC908GR60A: www.freescale.com/files/microcontrollers/doc/data_sheet/
MC68HC908GR60A.pdf
MC68HC05B6:
www.freescale.com/files/microcontrollers/doc/data_sheet/
MC68HC05B6.pdf
20