|
Mikrocontroller
Elektronik-Grundlagen (Bauteile, Komponenten)
Grundschaltungen für Sensor-Interfaces
Ein Mikrocontroller besteht aus einem Mikroprozessor-Kern, der zusammen mit Speicherzellen und anwendungsorientierten Zusatzschaltungen auf einem Chip integriert ist. Zum Verständnis, wie ein solches Teil grundsätzlich funktioniert, "back to the roots":
Mikroprozessor
Begriffsklärung: Ein Mikroprozessor ist eine auf einem Chip
integrierte Halbleiterschaltung, die ein binäres Rechenwerk
(CPU=Central Processor Unit) enthält, sowie Anschlüsse
("Busleitungen") und Steuerschaltungen, um dieses binäre
Rechenwerk mit externen Komponenten zu verbinden. Als externe
Komponenten sind insbesondere digitale Speicherbausteine für
Programme und Daten notwendig sowie Peripherie-Module zur Kommunikation
des Prozessors mit seiner Umgebung ("Input", "Output" abgekürzt
"I/O").
Im Laufe der Zeit haben sich aus Mikroprozessoren drei Anwendungsschwerpunkte
herausgebildet:
- Mikrocomputer: also das was man heute als PC bezeichnet.
Diese Geräte sind optimiert in Richtung hoher Speicher-
und Rechenleistung, haben standardisierte Ein- und Ausgabekanäle
(Tastatur, Maus, Bildschirm). Mittels eines Betriebssystems
kann der Anwender zwischen vielen Programmen wählen oder
auch mehrere gleichzeitig laufen lassen. In der Grundausrüstung
sind Mikrocomputer für Büroarbeiten konfiguriert.
Ihr Einsatz für Steuerungszwecke - speziell zur Kommunikation
mit Sensoren und Aktoren - macht häufig Erweiterungen
notwendig.
- Mikrocontroller: das sind die mehr oder weniger unsichtbaren
Helfer, die zur Steuerung in nahezu allen etwas komplexeren Geräten
wie Kameras, Fotokopierer oder Fahrstühlen eingebaut
sind. Mikrocontroller haben meistens nur einen kleinen Speicher,
sind meistens für eine bestimmte Aufgabe fest programmiert
(bzw. können in einer Elektronikwerkstatt programmiert
werden), und haben schnelle, leistungsfähige Input/Output-Funktionen
direkt kombiniert mit dem Mikroprozessor auf dem Chip integriert.
Im hier behandelten Kontext konzentrieren wir uns auf Mikrocontroller und Mikrocontroller-Module, die geeignet sind, analoge und/oder digitale Sensordaten aufzunehmen, zwischenzuspeichern, teilweise aufzubereiten und mittels serieller Datenkommunikation an einen PC weiterzuleiten. Solche Module sind in der Regel zugleich in der Lage, seriell empfangene Steuerdaten in Schaltimpulse oder analoge Ausgangsspannungen für Aktuatoren umzusetzen.
- digitale Signalprozessoren (DSP): sind gezüchtet auf extrem
schnelle Ausführung arithmetischer Operationen, vor allem Multiplikation
und Division. Werden dort eingesetzt, wo komplexe schnelle Rechenoperationen für
genau eingegrenzte Aufgaben benötigt werden. Speziell Codierung und
Decodierung von Daten in Handies, MP3-Playern, und digitalen Audio- und Video-
Effektgeräten und bei High-End Verarbeitung von Messwerten (z.B. bei Kfz-Testfahrten und Crashtests).
Blockschaltbild eines Mikroprozessors:
|
Allen Varianten ist gemeinsam, daß der Mikroprozessor
(CPU) über eine Busleitung mit allen Speicherbausteinen
und den I/O-Modulen verbunden ist. Das Wort "Bus" stammt
von "omnibus"=für alle. Der "Bus" besteht aus einem
Adreßbus, einem Datenbus und einigen Steuerleitungen.
Der Adreßbus umfaßt bei PCs 24 bis 32 Leitungen,
bei Mikrocontrollern dagegen nur 16 bis 24 Leitungen. Der Datenbus
ist bei PCs 16 bis 64 Leitungen "breit", bei Mikrocontrollern
dagegen nur 4 bis 16 Leitungen. Die wichtigsten Funktionen der
Steuerleitungen sind "Read","Write" und "Interrupt". Diese
Busleitungen werden an allen Speicher- und Funktionseinheiten
des Mikrocomputers bzw. Mikrocontrollers verbeigeführt,
wobei zur Verringerung der Anzahl notwendiger Anschlüsse
ein Teil der Adreßleitungen in sogenannten Chip-Select-Schaltungen
zusammengefaßt und vorselektiert wird. Bei einigen Mikrocontroller-Typen
sind die Busleitungen nicht extern herausgeführt, sondern
alle mit dem Bus verbundenen Funktionen sind auf einem einzigen
Chip integriert.
Der programmgesteuerte Arbeitsablauf eines Mikroprozessors
führt mit hoher Geschwindigkeit (etwa 1 Million Operationen
pro Sekunde bei einem einfachen Mikrocontroller bis zu über
100 Millionen Operationen pro Sekunde bei einem Pentium oder
PowerPC) in permanenter Wiederholung folgenden Arbeitsrhythmus
aus: Auf den Adreßleitungen wird ein binäres Datenmuster
eingestellt, anhand dessen eine einzige Datenzelle des Speichers
oder der I/O Bausteine "adressiert" wird. Jede Datenzelle hat
ihre eigene individuelle Adresse. Mit 16 Adreßleitungen
lassen sich maximal 2 hoch 16 = 65536 Speicherzellen eindeutig
addressieren, mit einer höheren Zahl von Adreßleitungen
entsprechend mehr. Die Steuerleitungen signalisieren,
ob aus dieser adressierten Datenzelle ein "Datenwort" gelesen
werden soll, oder ob hier ein Datenwort hineingeschrieben werden
sollen. Handelt es sich um einen "Read" Befehl, legt die Datenzelle
ihre Daten auf den Datenbus. Der Mikroprozessor übernimmt
sie von hier in seine Rechnereinheit (CPU =Central Processor
Unit) und verarbeitet sie weiter. Handelt es sich um einen "Write"
Befehl, so legt der Mikroprozessor ein Datenwort auf den Datenbus,
das von der adressierten Datenzelle kopiert wird, d.h. hier
gespeichert wird bis zum nächsten an diese Zelle adressierten
"Write" Befehl. Anders als der Adreßbus und die Steuerleitungen
ist der Datenbus "bidirektional" aufgebaut, d.h. kann Daten
von und zum Mikroprozessor transportieren.
Bei genauerer Betrachtung transportiert der Datenbus zwei
verschiedene Typen von Daten: Einmal transportiert er einen
Programmbefehl nach dem anderen aus dem Programmspeicher in
die CPU, wo er dann ausgeführt wird. Zum anderen transportiert
er auch die vom Programm zu bearbeitenden Anwendungs-Daten von
und zum Datenspeicher oder von und zu den I/O-Bausteinen.
In der CPU werden die Anwendungs-Daten als "Operanden" abgelegt
in besonderen, dem Rechenwerk angegliederten Speicherzellen.
Diese bevorzugten Speicherzellen heißen "Akkumulatoren"
oder "Register".
Die in einem Personal Computer zusätzlich vorhandenen
Speichermedien, wie Festplatte und CD-ROM Laufwerk werden von
der CPU als I/O Module behandelt. Vor der Ausführung werden
Programme oder auch einzelne Programm-Module von der Festplatte
in den Halbleiter-Hauptspeicher geladen. Das gleiche gilt für
die zu bearbeitenden Dokumente (Daten). Durch das Konzept des
"virtuellen" Speichers findet ein reger Datenaustausch statt
zwischen Halbleiter-Hauptspeicher und Festplatte, bezogen auf
oben dargestellltes Schema eines Mikro-Computers handelt es
sich hierbei aber um I/O-Prozesse.
Die Programmbefehle unterscheiden sich nach Art der auszuführenden
Operation. Es gibt
- MOVE-Befehle. Sie transportieren Daten von den Speicherchips
in die Akkumulatoren bzw. Register des CPU- Rechenwerks oder
von dort zurück in die Speicherchips
- JUMP und BRANCH -Befehle: Die Adressierung des Programmspeichers
erfolgt in der CPU mittels eines "Programmzählers": Der
Inhalt dieses Zählers ist die Adresse des momentan aus
dem Programmspeicher gelesenen und bearbeiteten Befehls. Nach
der Bearbeitung dieses Befehls wird der Programmzähler
erhöht, sein Inhalt wird auf den Adreßbus geschaltet
und damit wird automatisch der nächste Befehl eingelesen.
Durch dieses fest im Mikroprozessor eingebaute Schema wird
normalerweise ein Befehl nach dem anderen abgearbeitet. Häufig
ist es jedoch notwendig, zu irgendeiner anderen Stelle des
Programms zu springen, zum Beispiel wenn ein Anwender eine
andere Menuoption ausgewählt hat. Mit Hilfe eines JUMP-Befehls
kann der Programmzähler auf einen anderen Wert gestellt
werden, was in der praktischen Konsequenz einem Sprung im
Programmablauf entspricht.
- "Vergleiche- und Springe"-Befehle: Ein Operand bzw.
das Ergebnis einer Operation wird auf bestimmte Eigenschaften
geprüft, zum Beispiel gleich Null, größer
als Null, kleiner als Null, positiv, negativ, "Übertrag
ausgeführt". Wenn diese Bedingung erfüllt ist, wird
ein JUMP-Befehl ausgeführt, wenn diese Bedingung nicht
erfüllt ist, wird mit dem nächsten Programmbefehl
fortgefahren.
- ADD, SUB, MUL und DIV Befehle: Diese verknüpfen
zwei Operanden entsprechend den mathematischen Grundrechenarten.
Das Ergebnis wird meistens zunächst in einem internen
"Register" oder "Akkumulator" der CPU gespeichert und muß
mit einem zusätzlichen MOVE-Befehl in die Speicherchips
zurücktransportiert werden. Diese Befehle können
allerdings nur ganze Zahlen verarbeiten. Rechnen mit Kommazahlen
("Fließkomma") erfordert recht komplizierte Routinen
aus vielen der hier beschriebenen Maschinenbefehle, ist daher
deutlich langsamer.
- AND, OR, XOR Befehle: Dieses sind "Boole'sche", d.h.
logische Operationen, mit denen alle Bits zweier Operanden-Datenwörter
"bitweise" verknüpft werden. Bei den folgenden Beispielen
handelt es sich um einen einfachen Prozessor mit 8 Bit breiten
Datenwörtern. Die 8 Bits werden auf den 8 Leitungen des
Datenbusses übertragen. Eine "1" entspricht einer positiven
"High"-Signalspannung auf der entsprechenden Datenleitung,
eine "0" entspricht einer "Low"-Signalspannung auf der Leitung.
"bitweise" heißt, daß die entsprechenden Bits
isoliert voneinander verknüpft werden, es gibt keine
Überträge wie bei Addition und Subtraktion.
Beim AND Befehl ist das entsprechende Ergebnisbit nur
dann "1", wenn die entsprechenden Bits beider Operanden
auch "1" sind.
Operand 1: 0 1 0 1 1 1 0 0 AND
Operand 2: 1 1 0 1 0 1 0 0
________________
Resultat: 0 1 0 1 0 1 0 0
Beim OR Befehl ist das entsprechende Ergebnisbit immer
dann "1", wenn das entsprechende Bit eines Operanden
"1" ist.
Operand 1: 0 1 0 1 1 1 0 0 OR
Operand 2: 1 1 0 1 0 1 0 0
________________
Resultat: 1 1 0 1 1 1 0 0
Beim XOR Befehl ist das Ergebnisbit genau dann "1", wenn
die entprechenden Bits beider Operanden unterschiedlich
sind.
Operand 1: 0 1 0 1 1 1 0 0 XOR
Operand 2: 1 1 0 1 0 1 0 0
________________
Resultat: 1 0 0 0 1 0 0 0
Diese logischen Operationen sind häufig Vorstufen von
"Vergleiche- und Springe"-Befehlen, so werden komplexere logische
Entscheidungen erarbeitet.
- Shift- und Rotations- Befehle: Solche Operationen
werden benötigt zum Umsortieren von Bits. Beim Shift
wird jedes Bit eines Bytes wird zu einer höheren oder
tieferen Position verschoben. Herausgeschobene Bits sind verloren.
Hereingeschoben werden Nullen.
vor links-Shift: 1 1 0 1 1 1 0 1
nach links-Shift: 1 0 1 1 1 0 1 0
Bei den Rotations-Befehlen werden "herausgeschobene" Bits
am anderen Ende wieder eingereiht. Im Beispiel wandert das
unterste Bit an die Position des obersten Bits.
vor rechts-Rotation: 0 1 0 1 1 1 0 1
nach rechts-Rotation: 1 0 1 0 1 1 1 0
(Die CPU kann nur in "Maschinensprache" formulierte
"Maschinen"-Befehle bearbeiten. Geschrieben werden Programme normalerweise
in "höheren Programmiersprachen" wie Basic, C++ oder
Delphi. Vor der Ausführung werden sie von einem Compiler
in Maschinensprache übersetzt)
Die I/O-Bausteine (häufig auch als Peripheriebausteine
bezeichnet) werden vom Mikroprozessor aus zwar wie Speicherbausteine
gesehen und behandelt, sie führen aber teilweise selbst
recht komplexe Funktionen aus. Dazu benötigen sie häufig
eigene Mikrocontroller-ähnliche Funktionalität.
Als Beispiel sei ein UART-Baustein (=Universal Asynchroneous
Receiver/Transmitter) betrachtet, der in Mikrocomputern wie
auch in Mikrocontrollern die serielle Schnittstelle bildet.
Der UART-Baustein enthält einerseits Konfigurations-Register,
mit denen zum Beispiel die Übertragungsrate (Baudrate)
eingestellt wird. Darüber hinaus besitzt er ein Senderegister
und ein Empfangsregister. Der Mikroprozessor schreibt ein Datenbyte,
das gesendet werden soll, in das UART-Senderegister. Der UART-Baustein
wandelt es daraufhin automatisch um in eine passende Folge serieller
Impulse, die dann von der Schnittstelle zu einem Kommunikationsparter
gesendet werden: etwa zu einem MIDI-Interface, einem Modem oder
zu einem Drucker. Empfängt der UART-Baustein entsprechende
serielle Impulse von einem Kommunikationspartner, werden diese
zuerst im Empfangsregister zwischengespeichert und in ein Byte
zurück gewandelt. Um der CPU zu melden, daß eine
Nachricht für sie vorliegt, betätigt der UART-Baustein
die "Interrupt"-Steuerleitung. Die CPU unterbricht daraufhin
sofort ihr Hauptprogramm, springt in eine spezielle Programmschleife
("Interrupt-Routine"), in der sie sich das empfangene Datenbyte
vom UART holt und in einem "Pufferspeicher" abspeichert. Danach
erfolgt automatisch der Sprung zurück ins Hauptprogramm,
das zu einem beliebigen durch den Programmablauf bestimmten
Zeitpunkt den Pufferspeicher leeren kann. Mit Hilfe von Interrupts
werden zeitkritische Funktionen unter bevorzugter Priorität
in das Gesamt-Programm eingebettet.
Weitere wichtige I/O Bausteine sind Timer, digitale Ports und A/D Wandler.


* Informationsstand
Okt '99. Alle Angaben nach bestem Wissen.
* Der Autor übernimmt keine Haftung für Richtigkeit
der Angaben und deren Eignung für einen bestimmten Zweck.
* Im Text zitierte Warenzeichen und Produktnamen sind Eigentum
ihrer Besitzer.
|
|
|