1 Mikrocontrollergrundlagen

Werbung
Klaus Dembowski hat Nachrichtentechnik studiert und ist an der
Technischen Universität Hamburg-Harburg tätig. Seine Schwerpunkte liegen in den Bereichen Mikrocontrollerentwicklung, Hardund Software für Mikrosysteme sowie Energy Harvesting. Bei der
Vermittlung aktueller Inhalte aus den Bereichen der Elektronik
sowie der Informations- und Netzwerktechnik kann er auf eine
langjährige Erfahrung als Autor und Dozent zurückgreifen. Die
mittlerweile über 40 erschienenen Buchtitel zeichnen sich ebenso
wie die regelmäßig erscheinenden Zeitschriftveröffentlichungen,
Seminare und Vorträge durch eine verständliche und praxisorientierte Darstellung auch komplexer Sachverhalte aus.
Zu diesem Buch – sowie zu vielen weiteren dpunkt.büchern –
können Sie auch das entsprechende E-Book im PDF-Format
herunterladen. Werden Sie dazu einfach Mitglied bei dpunkt.plus+:
www.dpunkt.de/plus
Klaus Dembowski
Mikrocontroller – 
Der Leitfaden für Maker
Schaltungstechnik und Programmierung von 
Raspberry, Arduino & Co.
Klaus Dembowski
Lektorat: Dr. Michael Barabas
Copy-Editing: Friederike Daenecke, Zülpich
Herstellung: Frank Heidt
Umschlaggestaltung: Helmut Kraus, www.exclam.de 
Druck und Bindung: M.P. Media-Print Informationstechnologie GmbH, 33100 Paderborn
Bibliografische Information der Deutschen Nationalbibliothek
Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie;
detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.
ISBN:
Buch 978-3-86490-150-8
PDF 978-3-86491-511-6
ePub 978-3-86491-512-3
1. Auflage 2014
Copyright © 2014 dpunkt.verlag GmbH
Wieblinger Weg 17
69123 Heidelberg
Die vorliegende Publikation ist urheberrechtlich geschützt. Alle Rechte vorbehalten. Die Verwendung
der Texte und Abbildungen, auch auszugsweise, ist ohne die schriftliche Zustimmung des Verlags
urheberrechtswidrig und daher strafbar. Dies gilt insbesondere für die Vervielfältigung, Übersetzung
oder die Verwendung in elektronischen Systemen.
Es wird darauf hingewiesen, dass die im Buch verwendeten Soft- und Hardware-Bezeichnungen sowie
Markennamen und Produktbezeichnungen der jeweiligen Firmen im Allgemeinen warenzeichen-, 
marken- oder patentrechtlichem Schutz unterliegen.
Alle Angaben und Programme in diesem Buch wurden mit größter Sorgfalt kontrolliert. Weder Autor
noch Verlag können jedoch für Schäden haftbar gemacht werden, die in Zusammenhang mit der 
Verwendung dieses Buches stehen.
543210
v
Vorwort
Praktische Bücher über Mikrocontroller behandeln üblicherweise einen ganz
bestimmten Typ, der dementsprechend programmiert und eingesetzt wird. Lehrbücher über Mikrocontroller konzentrieren sich fast ausschließlich auf theoretische Gesichtspunkte, gehören nicht selten »zur trockenen Materie« und lassen
einen aktuellen Praxisbezug oft vermissen. Mit diesem Buch wird versucht Theorie und Praxis anschaulich zu verbinden, wobei verschiedenste aktuelle Mikrocontroller und Boards zum Einsatz kommen, die sowohl erläutert als auch eingesetzt werden.
Das erste Buch, das ich geschrieben habe, hat den Titel Intel-8096-Microcontroller-Familie – Ein Handbuch für Programmierer und Systementwickler aus
dem Jahre 1989. Der Intel 8096 war der erste 16-Bit-Microcontroller und wurde
insbesondere für Embedded Systems wie beispielsweise bei Motorsteuerungen
häufig eingesetzt. Fast 25 Jahre oder auch ca. 50 Bücher später, die sich vorwiegend mit PC- und Netzwerktechnik beschäftigt haben, also wieder ein Mikrocontrollerbuch.
Die Grundfunktionalität eines Mikrocontrollers hat sich in der Zwischenzeit
zwar kaum verändert, allerdings ist diese Thematik nun nicht mehr allein den
Programmierern und Systementwicklern vorbehalten, was insbesondere der
Arduino- und der Raspberry-Pi-Plattform zu verdanken ist, die es mit einem fast
spielerischen Ansatz erlauben, dass jedermann kostengünstig Projekte verwirklichen kann, die einen Mikrocontroller oder auch einen Single-Board-Computer
einsetzen. Wer bereits erste Erfahrungen mit diesen oder ähnlichen Systemen
gesammelt hat und weiter in die Elektronik und Programmierung einsteigen
möchte, der kann mit diesem Buch auf einen verlässlichen Ratgeber und Leitfaden zurückgreifen.
Die ersten Kapitel sind durchaus für Anfänger geeignet. Der Schwierigkeitsgrad wird im Verlauf des Buches zunehmend höher, was der Tatsache geschuldet
vi
Vorwort
ist, dass die Funktionen der Einheiten, wie für das Energy Harvesting oder auch
für Funksysteme notwendig sind, eben komplexer sind. Wer sich jedoch von
Kapitel zu Kapitel »hocharbeitet«, wird zunehmend auch die komplizierteren
Zusammenhänge erschließen können. Der Profi wird hingegen meist selektiv
direkt die für ihn interessanten Teile anvisieren, weil sich das Buch vom Aufbau
her auch als Nachschlagewerk eignet.
Klaus Dembowski 
Februar 2014
vii
Inhaltsverzeichnis
1 Mikrocontrollergrundlagen
1
1.1
Architekturen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2
Complex und Reduced Instruction Set Computer . . . . . . . . . . . . . . 4
1.3
Start mit Mikrocontrollern der Firma Intel . . . . . . . . . . . . . . . . . . . 6
1.3.1
Low Power . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.4
Spannungsversorgung, Oszillator und Reset . . . . . . . . . . . . . . . . . 10
1.5
Arbeitsspeicher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.6
Interrupt-Logik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.7
Watchdog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.8
Brown Out Detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.9
JTAG-Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.10 DMA-Logik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.11 Adressierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.12 Programmierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2 Mikrocontrollerfamilien beurteilen und auswählen
2.1
8051-Mikrocontroller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.1.1
2.2
27
Architektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Microchip-Mikrocontroller – PIC . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.2.1
Architektur und Ausstattungsmerkmale . . . . . . . . . . . . . .
Oszillatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Reset-Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ICSP-Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Programmspeicher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
39
40
41
43
viii
Inhaltsverzeichnis
2.2.2
2.2.3
2.2.4
2.2.5
2.3
Architektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
AVR-Controller-Familien im Überblick . . . . . . . . . . . . . . .
Power-Save-Betriebsarten . . . . . . . . . . . . . . . . . . . . . . . . .
Entwicklungsumgebung . . . . . . . . . . . . . . . . . . . . . . . . . . .
Architektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MSP430-Controllerfamilien . . . . . . . . . . . . . . . . . . . . . . . .
Low Power Modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Entwicklungsumgebung und Programmierung . . . . . . . . . .
64
67
71
72
ARM-Prozessoren und -Mikrocontroller . . . . . . . . . . . . . . . . . . . . 77
2.5.1
2.5.2
2.5.3
ARM-Architektur und -Typen . . . . . . . . . . . . . . . . . . . . . .
Cortex-Cores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
EFM32-Gecko . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Peripheral Reflex System . . . . . . . . . . . . . . . . . . . . . . . . . .
Advanced Energy Monitoring . . . . . . . . . . . . . . . . . . . . . .
Energy Aware Profiler . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Betriebsarten – Energy Modes . . . . . . . . . . . . . . . . . . . . . .
Entwicklungsplattform . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3 Single-Board-Systeme einsetzen
3.1
56
58
60
62
MSP430-Mikrocontroller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
2.4.1
2.4.2
2.4.3
2.4.4
2.5
44
44
44
44
45
45
45
46
46
46
47
50
51
Atmel-Mikrocontroller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
2.3.1
2.3.2
2.3.3
2.3.4
2.4
Konfigurationsdaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Taktgeneratoreinstellung . . . . . . . . . . . . . . . . . . . . . . . . . .
Power Up Timer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Brown Out Detect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Watchdog Timer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CCP2Mux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Stack Overflow Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Low Voltage Programming . . . . . . . . . . . . . . . . . . . . . . . .
Code Protection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Schreiben der Konfigurationsdaten . . . . . . . . . . . . . . . . . . .
PIC-Mikrocontrollerfamilien . . . . . . . . . . . . . . . . . . . . . . .
NanoWatt-Technologie . . . . . . . . . . . . . . . . . . . . . . . . . . .
Entwicklungsumgebung . . . . . . . . . . . . . . . . . . . . . . . . . . .
78
81
84
87
88
92
93
95
101
Raspberry Pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
3.1.1
3.1.2
Inbetriebnahme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Netzwerkverbindung herstellen . . . . . . . . . . . . . . . . . . . .
Manuelle Konfigurierung . . . . . . . . . . . . . . . . . . . . . . . .
SSH- und FTP-Verbindungen . . . . . . . . . . . . . . . . . . . . . .
104
109
110
112
Inhaltsverzeichnis
ix
3.1.3
Software und Programmierung . . . . . . . . . . . . . . . . . . . . 114
3.2
Beaglebone Black . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
3.3
mbed-Plattform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
3.4
Gadgeteer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
3.5
Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
3.5.1
3.5.2
3.5.3
Boards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Shields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Start und Entwicklungsumgebung . . . . . . . . . . . . . . . . . . 131
4 Anwenderprogrammierbare Ein- und Ausgabeeinheiten
135
4.1
GPIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
4.2
UART, USART und serielle Schnittstelle . . . . . . . . . . . . . . . . . . . 137
4.3
I2C-Bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
4.4
Serial Peripheral Interface – SPI . . . . . . . . . . . . . . . . . . . . . . . . . . 143
4.5
A/D-Wandler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
4.6
D/A-Wandler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
4.7
PWM-Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
5 Spannungsversorgungen planen und aufbauen
153
5.1
Netzteile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
5.2
Batterien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
5.3
Akkumulatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
5.3.1
5.3.2
5.3.3
5.3.4
5.3.5
5.4
Bleiakkumulator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Nickel-Cadmium-Akkumulator . . . . . . . . . . . . . . . . . . . .
Nickel-Metall-Hydrid-Akkumulator . . . . . . . . . . . . . . . .
Ladeschaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Lithium-Ionen-Akkumulator . . . . . . . . . . . . . . . . . . . . . .
Lithium-Polymer-Akkumulator . . . . . . . . . . . . . . . . . . . .
Ladeschaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
159
160
161
162
162
164
164
Energy Harvesting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
5.4.1
Solarzellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Funktionsprinzip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Elektrisches Verhalten . . . . . . . . . . . . . . . . . . . . . . . . . . .
Standard Test Conditions . . . . . . . . . . . . . . . . . . . . . . . .
Typen
.....................................
169
169
170
172
174
x
Inhaltsverzeichnis
5.4.2
5.4.3
5.4.4
5.5
Piezoelemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Aufbau und Typen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Wandlerschaltung mit selbst gebautem Balkenschwinger .
Elektrodynamische Wandler . . . . . . . . . . . . . . . . . . . . . . .
Thermogeneratoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
177
178
179
184
186
Energiespeicher und Energiemanagement . . . . . . . . . . . . . . . . . . . 190
5.5.1
5.5.2
Kondensatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Solid State Batteries . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Thin-Film Batteries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ladeschaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
EnerChips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
EnerChips mit Power-Management-Logik . . . . . . . . . . . .
Energy-Harvesting-Module und Energy Processor . . . . . .
6 Die Funkpraxis
190
194
194
195
197
198
200
207
6.1
ISM-Bänder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
6.2
Nahfunksysteme in der Übersicht . . . . . . . . . . . . . . . . . . . . . . . . . 210
6.3
Modulationsverfahren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
6.4
WLAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
6.5
Sensorknoten im WLAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.6
Chips und Schaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
Software und Programmierung . . . . . . . . . . . . . . . . . . . . . 243
ZigBee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
6.8.1
6.8.2
6.9
Topologien und Implementierungen . . . . . . . . . . . . . . . . . 230
Entwicklungssystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
Bluetooth Low Energy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
6.7.1
6.7.2
6.8
219
220
221
223
226
227
Bluetooth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
6.6.1
6.6.2
6.7
Inbetriebnahme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Systemaufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Konfigurierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Erweiterungsschaltungen . . . . . . . . . . . . . . . . . . . . . . . . .
Sensoren am SPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Steuerung mit Mikrocontroller . . . . . . . . . . . . . . . . . . . . .
Topologien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
ZigBee Green Power . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
ANT/ANT+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
6.10 Low-Power-Funklösungen – Low Power RF . . . . . . . . . . . . . . . . . 251
Inhaltsverzeichnis
6.10.1
6.10.2
6.10.3
6.10.4
6.10.5
6.10.6
xi
Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Transceiver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Datenrate und Reichweite . . . . . . . . . . . . . . . . . . . . . . . .
Einfache Kommunikation aufbauen . . . . . . . . . . . . . . . .
SimplicTI-Protokoll . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
252
254
257
258
260
261
6.11 EnOcean-Funktechnik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
6.11.1 Dolphin System Architecture . . . . . . . . . . . . . . . . . . . . . . 266
6.11.2 Starter und Programmer Kit . . . . . . . . . . . . . . . . . . . . . . 272
6.11.3 Entwicklung und Programmierung . . . . . . . . . . . . . . . . . 277
7 Mess- und Steuerschaltungen für den Raspberry Pi
291
7.1
GPIO-Port . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
7.2
A/D- und D/A-Wandlerplatine für SPI . . . . . . . . . . . . . . . . . . . . 293
7.2.1
7.3
Python und grafische Oberfläche . . . . . . . . . . . . . . . . . . . 303
Erweiterungen mit I2C-Bus-Schaltungen . . . . . . . . . . . . . . . . . . . 315
7.3.1
7.3.2
7.3.3
7.3.4
Temperaturmessung . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LCD-Ansteuerung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A/D- und D/A-Messung . . . . . . . . . . . . . . . . . . . . . . . . . .
Echtzeituhr stellen und lesen . . . . . . . . . . . . . . . . . . . . . .
8 Solarzellentester selbst gebaut
322
325
326
331
339
8.1
Verfahren für die Charakterisierung von Solarzellen . . . . . . . . . . 339
8.2
Schaltungsaufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
8.2.1
8.2.2
8.2.3
8.2.4
Spannungsversorgung . . . . . . . . . . . . . . . . . . . . . . . . . . .
Widerstandsmatrix und Peripherie . . . . . . . . . . . . . . . . .
Relais und Treiber . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Lichtsensor zur Messung der Beleuchtungsstärke . . . . . .
342
344
347
348
8.3
Programmablauf und Bedienung . . . . . . . . . . . . . . . . . . . . . . . . . 350
8.4
Implementierung der Software . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
8.4.1
8.4.2
8.4.3
8.4.4
8.4.5
Index
LCD- und Menüsteuerung . . . . . . . . . . . . . . . . . . . . . . . .
Messen der Beleuchtungsstärke . . . . . . . . . . . . . . . . . . .
Maximum-Power-Point-Messung . . . . . . . . . . . . . . . . . .
Leerlaufspannung und Kurzschlussstrom messen . . . . . .
Ausgabe der Messergebnisse . . . . . . . . . . . . . . . . . . . . . .
353
355
360
362
364
377
1
1
Mikrocontrollergrundlagen
Das erste Kapitel hat üblicherweise einen in das Thema einführenden Charakter,
sodass hier eine Einführung in die Mikrocontrollertechnik gegeben ist, die sich insbesondere an den Einsteiger richtet. Nach einer kurzen Erläuterung der grundlegenden
Architekturen von Prozessoren und zur Entstehungsgeschichte der Mikrocontroller
werden die wichtigen Schaltungseinheiten von Mikrocontrollern behandelt, und
gezeigt, wie sie adressiert und wie sie grundsätzlich programmiert werden. Dieses
Basiswissen bildet das notwendige Rüstzeug für die folgenden Kapitel.
Mikrocontroller kommen für kompakte Lösungen, beispielsweise in Haushaltsgeräten, in Kraftfahrzeugen und in industriellen Steuerungen in vielfältiger Art
und Weise zum Einsatz. Im Prinzip stellt ein Mikrocontroller einen Mikroprozessor dar, der um bestimmte Einheiten – wie einen Interrupt-Controller, um I/OPorts oder auch um Analog/Digital-Wandler – erweitert wurde. Diese speziellen
Einheiten sind für die jeweilige Geräteaufgabe, die typischerweise sowohl digitale
als auch analoge Funktionsblöcke umfasst, als systemimmanent zu betrachten,
wie es allgemein bei den sogenannten Embedded Systems der Fall ist. Ein Embedded System wird für eine ganz bestimmte Aufgabe entwickelt, wobei der Mikrocontroller die zentrale Rolle spielt, für die er entsprechend ausgelegt ist und programmiert wurde.
1.1
Architekturen
Bei der Charakterisierung von Mikroprozessoreigenschaften wird oftmals zwischen der Von-Neumann- und der Harvard-Architektur unterschieden. Da ein
Mikrocontroller als ein um bestimmte Funktionen erweiterter Mikroprozessor
betrachtet werden kann, gilt diese grundlegende Einteilung ebenfalls für die
Mikrocontroller.
2
1 Mikrocontrollergrundlagen
Johann von Neumann, geboren 1903 in Budapest, gestorben 1957 in
Washington, definierte grundlegende Bestandteile eines Rechners, wie sie miteinander verbunden sind und wie sie miteinander kommunizieren. Zur damaligen
Zeit nannte man Computer im deutschsprachigen Raum meist Rechner, weil die
einzige Aufgabe, die sie (scheinbar) hatten, das Rechnen war.
Der erste Rechner, der nach dem Von-Neumann-Prinzip funktionierte, wurde
1952 nach dreijähriger Bauzeit in den USA fertiggestellt. Andere bekannte Funktionsprinzipien von Computern sind neben der Von-Neumann-Architektur, die
sich durch eine sequenzielle Abarbeitung der Befehle auszeichnet, parallel arbeitende Architekturen, die oftmals als Superskalar, RISC oder CCM (Customized
Computing Machines) bezeichnet werden.
Wie noch erläutert wird, erfolgt häufig eine Aufteilung von Computersystemen in RISC-Architekturen einerseits und CISC-Architekturen andererseits, die
dann oftmals dem Von-Neumann-Modell entsprechen. Eine bekannte Ausnahme
bilden die ARM7-Prozessoren (Abschnitt 2.5), die als RISC in einer Von-Neumann-Architektur aufgebaut sind.
Abb. 1–1
Die Architektur nach von Neumann
Folgende Eigenschaften zeichnen ein System nach der Von-Neumann-Architektur
aus:
■ Der Computer ist zentral gesteuert und verfügt deshalb über eine Central Processing Unit (CPU). Die CPU ist dabei in eine Steuereinheit (CU = Control
Unit) und in eine Recheneinheit (ALU = Arithmetical Logical Unit) aufgeteilt.
■ Neben einer CPU gibt es einen Speicher und eine separate Ein-/Ausgabeeinheit, wobei diese Einheiten über Bussysteme elektrisch miteinander verbunden sind.
■ Die Programme und Daten stehen im gleichen Speicher.
■ Die Abarbeitung der Befehle erfolgt sequenziell.
1.1 Architekturen
3
Das grundsätzliche Funktionsprinzip ist, dass zunächst ein Befehl anhand einer
Adresse aus dem Speicher geladen wird. Für die Abarbeitung des Befehls werden
daraufhin die jeweiligen Daten in das Rechenwerk geladen. Dem Befehlscode entsprechend werden die Daten daraufhin verarbeitet und gespeichert. Demnach
handelt es sich bei dieser Arbeitsweise um ein (streng) sequenzielles Verfahren.
Mitunter wird das Prinzip der Von-Neumann-Architektur als Stored Program
Concept bezeichnet, was als wesentliches Merkmal herausgehoben werden kann.
Insbesondere im Zusammenhang mit Mikrocontrollern und mit Digitalen
Signal Prozessoren (DSP) wird oftmals angegeben, dass sie nach der HarvardArchitektur arbeiten. Diese Architektur ist jedoch keineswegs als Alternative zur
Von-Neumann-Architektur oder zu irgendeiner anderen zu betrachten. Es handelt sich im Grunde genommen lediglich um eine Variante des Von-NeumannModells, die den Speicher aufteilt, und zwar in einen Programm- und in einen
Datenspeicher. Alle anderen wesentlichen Merkmale der Von-Neumann-Architektur gelten auch für die Harvard-Architektur, sodass diese Unterscheidung mitunter zu missverständlichen Interpretationen führt.
Abb. 1–2
Speicherarchitektur nach Harvard und nach von Neumann
Durch die physikalische Trennung von Daten- und Programmspeicher sind bei
der Harvard-Architektur für beide Speicherbereiche jeweils ein eigener Datenbus
(Programme sind auch Daten) sowie ein eigener Adressbus bzw. Adressgenerator
notwendig, was einen entsprechend ausgelegten Prozessor oder auch eine spezielle Zusatzlogik erfordert.
Bei den ersten PIC-Mikrocontrollern wird der Programmspeicher (Flash) beispielsweise in einer Breite von 12 Bit und der Datenspeicher mit 8 Bit (SRAM)
betrieben. Bei Controllern nach von Neumann wie dem ARM7 sind hingegen
beide Speicherpfade gleich breit.
Ein offensichtlicher Vorteil der Harvard-Architektur ist, dass ein gleichzeitiger Zugriff auf Programmcode und Daten möglich ist. Die CPU kann bereits den
folgenden Befehl lesen, während die aktuellen Daten geladen oder gespeichert
werden.
4
1 Mikrocontrollergrundlagen
Weil die typischen Mikrocontroller den Daten- und den Programmspeicher
lediglich intern realisieren und mit einem festen Programm (Firmware) arbeiten,
bietet die Harvard-Architektur hierfür eine ideale Plattform, obwohl ihre Realisierung (siehe Abbildung 1–2) aufwendiger erscheint.
Für Mikrocontroller wird mitunter auch angegeben, dass sie mit einer Modified Harvard Architecture arbeiten, was bedeutet, dass es keine strikte Trennung
zwischen Programm- und Datenspeicher gibt, sondern dass – je nach Typ – unterschiedliche Methoden existieren, um diese Prinzipientrennung aufzubrechen,
etwa wenn beide Speichersysteme in der gleichen Busbreite arbeiten oder die
separaten Adressbereiche »durchlässig« gestaltet werden. Ein wichtiger Grund
für diese Modifizierung besteht darin, dass andernfalls Hochsprachen-Compiler
(C, BASIC) nicht ohne Weiteres einsetzbar wären.
1.2
Complex und Reduced Instruction Set Computer
Ende der Siebzigerjahre gab es bereits einige Mikroprozessoren, und es entstand
eine Spezialisierung einerseits in Standardprozessoren, wie etwa in die 8086Familie für Personal Computer, andererseits in Mikrocontroller und digitale Signalprozessoren.
Mikrocontroller, wie der damals eingeführte Typ 6805 von Motorola oder
der 8051 von Intel, verfügen generell über verschiedene Peripherie-Einheiten On
Chip, wie den Speicher, verschiedene Ports und möglicherweise auch Umsetzer
(z. B. A/D-Wandler), die bei Standardprozessoren noch als separate Einheiten
hinzugefügt werden müssten.
Mikrocontroller kommen als kompakte Lösungen, beispielsweise in Haushaltsgeräten, in Kraftfahrzeugen und in industriellen Steuerungen zum Einsatz
und werden auch als Embedded Systems (eingebettete Systeme) bezeichnet. Digitale Signalprozessoren (DSP) sind demgegenüber insbesondere für die digitale
Verarbeitung analoger Signale konzipiert. Eine klassische Anwendung liegt in der
Realisierung digitaler Filter, wie sie beispielsweise mit dem ersten DSP – dem
2920 – im Jahre 1979 von Intel programmiert worden sind. Allgemein werden
DSPs für die Signalsynthese, etwa für die Audio- und Videoverarbeitung sowie
für Übertragungsfunktionen in der Nachrichtentechnik eingesetzt.
Bei den Standardprozessoren für den universellen Einsatz wurden zwei unterschiedliche Architekturen diskutiert und realisiert: Dabei handelt es sich um die
Reduced Instruction Set Computer (RISC) und die Complex Instruction Set
Computer (CISC), wobei die verbreiteten Prozessoren der Firma Intel (80x86Generation), die den PC-Standard manifestiert haben, zu den CISC-Systemen
gehören.
1.2 Complex und Reduced Instruction Set Computer
5
Wie es die Bezeichnung complex ausweist, verfügen CIS-Computer über
einen (relativ) komplexen und umfangreichen Befehlssatz. Der 80386-Prozessor,
der die 32 Bit Intel Architecture (IA-32) begründet, kennt bereits ca. 300 Befehle,
und mit jeder neuen Prozessorgeneration sowie mit den Befehlssatzerweiterungen
(MMX, SSE) sind zahlreiche weitere hinzugekommen, was aufgrund verschiedener Befehlsformate und Befehlslängen (1 Byte bis zu 17 Byte) tatsächlich zu komplexen Codierungen führt. Demgegenüber besitzen die CISC-Typen nur (relativ)
wenige Register, die recht universell einsetzbar sind. Die IA-32 kennt lediglich
acht Allzweckregister.
Es zeigte sich, dass viele der komplexen Befehle eher selten eingesetzt wurden
(und werden). Dies liegt zum einen daran, dass komplexe Rechenvorgänge in der
Praxis längst nicht so häufig auftreten wie einfache, für die zahlreiche Einzelschritte und Einzelentscheidungen notwendig sind. Zum anderen setzen
Programmierer oftmals vertraute Befehle ein, und dies sind vielfach nicht die
komplexen, sondern die einfachen. So bewiesen auch Untersuchungen – beispielsweise von IBM –, dass in typischen Programmen nur etwa 20 % der zur
Verfügung stehenden Befehle eingesetzt werden, die aber 80 % der Programmverarbeitungszeit in Anspruch nehmen.
Daraus kann man folgern, dass es Sinn macht, nur relativ wenige Befehle zu
implementieren, die dafür aber möglichst schnell – möglichst innerhalb eines einzigen Taktzyklus – ausgeführt werden können, was somit zu den RISC-Systemen
(Intel 860, SPARC, PowerPC, MIPS) führt, die über einen relativ kleinen, reduzierten Befehlssatz (Reduced Instruction Set Computer), dafür jedoch über viele Register verfügen. Das Vorhandensein möglichst vieler interner Register bedeutet, dass
hier auch eine Vielzahl von Operanden vorgehalten werden können, die andernfalls
mit dem relativ langsamen (externen) Hauptspeicher verarbeitet werden müssten.
Diese Unterteilung in RISC und CISC erscheint bereits seit einiger Zeit überholt, denn es gibt kaum mehr Mikroprozessoren und damit auch Mikrocontroller, die sich eindeutig der einen oder der anderen Kategorie zuordnen lassen. Der
Pentium-kompatible Prozessor K5 der Firma AMD arbeitet als erste CPU für Personal Computer intern nach dem RISC-Prinzip anhand von sogenannten RISC
OPerations (ROPs). Dabei werden die komplexeren CISC-Befehle in elementare
ROPs umgesetzt. Anschließend werden nur die ROPs ausgeführt, nicht mehr die
ursprünglichen x86-Befehle. Bei der Firma Intel wird dieses Verfahren ab dem
Pentium Pro eingesetzt, wobei die ROPs hier als μOPs (Micro Operations)
bezeichnet werden. Demnach arbeitet auch in einem CISC-Mikroprozessor ein
RISC-Mechanismus.
Dass ein RISC-Prozessor über wesentlich mehr Register als ein CISC-Prozessor verfügt, stimmt in dieser allgemeinen Formulierung auch schon längst nicht
6
1 Mikrocontrollergrundlagen
mehr, denn die explizit als RISC-Mikrocontroller bezeichneten Typen, wie von
Microchip und Atmel, kennen auch nur vier bis acht universell einsetzbare Register. Vielmehr sollte der nach wie vor häufig benutzte Begriff RISC bei den Mikrocontrollern so interpretiert werden, dass hier verschiedene Eigenschaften im Verhältnis zur einer typischen RISC-Architektur wie IA-32 reduziert sind: der
Befehlssatz, der Programmieraufwand, die Gehäuse und der Preis sowohl für den
Chip selbst als auch für die Entwicklungswerkzeuge.
1.3
Start mit Mikrocontrollern der Firma Intel
Im Jahre 1976 stellte die Firma Intel den ersten Mikrocontroller, den 8048, vor.
Er wurde in der Original IBM-PC-Tastatur in einer ROM- (8048, 8049) oder
auch in einer EPROM-Version (8748) als Tastaturcontroller eingesetzt. Die
Kenndaten sind wie folgt:
■ 8-Bit-CPU, Modified Harvard Architecture
■ 90 Befehle
■ Programmspeicher: 1 k × 8 (1 kByte × 8 Bit)
■ Datenspeicher: 64 Bytes × 8 Byte
■ 27 I/O-Ports
■ 8 Bit Timer/Event Counter
■ Interrupt-Logik
■ Oszillator- und Takt-Generierung (max. 11 MHz)
■ Zykluszeit von minimal 2,5 μs
■ Reset-Schaltung
■ 40-poliges DIP-Gehäuse
■ 5-V-Versorgung (1,5 W, NMOS)
Auf dem Mainboard des IBM-PC-AT wurde ein weiterer Vertreter aus der schnell
angewachsenen MCS-48-Mikrocontrollerserie eingebaut, ein 8042 (2 k ROM,
128 Byte RAM) oder auch ein 8041 (1 k ROM, 64 Byte RAM), der gegenüber dem
8048/8049-Controller über ein programmierbares, paralleles Interface verfügt.
Hiermit wurden das Tastatur-Interface sowie die Umschaltung zwischen Real
Mode und Protected Mode (Gate A20) und einige Peripheriefunktionen (Lautsprecher, Keylock, Turbo Switch) realisiert. Aufgrund des Standards, den der
IBM-PC begründete, haben diese Mikrocontroller eine große Verbreitung insbesondere im PC-Bereich gefunden und wurden auch von anderen Firmen in Lizenz
nachgebaut.
1.3 Start mit Mikrocontrollern der Firma Intel
Abb. 1–3
7
Der Mikrocontroller 8042, hier von der Firma AMI, für ein PC-Mainboard
Intel stellte knapp drei Jahre später einen neuen Mikrocontroller vor, den 8051.
Dieser Typ kann gewissermaßen als Urvater der Mikrocontroller schlechthin
betrachtet werden und wird heutzutage von zahlreichen Firmen und in den unterschiedlichsten Ausführungen angeboten. Ursprünglich verfügt er als Basis der
MCS-51-Familie über die folgenden Merkmale:
■ 8-Bit-CPU, Harvard Architecture
■ Separate Adressbereiche (16 Bit): 
Jeweils 64 kByte für Programm- und für Datenspeicher
■ 111 Befehle, Bit-Operationen
■ Programmspeicher: 4 k × 8 (4 kByte × 8 Bit)
■ Datenspeicher: 128 Bytes × 8 Byte
■ 32 I/O-Ports
■ Zwei 16-Bit-Timer/Event Counter
■ Interrupt-Logik, sechs Quellen, zwei Prioritätsstufen
■ UART Full Duplex (Serial Port)
■ Oszillator- und Takt-Generierung (max. 16 MHz)
■ Zykluszeit von minimal 1 μs
■ Reset-Schaltung
■ 40-poliges DIP-Gehäuse
■ 5-V-Versorgung (1 W, CHMOS)
Die angeführten Eigenschaften des 8051 markieren somit die wesentlichen Elemente eines Mikrocontrollers. Er enthält neben der CPU den Speicher, eine
Timer- und Interrupt-Logik, eine Oszillator- und eine Reset-Schaltung sowie
diverse I/O-Ports und eine serielle Schnittstelle. Der 8051 lässt sich zum CISCTyp mit Harvard-Architektur rechnen.
Bei aktuellen Mikrocontrollern gibt es noch weitere integrierte Schaltungseinheiten, die noch in den folgenden Abschnitten erläutert werden. Mehr zu den
aktuellen Vertretern der 8051-Mikrocontrollerfamilie ist im Abschnitt 2.1 zu finden.
8
Abb. 1–4
1.3.1
1 Mikrocontrollergrundlagen
Das Blockdiagramm des 8051 im Intel-Original aus dem Jahre 1980
Low Power
Der erste Schritt zu einem energiesparenderen Betrieb wurde beim 8051 durch
den Wechsel von der NMOS- zur HMOS- und insbesondere zur HCMOS-Technologie erreicht, auch wenn die Betriebsspannung noch bei 5 V lag.
Der 8051 in der CHMOS-Version kannte auch bereits zwei Power Saving
Modes: Idle und Power Down. Beide Optionen können in einem speziellen Register, Power Control (PCON), aktiviert werden, das zu den Special-Function-Registern
(SFR) gehört. Im Idle-Modus wird der Takt für die CPU abgeschaltet, für die
anderen Einheiten, wie den Interrupt-Controller, den Timer und den UART, bleibt
er aktiv. Deshalb können auftretende Interrupts den Idle-Mode auch wieder beenden. Die Stromersparnis gegenüber dem normalen Betrieb beträgt ca. 15 %.
Im Power-Down-Modus wird der Oszillator komplett deaktiviert, wobei der
Inhalt des internen RAMs und der Special-Function-Register erhalten bleibt. Der
Power-Down-Modus kann nur durch einen Hardware-Reset beendet werden,
wobei die SFR-Inhalte dann neu geschrieben werden, der RAM-Inhalt bleibt
erhalten.
Im Power-Down-Modus ist es zulässig, die Betriebsspannung auf 2 V zu
reduzieren, was dann zu einem minimalen Strom von 10 μA führt und – von heutigen Werten aus gesehen – zwar um circa zwei Zehnerpotenzen schlechter ist,
gleichwohl das nach wie vor gültige Prinzip der beiden Betriebsarten darstellt.
Details zu den aktuellen Stromsparmodi sind bei den einzelnen MikrocontrollerFamilien in den folgenden Kapiteln angegeben.
1.3 Start mit Mikrocontrollern der Firma Intel
XTAL 2
9
XTAL 1
OSC
INTERRUPT,
SERIAL PORT,
TIMER BLOCKS
CLOCK
GEN.
CPU
PD
IDL
Abb. 1–5
Die Stromsparmodi Idle (IDL=1) und Power Down (PD=1) in ihrer ursprünglichen Form
In den letzten Jahren sind eine Vielzahl von Mikrocontrollern auf dem Markt
gekommen, die mit Begriffen wie stromsparend, energieeffizient oder auch Long
Battery Lifetime und Extreme Low Power beworben werden. Einen Standard für
die verlässliche Beurteilung des Stromverbrauches gibt es jedoch nicht, sodass die
Hersteller jeweils ganz eigene Testkriterien zugrunde legen, die mitunter in der
Praxis gar nicht umzusetzen sind, dafür nicht selten mit vermeintlich ausdrucksstarken Attributen versehen werden und schon gar nicht für einen Vergleich
geeignet sind. Für den Entwickler ist es deshalb nicht einfach, hier den richtigen
Überblick zu gewinnen und nicht die Orientierung in diesem sich rasant entwickelnden Markt zu verlieren. In den folgenden Kapiteln werden die wichtigsten
Mikrocontroller(-familien) deshalb näher vorgestellt.
So schnell, wie einige Mikrocontroller auf dem Markt gekommen sind, sind
sie auch wieder vom Markt verschwunden, ohne dass für sie ein funktionsund/oder anschlusskompatibler Nachfolger zur Verfügung steht. Deshalb sind
aufgrund ihrer hohen »Chipfluktuation« Firmen wie Microchip und auch Atmel
mit ihren Mikrocontrollern selten in Produkten zu finden, die mehrere Jahre oder
sogar Jahrzehnte lang funktionieren und deshalb über diese Zeiträume unverändert mit den ursprünglichen Spezifikationen hergestellt und unterstützt werden
müssen.
Das in der Industrie oftmals geforderte Kriterium, dass in den Schaltungen
Bauelemente verwendet werden sollen, die von unterschiedlichen Firmen (Second
Source) hergestellt werden, ist mit den meisten aktuellen Mikrocontrollern ebenfalls kaum zu erfüllen.
Eine herstellerübergreifende Kompatibilität ist – wenn überhaupt – bei Mikrocontrollern gegeben, die auf einer traditionellen Architektur wie der 8051Architektur von Intel oder der ARM-Architektur basieren, auf beide wird in den
10
1 Mikrocontrollergrundlagen
folgenden Kapiteln noch näher eingegangen. Der Entwickler ist dennoch gezwungen, eine sehr genaue Verifizierung durchzuführen, denn bereits ein einziger,
anders genutzter Anschluss kann den Einsatz eines (vermeintlich) kompatiblen
Mikrocontrollers unmöglich machen.
1.4
Spannungsversorgung, Oszillator und Reset
Jeder Mikrocontroller benötigt eine Versorgungsspannung, wofür mehr oder
weniger viele Anschlüsse am Gehäuse vorhanden sind. In früheren Zeiten und
auch bei den traditionellen Typen wird eine Versorgungsspannung von 5 V benötigt. Bei neueren – stromsparenden Mikrocontrollern – sind typischerweise 3,3 V
oder auch 1,8 V notwendig. Je nach Typ sind auch Zwischenwerte möglich,
wobei stets das jeweilige Datenblatt zum Controller zu beachten ist. Grundsätzlich muss es sich um eine stabilisierte Spannungsversorgung handeln, die möglichst »sauber« sein sollte, also keine Störimpulse enthalten darf, die etwa von
einem Motor stammen, der mit der gleichen Quelle betrieben wird.
Abb. 1–6
Links zwei einzelne Quarze unterschiedlicher Bauform, die zum Schwingen eine zusätzliche
Beschaltung benötigen, und rechts ein Quarzoszillator, der die aufgedruckte Frequenz nach
dem Anschluss einer Versorgungsspannung selbsttätig ausgibt.
Die zweite Voraussetzung für den Betrieb eines Mikrocontrollers ist ein Takt, der
von einem Oszillator (Schwingkreis) erzeugt wird. Dieser kann bereits komplett
Controller-intern vorhanden sein, sodass dann keine separate Beschaltung erforderlich ist. Fast jeder Mikrocontroller erlaubt jedoch auch einen externen Takt,
der von einem Quarzoszillator oder einem Quarz plus zwei Kondensatoren aufgebaut wird. Meist ist diese Variante präziser als ein Chip-interner Takt, was bei
Anwendungen erforderlich wird, die ein sehr exaktes Timing erfordern.
Ein Mikrocontroller benötigt für den Start einen Reset-Impuls, der bei manchen Typen automatisch beim Anlegen der Spannung (Power-On-Reset) ausgelöst wird (genauer: wenn die Spannung einen bestimmten Pegel erreicht hat). Bei
anderen Typen ist hierfür eine externe Beschaltung notwendig, die sich im ein-
1.5 Arbeitsspeicher
11
fachsten Fall aus einem Widerstand und einem Kondensator zusammensetzt. Um
einen manuellen Reset auslösen zu können, wird zusätzlich ein Taster in der
Reset-Schaltung eingesetzt.
Abb. 1–7
Typische einfache Reset-Schaltungen
Korrekte Versorgungsspannung, Takt und Reset sind ganz generell die Mindestvoraussetzungen für den Betrieb eines Mikrocontrollers, sodass im Fehlerfall,
wenn der Controller überhaupt nicht zu funktionieren scheint, diese drei Punkte
mit einem Oszilloskop und die Spannung mit einem Multimeter zu kontrollieren
sind. Dabei sind die Messungen (möglichst) direkt an den Kontakten des Mikrocontrollers vorzunehmen.
Weil sich diese drei Betriebsparameter bei den verschiedenen Mikrocontrollern prinzipiell sehr stark voneinander unterscheiden können, wird hierauf bei
den einzelnen Mikrocontroller-Familien noch näher eingegangen.
1.5
Arbeitsspeicher
Jeder Mikrocontroller verfügt über einen sogenannten Arbeitsspeicher, der für
die Ablage von Daten und Programmen zuständig ist. Grundsätzlich unterscheidet man dabei zwischen einem Festwertspeicher (ROM) und einem Schreib-/Lesespeicher (RAM). Der Festwertspeicher kann vom Mikrocontroller während des
üblichen Betriebes nur gelesen werden, was für die Abarbeitung des im ROM
(Read Only Memory) fest gespeicherten Programms notwendig ist, während es
sich beim Schreib-/Lesespeicher um einen flüchtigen Speicher (volatile) handelt,
dessen Inhalt beim Abschalten der Versorgungsspannung verloren geht. Der
RAM-Speicher (Random Access Memory) ist demnach nur für die kurzzeitige
Speicherung von Daten und Programmen einsetzbar.
12
1 Mikrocontrollergrundlagen
Bei Mikrocontrollern wird der RAM-Speicher üblicherweise als SRAM
(Static RAM) realisiert, was bedeutet, dass die Information hier in Zellen abgelegt wird, die aus Flip-Flops aufgebaut sind. Bei Anwendungen, bei denen große
Arbeitsspeicherkapazitäten notwendig sind, werden hingegen DRAMs (Dynamic
RAM) eingesetzt, wie es etwa bei Personal Computern der Fall ist, wo die
DRAMs – je nach PC-Baujahr – auf verschiedenen Modulen (SIM, DIMM,
DDR) untergebracht sind. Im Vergleich zu SRAM ist DRAM wesentlich kostengünstiger, weil hier die Speicherung als Ladung in einem Kondensator stattfindet
und keine Halbleiterschaltungen wie Flip-Flops notwendig sind. Allerdings benötigt DRAM einen separaten Memory-Controller für die relativ komplizierte
Adressierung der Speicherzeilen und -spalten sowie für die regelmäßige Ausführung eines Refresh-Zyklus, damit die Ladung der Kondensatorzellen nicht unzulässigerweise absinkt. DRAM-Speicher wird bei Mikrocontrolleranwendungen
nicht eingesetzt, was zudem separate Chips erfordern würde, denn in den Mikrocontrollern selbst ist kein integriertes DRAM zu finden.
Sowohl für den Langzeitspeicher (ROM) als auch für den Kurzzeitspeicher
(SRAM) existieren verschiedene Technologien und Varianten, wobei die Festwertspeicher von besonderem Interesse sind, weil hier das Programm für den
Mikrocontroller abzuspeichern ist, was mit unterschiedlichen Methoden erfolgt.
Ausgehend vom ursprünglichen ROM gibt es zahlreiche Ausführungen von NurLese-Speichern, die nach verschiedenen Funktionsprinzipien arbeiten. Die folgende Aufzählung nennt hierzu in Kurzform die wichtigsten Details.
■ ROM: Read Only Memory 
Dies ist ein festprogrammierter Nur-Lese-Speicher, der nicht gelöscht werden
kann. Er wird bei der Herstellung mit einer entsprechenden Maske (MaskenROM) programmiert.
■ PROM: Programmable Read Only Memory 
Hierbei handelt es sich um einen mit einem speziellen Programmiergerät zu
programmierenden Nur-Lese-Speicher, der nach dem einmaligen Beschreiben
nicht wieder gelöscht werden kann.
■ EPROM: Electrically Programmable Read Only Memory 
Bei diesem programmierbaren Nur-Lese-Speicher kann der Inhalt als Ganzes
durch UV-Licht gelöscht werden, wobei dieser Vorgang ca. 20 Minuten dauert. Mit einem speziellen Programmiergerät kann man ein EPROM wieder
erneut beschreiben. EPROMs sind an ihrem Fenster zu erkennen, durch das
man den Chip bei Bedarf mit UV-Licht bestrahlt.
1.5 Arbeitsspeicher
Abb. 1–8
13
Verschiedene PIC-Mikrocontroller mit EPROM-Speicher
■ EEPROM: Electrically Eraseable and Programmable Read Only Memory
Ein programmierbarer Nur-Lese-Speicher, dessen Inhalt zeilenweise elektrisch
zu löschen ist und der mit einem speziellen Programmiergerät wieder beschrieben werden kann. Die elektrisch lösch- und wiederbeschreibbaren Speicher
sind relativ einfach mit einer kleinen Zusatzschaltung programmierbar.
■ E2PROM: Electrically Eraseable and Programmable Read Only Memory
Dies ist zunächst eine nur eine andere Bezeichnung für ein EEPROM. Diesen
Chip-Typ gibt es auch in serieller Ausführung (Daten- und Taktsignal). Er
besitzt eine relativ geringe Speicherkapazität (100 Byte bis mehrere kByte)
und benötigt eine vergleichsweise lange Schreibzeit (typisch 10 ms) pro Wert.
Dieser Speicher kann oftmals mit spezieller (Entwickler-)Software in der
Schaltung selbst – oder wie die anderen Speicher auch – mit einem Programmiergerät beschrieben werden.
■ EAROM: Electrically Alternate Programmable Read Only Memory
Die Funktion dieses Typs entspricht der Funktion eines EEPROM und hat
keine besondere Bedeutung mehr.
■ OTP-ROM: One Time Programmable Read Only Memory
Ein OTP-ROM ist von der Funktion her mit einem EPROM identisch, kann
jedoch nur einmal beschrieben und nicht wieder gelöscht werden.
■ Flash-Memory
Dies ist ein flexibler und verhältnismäßig schneller Speicher, der prinzipiell wie
ein RAM gehandhabt werden kann, wobei die Information nach dem Abschalten der Spannung jedoch nicht verloren geht. Typischerweise sind mindestens
10.000 Programmier- und Löschvorgänge möglich. Mittlerweile gibt es zahlreiche unterschiedliche Flash-Varianten. Die älteren Flash-Speicher können
nur komplett oder immerhin seitenweise elektrisch gelöscht werden.
14
1 Mikrocontrollergrundlagen
■ FRAM: Ferro Electric Random Access Memory
Ein relativ neuer Speichertyp, der prinzipiell wie ein RAM aufgebaut ist,
jedoch seinen Speicherinhalt beim Abschalten der Betriebsspannung nicht
verliert, was mithilfe eines speziellen Speicherkondensators erreicht wird. Der
Speicherkondensator (F-Cap) verwendet ein spezielles dielektrisches Material, und zwar eine Keramik (PZT), die einen ferroelektrischen Effekt ausnutzt, was diesem Speichertyp seine Bezeichnung verleiht. Im Gegensatz zu
EEPROM- oder Flash-Speicher wird für den Speichervorgang weder eine
höhere Spannung noch eine spezielle Datensequenz benötigt. Die erste kommerzielle Verwendung bei Mikrocontrollern hat Texas Instruments mit der
MSP430FR-Serie realisiert, die insbesondere für Ultra- Low-Power-Anwendungen gedacht ist.
Die angeführten Speichertypen gibt es als einzelne Bausteine, die mit den entsprechenden Signalen (Adress-, Daten- und Steuerleitungen) des Mikrocontrollers zu
verbinden sind. Bei den meisten aktuellen Mikrocontrollern ist dies aufgrund der
nicht mehr nach außen geführten parallelen Signale nicht mehr möglich und auch
nicht notwendig, weil der Speicher im Mikrocontroller selbst eingebaut ist und
der von der Kapazität her meist ausreichend ist. Bei Speichermangel lässt sich ein
Mikrocontroller – je nach Hersteller/Familie – oftmals durch einen baugleichen
Typ mit höherer Speicherkapazität austauschen.
Falls dennoch separate Speichererweiterungen notwendig werden sollten,
wird dies üblicherweise durch die einfach anschließbaren Serial EEPROMs oder
Serial Flash-Bausteine praktiziert, die beispielsweise mit dem I2C-Bus (siehe
Abschnitt 4.3) arbeiten. Flexible Speicherlösungen ergeben sich durch austauschbare Flash-Karten, die über ein SD-Karten-Interface in der Schaltung integriert
werden.
1.6
Interrupt-Logik
Die meisten Mikrocontroller – eine Ausnahme sind die »kleinen« Typen wie die
10F2xx-Serie von Microchip – verfügen über ein integriertes Interrupt-System,
das bei entsprechender Programmierung ein ganz wesentliches Element für die
effektive Nutzung der einzelnen internen Einheiten sowie der Peripherie darstellt.
Beim Auftreten eines Interrupts, der von unterschiedlichen Einheiten ausgelöst werden kann, wird der Mikrocontroller in seiner momentanen Arbeit unterbrochen. Dies könnte gerade beim Senden von Daten über die serielle Schnittstelle passieren, wenn ein Interrupt vom A/D-Wandler ausgelöst wird, weil ein
aktueller Messwert zur Verfügung steht. Daraufhin wird das Senden der Daten an
1.6 Interrupt-Logik
15
den UART eingestellt, der Messwert vom A/D-Wandler eingelesen und das Programm an derjenigen Stelle weitergeführt, wo es zuvor unterbrochen wurde.
Damit der Mikrocontroller weiß, mit welcher Arbeit er vor dem Auftreten
des Interrupts beschäftigt war, werden der logische Zustand des Controllers und
die Inhalte der Register zuvor mehr oder weniger automatisch gespeichert. Sie
werden auf einen Stapel-Speicher (Stack) gelegt und später nach Beendigung der
Interrupt Service Routine wieder eingelesen. Wie dies im Einzelnen zu praktizieren ist, hängt von der jeweiligen Controllerfamilie ab. Im Folgenden ist ein Beispiel für eine Interrupt Service Routine angegeben, wie sie für Mikrocontroller
von Microchip (PIC 16F876A) üblich ist.
org 4
; Beginne bei Adresse 04h
; Mit den folgenden Zeilen wird der Programmstatus gerettet
MOVWF
SWAPF
CLRF
MOVWF
MOVFP
MOVWF
CLRFP
wcopy
STATUS,W
STATUS
s_copy
CLATH, W
pclath_copy
CLATH
; Akku-Register w sichern
; STATUS-Register sichern
; PCLath - Register sichern
; Ab hier beginnt die ‘eigentliche’ Interrupt-Routine.
; Testen, welcher Interrupt ausgelöst wurde.
BTFSCINTCON, T0IF
GOTO Timerüberlauf
; Interrupt vom PB0?
BTFSCINTCON, INTF
GOTO INTPB0
BTFSC PIR1,TMR1IF
GOTO IntTMR1
; Wenn I0IF = 0, überspringe den 
; nächsten Befehl
; sonst Interrupt durch Timerüberlauf 
; INTF =0 ? überspringe 
; den nächsten Befehl
; Interrupt durch Timer1
; Wiederherstellen des Programmstatus, der vor der ISR-Ausführung 
; herrschte.
sprungmarke
MOVF pclath_copy,
MOVWF PCLATH
SWAPF s_copy,W
MOVWF STATUS
SWAPF w_copy,F
SWAPF w_copy,W
Retfie
W
; PCLath - Register zurückschreiben
; STATUS - Register zurückschreiben
; Akku - Register zurückschreiben
; verlasse die ISR und kehre ins Programm zurück
16
1 Mikrocontrollergrundlagen
Ohne Interrupt-Verarbeitung müsste der Mikrocontroller in einer (endlosen) Programmschleife arbeiten und die einzelnen Einheiten der Reihe nach abfragen, was
sich als kaum praktikabel erweist, zumal er die meiste Zeit mit Abfragen beschäftigt wäre, die zum größten Teil die gleichen Ergebnisse wie zuvor liefern würden
oder gerade aufgetretene Ereignisse erst viel zu spät erfasst werden würden.
Ob überhaupt eine Interrupt-Verarbeitung stattfinden soll, kann ganz generell in einem bestimmten Register (z. B. Configuration Word) eingeschaltet –
enabled – werden. Diese grundsätzliche Konfigurierung ist wichtig, weil beim
nicht expliziten Freigeben oder Sperren der Interrupt-Verarbeitung unerwartete
und letztlich undefinierte Situationen auftreten können, die sich nur schwer
reproduzieren und damit verstehen lassen, weil die Interrupts asynchron, also
prinzipiell jederzeit, auftreten können.
Die Interrupt Service Routine, auch als Interrupt Handler bezeichnet, ist eine
kurze Befehlssequenz, die die Reaktion des Controllers auf einen aufgetretenen
Interrupt abbildet. In dieser Routine wird üblicherweise zunächst das Statusregister des Interrupt-Controllers (Pending Register) ausgelesen, damit die anfordernde Quelle identifiziert ist, woraufhin ein Vergleich mit der Konfiguration des
Interrupt-Mask- oder Interrupt-Enable-Registers durchgeführt wird, um festzustellen, ob der aktuell aufgetretene Interrupt (für die Weiterverarbeitung) freigegeben wurde. Ist dies der Fall, kann die Interrupt-Service-Routine in den jeweils
dazugehörigen Programmteil, etwa den für eine A/D-Umsetzung, springen, diesen abarbeiten, das Messergebnis speichern und wieder zum Ausgangspunkt
(bevor der Interrupt auftrat) zurückkehren.
Dieser einfache Ablauf funktioniert nur dann einwandfrei, wenn nicht gleichzeitig mehrere Interrupt-Anforderungen ausgelöst werden, sodass dann nach der
jeweiligen Dringlichkeit entschieden werden muss, welche Anforderung zuerst
bedient wird bzw. welche Reihenfolge bei der Abarbeitung einzuhalten ist. Hierfür verfügt die Interrupt-Logik über eine Prioritätsverwaltung (Priority Encoder),
die im Chip festgelegt ist und im Bedarfsfall auch meist individuell programmiert
werden kann.
1.7 Watchdog
Abb. 1–9
1.7
17
Typische Interrupt-Architektur
Watchdog
Der Watchdog eines Mikrocontrollers besteht aus einem Zähler (Timer), der bei
Überlauf automatisch einen Reset des Mikrocontrollers auslöst. Er dient zur
Kontrolle, ob das Programm des Mikrocontrollers wie vorgesehen funktioniert
und nicht etwa in einer Endlosschleife hängt oder abgestürzt ist, was beispielsweise durch Störungen verursacht sein kann.
18
1 Mikrocontrollergrundlagen
Vorausetzung für die Watchdog-Funktion ist, dass der Watchdog Timer
(WDT) im normalen Programmlauf laufend zurückgesetzt wird, damit kein unerwünschter Überlauf und damit kein Reset stattfindet. Je nach Mikrocontrollertyp
und Programmierung wird ein Timeout nach Millisekunden bis hin zu Sekunden
detektiert.
Andere Watchdog-Implementierungen arbeiten mit der Überwachung eines
zyklisch erzeugten Signals, und falls dieses ausbleiben sollte, erfolgt ein Reset, der
das System daraufhin neu startet. Extern arbeitende Watchdogs funktionieren
oftmals auf diese Art und Weise. »Extern« bedeutet, dass der Watchdog als eigenständige Einheit ausgeführt ist und nicht interner Bestandteil des Mikrocontrollers ist, was eine höhere Sicherheit zur Folge hat, als wenn der Mikrocontroller
sich quasi selbst überwachen würde.
Eine Verbesserung eines internen Watchdogs ergibt sich durch die Verwendung eines eigenen Oszillators für den Takt des WDT, sodass hiermit eine gewisse
Entkopplung von der CPU erreicht wird. Dieses Feature ist bei aktuellen Mikrocontrollern mittlerweile als Standard zu betrachten und sollte möglichst wenig
Energie verbrauchen.
Abb. 1–10
Watchdog-Schaltung und Programmbeispiel für die Einstellung des Teilers
Die korrekte Programmierung des WDT ist von der jeweiligen Applikation
abhängig, und nicht selten arbeitet der Watchdog – insbesondere nach einer Programmänderung – nicht wie gewünscht, sodass das Timing des Programms bzw.
das Rücksetzen des WDT entsprechend anzupassen ist. Der Watchdog ist demnach keine Einheit, die lediglich eingeschaltet werden muss und automatisch eine
Sicherheitsfunktion bildet, sondern sie bedarf einer gewissenhaften Programmierung, damit sie nicht fälschlich ausgelöst wird. Unter Umständen ist der Watchdog in kritischen Anwendungen zwischendurch abzuschalten, weil er in einem
Power-Down-Modus üblicherweise nicht arbeitet.
Herunterladen