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.

Logo


* 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.