of 40 /40
222 13 Mikrocontroller 13.1 Allgemeines Bei einem Mikrocontroller (Abk. MC oder μC) sind die CPU, Speicher, Peripheriekompo- nenten und Interruptsystem auf einem Chip integriert. Ein Mikrocontroller kann also mit sehr wenigen externen Bausteinen betrieben werden, man nennt sie daher auch Single-Chip- Computer oder Einchip-Computer. Im Gegensatz zum Mikroprozessor steht beim Mikrocon- troller nicht die hohe Verarbeitungsleistung im Vordergrund, sondern eine hohe funktionelle Integration: Je mehr Funktionen schon auf dem Mikrocontroller-Chip sind, um so weniger Zusatzbausteine braucht man. Dies hat viele Vorteile f¨ ur die Herstellung vollst¨ andiger Syste- me: Der Schaltungsentwurf wird einfacher, das vollst¨ andige System wird kompakter, die Verlustleistung ist geringer, durch die geringere Anzahl von Leitungen, Sockeln und Steckern verringert sich auch das Risiko von mechanischen Verbindungsst¨ orungen, die Fertigung und das Testen der Schaltungen kostet weniger. Das Haupteinsatzgebiet der Mikrocontroller ist die Steuerung in eingebetteten Systemen (Em- bedded Systems). Darunter versteht man Systeme, die von einen Computer gesteuert werden, ohne dass dieser nach aussen in Erscheinung tritt. Durch die Fortschritte in der Integration und die sinkenden Preise konnten Mikrocontroller in immer mehr Applikationen als Steue- rungszentrale eingesetzt werden (Embedded Control, to control = steuern). In vielen F¨ allen haben sie Steuerungen aus digitalen Bausteinen oder speicherprogrammierbare Steuerungen abgel¨ ost. Mikrocontroller bieten hier den Vorteil gr¨ oßerer Flexibilit¨ at, denn die Funktion kann auf der Softwareebene ge¨ andert oder erweitert werden. Besonders augenf¨ allig ist dieser Vor- teil bei feldprogrammierbaren Mikrocontrollern, das sind Controller die neu programmiert werden k¨ onnen, ohne dass man sie aus ihrer Schaltung entnehmen muss. Wir finden Mi- krocontroller z.B. in Digitaluhren, Taschenrechnern, Haushaltsger¨ aten, KFZ, Mobiltelefonen, Kommunikationseinrichtungen aller Art, Medizinger¨ aten und vielen anderen eingebetteten Systemen. Der Markt f¨ ur Mikrocontroller w¨ achst st¨ andig. Standardmikrocontroller sind universell gehalten und kommen in unterschiedlichen Applika- tionen zum Einsatz, sie werden frei verkauft. Kundenspezifische Mikrocontroller dagegen sind

13 Mikrocontroller - telematika.kstu.kg · 13 Mikrocontroller 13.1 Allgemeines Bei einem Mikrocontroller (Abk. MC oder μC) sind die CPU, Speicher, Peripheriekompo-nenten und Interruptsystem

  • Author
    buicong

  • View
    217

  • Download
    0

Embed Size (px)

Text of 13 Mikrocontroller - telematika.kstu.kg · 13 Mikrocontroller 13.1 Allgemeines Bei einem...

  • 222

    13 Mikrocontroller

    13.1 Allgemeines

    Bei einem Mikrocontroller (Abk. MC oder μC) sind die CPU, Speicher, Peripheriekompo-nenten und Interruptsystem auf einem Chip integriert. Ein Mikrocontroller kann also mitsehr wenigen externen Bausteinen betrieben werden, man nennt sie daher auch Single-Chip-Computer oder Einchip-Computer. Im Gegensatz zum Mikroprozessor steht beim Mikrocon-troller nicht die hohe Verarbeitungsleistung im Vordergrund, sondern eine hohe funktionelleIntegration: Je mehr Funktionen schon auf dem Mikrocontroller-Chip sind, um so wenigerZusatzbausteine braucht man. Dies hat viele Vorteile für die Herstellung vollständiger Syste-me:

    • Der Schaltungsentwurf wird einfacher,• das vollständige System wird kompakter,• die Verlustleistung ist geringer,• durch die geringere Anzahl von Leitungen, Sockeln und Steckern verringert sich auch

    das Risiko von mechanischen Verbindungsstörungen,

    • die Fertigung und das Testen der Schaltungen kostet weniger.

    Das Haupteinsatzgebiet der Mikrocontroller ist die Steuerung in eingebetteten Systemen (Em-bedded Systems). Darunter versteht man Systeme, die von einen Computer gesteuert werden,ohne dass dieser nach aussen in Erscheinung tritt. Durch die Fortschritte in der Integrationund die sinkenden Preise konnten Mikrocontroller in immer mehr Applikationen als Steue-rungszentrale eingesetzt werden (Embedded Control, to control = steuern). In vielen Fällenhaben sie Steuerungen aus digitalen Bausteinen oder speicherprogrammierbare Steuerungenabgelöst. Mikrocontroller bieten hier den Vorteil größerer Flexibilität, denn die Funktion kannauf der Softwareebene geändert oder erweitert werden. Besonders augenfällig ist dieser Vor-teil bei feldprogrammierbaren Mikrocontrollern, das sind Controller die neu programmiertwerden können, ohne dass man sie aus ihrer Schaltung entnehmen muss. Wir finden Mi-krocontroller z.B. in Digitaluhren, Taschenrechnern, Haushaltsgeräten, KFZ, Mobiltelefonen,Kommunikationseinrichtungen aller Art, Medizingeräten und vielen anderen eingebettetenSystemen. Der Markt für Mikrocontroller wächst ständig.

    Standardmikrocontroller sind universell gehalten und kommen in unterschiedlichen Applika-tionen zum Einsatz, sie werden frei verkauft. Kundenspezifische Mikrocontroller dagegen sind

  • 13.2 Typische Baugruppen von Mikrocontrollern 223

    im Kundenauftrag für einen ganz spezifischen Einsatz entworfen, werden in hohen Stückzahlengefertigt und als Teil eines fertigen Produktes an den Endkunden verkauft.

    Ein Mikrocontroller enthält einen Kern (Core), der mit den Bestandteilen Rechenwerk, Steu-erwerk, Registersatz und Busschnittstelle ungefähr einer üblichen CPU entspricht. Dazu kom-men mehr oder weniger viele Peripheriekomponenten, die der Controller für seine Steuerungs-und Kommunikationsaufgaben im eingebetteten System braucht, z.B.:

    • Verschiedene Arten von Speicher• Kommunikationsschnittstellen (UART, I2C, SPI, CAN,...)• Ein konfigurierbares Interruptsystem mit externen Interrupts• Eine Oszillatorschaltung• Ein- und Ausgabeports (IO-Ports)• Zähler/Zeitgeber-Bausteine• Analog-Digital-Wandler• Digital-Analog-Wandler• Echtzeituhr (RTC)• Watchdog Timer (WDT)• Ansteuerung von LCD- und LED-Anzeigeelementen

    Mikrocontroller, die den gleichen Kern haben und sich in den Peripheriekomponenten unter-scheiden, nennt man Derivate. Von manchen Mikrocontrollern existieren sehr viele Derivate.Da es außerdem relativ viele Hersteller gibt, stellen die verfügbaren Mikrocontroller eine großeund bunte Palette dar - die Auswahl des richtigen Controllers ist nicht immer leicht.

    13.2 Typische Baugruppen von Mikrocontrollern

    13.2.1 Mikrocontrollerkern (Core)

    Die Kerne der Mikrocontroller entsprechen dem Mikroprozessor eines Rechners. Sie bestim-men daher die Datenverarbeitungsbreite, den Befehlssatz, den Registersatz, die Adressie-rungsarten, die Größe des adressierbaren Speichers, RISC/CISC-Architektur u.a.m. WelcheKerne sind nun in der Mikrocontrollerwelt sinnvoll und verbreitet? Da in vielen Anwendun-gen keine hohe Rechenleistung gebraucht wird, haben die meisten Mikrocontroller noch einen8-Bit-Kern, sogar 4-Bit-Kerne werden noch häufig eingesetzt. Bei der Arbeitsfrequenz gibtman sich häufig mit bescheidenen Taktfrequenzen zufrieden, z.B. 12 MHz oder weniger. DieAnzahl der rechenintensiven Controlleranwendungen wächst aber – ein Beispiel ist die Steue-rung von KFZ-Motoren – und der Trend geht daher zu schnelleren 16- und 32-Bit-Kernen.Wie bei den Prozessoren findet man bei Mikrocontrollern CISC- und RISC-Kerne.

    Die Kerne der Mikrocontroller werden auf ihre spezielle Aufgabe angepasst. So werden z.B.Befehle oder Register ergänzt um die spezielle On-Chip-Peripherie anzusprechen. Um eine

  • 224 13 Mikrocontroller

    gute Speicherausnutzung zu erreichen, haben viele Controller Bitbefehle, mit denen einzelneBits direkt gespeichert und manipuliert werden können.

    Oft wurden die Mikrocontrollerkerne aus vorhandenen Mikroprozessoren abgeleitet. Dies hatverschiedene Vorteile: Es spart für den Hersteller Entwicklungs-und Testzeit, vielen Benutzernist der Befehlssatz schon bekannt und zum Teil können vorhandene Entwicklungswerkzeugebenutzt werden.

    Neuere Entwicklungen haben zu leistungsfähigen Mikrocontrollern geführt, die z.B. hardwa-remäßige Unterstützung für Fuzzy-Logik oder digitale Signalverarbeitung anbieten.

    13.2.2 Busschnittstelle

    Da in vielen Fällen letzlich doch weitere externe Bausteine, meist Speicher, gebraucht werden,haben die meisten Mikrocontroller auch eine Busschnittstelle. Bei manchen Mikrocontrollernwird die Busschnittstelle einfach realisiert, indem die Anschlussstifte bestimmter IO-Ports dieSignale für Datenbus und Adressbus führen. Ergänzend gibt der Mikrocontroller Steuersignalenach aussen, auch ein Daten/Adress-Multiplexing ist möglich. Ist kein Anschluss von externenSpeicherbausteinen nötig, so können diese Anschlüsse als ganz normale IO-Ports benutztwerden.

    Für anspruchsvollere Schaltungen gibt es bei manchen Mikrocontrollern ein programmierba-res Businterface, das flexibel auf den angeschlossenen Speicher eingestellt werden kann undso z.B. Bänke aus mehreren Speicherchips ansprechen kann.

    13.2.3 Programmspeicher

    Ein Mikrocontroller, der ohne externen Programmspeicher in einem Embedded System arbei-ten soll, muss sein übersetztes Anwendungsprogramm in einem On-Chip-Programmspeicherhaben. Dieser Speicher muss auch ohne Versorgungsspannung seine Daten halten, kann al-so kein DRAM oder SRAM sein. Die Größe der Speicher reicht von wenigen Byte bis zumehreren Mbyte. Folgende Programmspeicher werden eingesetzt:

    EPROM und EEPROM Der Mikrocontroller kann beim Kunden programmiert werden,das Programm bleibt änderbar; geeignet für Entwicklung und Test der Programme.

    OTP-ROM Der Mikrocontroller kann einmal beim Kunden programmiert werden; geeignetfür Kleinserien.

    Flash-EEPROM Der Mikrocontroller verwaltet den Flash-Speicher selbst und kann überKommandosequenzen programmiert werden, auch dann wenn er sich schon im fertigenSystem befindet: Feldprogrammierbarer Mikrocontroller oder auch In System Program-ming-Mikrocontroller (ISP-MC).

    Masken-ROM Programmcode wird bei der Herstellung des Mikrocontroller eingearbeitet(Maske), und ist nicht mehr änderbar; geeignet für Großserien.

    Nicht-flüchtiges RAM (nonvolatile RAM, NV-RAM) Der Inhalt der Speicherzellen wirdvor dem Ausschalten in EEPROM-Zellen übertragen.

  • 13.2 Typische Baugruppen von Mikrocontrollern 225

    Es gibt auch Mikrocontroller, die im Festwertspeicher eine Boot- und Kommunikationsrouti-ne haben (Controller-BIOS) und weiteren Programmcode über eine Kommunikationsschnitt-stelle in ein internes oder externes RAM laden. Mikrocontroller, die ausschließlich mit einemexternen Programmspeicher arbeiten sollen, werden als ROM-lose Controller auch ganz ohneinternes ROM gefertigt.

    13.2.4 Datenspeicher

    Um das System einfach zu halten, wird als On-Chip-Datenspeicher meist SRAM verwendet,das ja ohne Refresh auskommt. Für Daten, die ohne Spannungsversorgung erhalten bleibensollen, besitzen manche Controller einen EEPROM oder NVRAM-Bereich. Die Datenbereicheeines MC werden nach Funktion unterschieden:

    Allgemeiner Datenbereich Zwischenspeicherung von Programmdaten,

    Special Function Register Zur Konfiguration und Ansteuerung der Peripheriebereichedes Mikrocontrollers,

    Registerbänke Für Zeiger und evtl. auch arithmetisch/logische Operanden,

    Stack Für kurzzeitige Zwischenspeicherung von Daten, in der Größe begrenzt,

    Bitadressierbarer Bereich Ein Bereich, in dem ohne Verwendung von Masken auf einzelneBits zugegriffen werden kann.

    Die Größe der On-Chip-Datenspeicher ist sehr unterschiedlich, von wenigen Bytes bis zueinigen Kbyte, in der Regel aber deutlich kleiner als der Programmspeicher. Bei der Adres-sierung von Daten muss zwischen internem und externem Speicher unterschieden werden,die internen und externen Adressbereiche können sogar überlappen. Register und RAM sindnicht unbedingt streng getrennt, bei manchen Mikrocontrollern ist das On-Chip-RAM mitden Registern zu einem großen Register-File zusammengefasst.

    13.2.5 Ein-/Ausgabeschnittstellen (Input/Output-Ports)

    Input/Output-Ports, kurz IO-Ports, sind für Mikrocontroller besonders wichtig, sie erlaubenden Austausch digitaler Signale mit dem umgebenden System. Ein Beispiel: Ein Mikrocon-troller, der eine Infrarotfernbedienung steuert, kann über einen digitalen Eingang feststellen,ob gerade eine Taste gedrückt wird. Über einen digitalen Ausgang kann er die Sendediode ein-und ausschalten. Über IO-Ports werden also binäre Signale verarbeitet, die mit TTL-Pegelndargestellt werden. Alle Mikrocontroller verfügen daher über eigene IO-Ports, diese sind mei-stens in Gruppen zu 8 Bit organisiert. Typischerweise gehört zu jedem Port ein Datenregisterund ein Richtungsregister, das die Richtung des Datenaustausches (Ein- oder Ausgabe) fest-legt. Die Portausgänge sind in ihrer Schaltungstechnik einfach gehalten: Die Ausgangsstufensind Open-Collector-, Open-Drain- oder Gegentakt-Endstufen. Ports werden auch benutzt,um externe Busbausteine anzusteuern; in diesem Fall findet man auch Tristate-Ausgänge.Mikrocontroller-Ports sind oft rücklesbar, d.h. im Ausgabebetrieb kann der anliegende Wert

  • 226 13 Mikrocontroller

    vom Controllerkern wieder eingelesen werden. Dies erspart die zusätzliche Abspeicherung desPortzustands in RAM-Zellen.

    Um einen vielseitigen Mikrocontroller zu erhalten, der aber nicht all zu viele Anschlussstiftehat, werden über die Portanschlussstifte oft alternativ andere Funktionen abgewickelt, z.B.Analogeingang, Zählereingang oder serielle Datenübertragung. Über Konfigurationsregisterkann dann per Software die Arbeitsweise dieser Anschlussstifte festgelegt werden.

    13.2.6 Zähler/Zeitgeber (Counter/Timer)

    Zähler/Zeitgeber-Bausteine sind typische und sehr wichtige Peripheriegruppen, die fast je-der Mikrocontroller besitzt. Schon bei einer einfachen Impulszählung wird der Nutzen dieserBaugruppe offensichtlich: Ohne den Zähler/Zeitgeberbaustein müsste ein Mikrocontroller denbetreffenden Eingang in einer Programmschleife ständig abfragen (pollen) und bei jeder zwei-ten Flanke den Wert einer Speichervariablen inkrementieren. Der Zählerbaustein befreit dieCPU von dieser zeitraubenden Aufgabe.

    Das Kernstück des Zähler/Zeitgeberbausteins ist ein Zähler, der durch eingehende Impulseinkrementiert oder dekrementiert wird (Abb. 13.1). Im Zählerbetrieb (Counter) kommen die-se Impulse über einen Anschlussstift von aussen in den Mikrocontroller und werden einfachgezählt. Im Zeitgeberbetrieb (Timer) werden die Impulse durch das Herunterteilen des internen

    Abbildung 13.1: Eine Zähler/Zeitgeber-Einheit. Die Aktivierung des Toreinganges,die Umschaltung zwischen Zähler- und Zeitgeberfunktion und der Teiler werden je-weils durch Konfigurations-Register gesteuert.

    Oszillatortaktes gewonnen. Da der Oszillatortakt bekannt ist, sind damit exakte Zeitmessun-gen möglich. Die Umschaltung erfolgt durch einen Multiplexer. Eine Torsteuerung bewirkt,dass nur Impulse auf den Zähler gelangen, wenn der Eingang durch den Toreingang frei-gegeben ist (Gated Timer). Damit kann z.B. festgestellt werden, über welchen Anteil einerbestimmten Zeitspanne ein Signal HIGH war. Die Umschaltung zwischen Zähler und Zeit-geberfunktion, der Toreingang und der Teilerfaktor werden über ein Konfigurationsregister(z.B. Special Function Register) programmiert. Die Zähler können aufwärts oder abwärtslaufen, ihre Zählregister haben eine Breite von 8 bis 24 Bit. Jeder eintreffende Impuls erhöhtbzw. erniedrigt das Zählerregister um eins. Der Maximalwert für einen Zähler mit N Bit liegtbei 2N − 1, das nächste Inkrement führt zum Zählerüberlauf (Abb. 13.2).

  • 13.2 Typische Baugruppen von Mikrocontrollern 227

    Abbildung 13.2: Ein aufwärtslaufender Zähler mit Überlaufund Reload-Wert 0

    Beim Überlauf kann der Zählerbaustein einen Interrupt auslösen oder einen Pegelwechsel aneinem Anschlussstift bewirken. Nach dem Überlauf muss die Zählung nicht unbedingt beiNull beginnen, der Interrupt-Handler kann auch einen anderen Wert ins Zählerregister laden(Software-Reload). Manche Zähler verfügen über einen Auto-Reload-Betrieb, auch Hardware-Reload genannt. Dabei wird beim Überlauf ein Wert aus dem Autoreload-Register ins Zähl-register übertragen. Der Zähler beginnt danach also nicht beim Startwert Null, sondern beimReload-Wert und entsprechend schneller kommt es zum nächsten Zählerüberlauf. Über denReloadwert lässt sich im Zeitgeberbetrieb bequem die Zykluszeit des Zählerüberlaufs einstel-len. Die Zeit von einem Zählerüberlauf zum nächsten ist bei einem Zählregister mit N Bitund einer Zählerinkrementzeit TI

    T = (2N − Startwert) · TI

    Die Verwertung des Inhalts eines Zählerregisters kann auf zwei Arten erfolgen: Durch Captureund durch Compare.

    Capture-Modus

    Durch ein Capture (Auffangen) wird der momentane Inhalt des Zählerregisters in ein Capture-Register übertragen, ohne den Zähler anzuhalten. Das Capture-Register kann von der CPUgelesen werden. Ein Capture kann durch einen Programmbefehl oder ein externes Ereignis,wie z.B. eine Pegeländerung an einem digitalen Eingang, ausgelöst werden.

    Compare-Modus

    Hier wird der Inhalt des Zählerregisters nach jeder Änderung mit dem Wert in einem Ver-gleichsregister verglichen. Wenn beide Werte gleich sind, tritt ein Compare-Ereignis ein. Die-ses löst, je nach Betriebsart, z.B. einen Pegelwechsel an einem Ausgabestift oder einen Inter-rupt aus. Typische Verwendungen eines Zählers sind:

    • Zählung von Impulsen,• Messen von Zeiten,• Erzeugung von Impulsen,• Erzeugung von pulsweitenmodulierten Signalen.

  • 228 13 Mikrocontroller

    Wegen der großen Praxisrelevanz dieser Anwendungen haben praktisch alle Mikrocontrollereine mehr oder weniger leistungsfähige Zähler/Zeitgeber-Einheit. Im Folgenden sind dahereinige Anwendungsbeispiele geschildert. Wir gehen in diesen Beispielen davon aus, dass ein16-Bit-Zähler/Zeitgeber zur Verfügung steht, der mit 1 MHz betrieben wird und aufwärtszählt. Ein Zählerinkrement dauert also 1 μs und der Zähler hat nach 65536 · 1 μs = 65.536 mseinen Überlauf.

    Impulsabstandsmessung, Frequenzmessung

    Es gibt Sensoren, die eine Impulsfolge aussenden und ihr Messergebnis durch den Abstandder Impulse ausdrücken. Dies stellt eine sehr robuste und störungssichere Übertragung darund befreit von allen Problemen, die mit der Übertragung analoger Messsignale verbundensind. Gerade im industriellen Umfeld ist dies ein großer Vorteil. Der Impulsabstand kann nurmit ausreichender Genauigkeit gemessen werden, wenn die zu messende Impulslänge deutlichgrößer ist als die Dauer des Zählerinkrements. Um den Abstand zweier Impulse zu messen,würde man den Zähler/Zeitgeber als Zeitgeber betreiben, mit der ersten ansteigenden Signal-flanke ein Capture durchführen (oder den Zähler auf Null setzen), mit der zweiten ansteigen-den Flanke wieder ein Capture durchführen und die Differenz der beiden Zählwerte bilden(Abb. 13.3). Die abschließende Multiplikation dieser Differenz mit der Zählerinkrementzeitvon 1 μs ergibt den gesuchten Impulsabstand. Ein evtl. Zählerüberlauf muss softwaremäßigbehandelt werden.

    Abbildung 13.3: Ermittlung des zeitlichen Abstands zweier Impulse durch zweiCapture-Befehle

    Beispiel Das erste Capture ergibt 5800, das zweite 7450, es fand kein Zählerüberlauf statt.Der Impulsabstand ist (7450 − 5800) · 1 μs = 1.65 ms.Als Kehrwert des gemessenen Impulsabstandes ergibt sich sofort die Impulsfrequenz. EineImpulslängenmessung kann ebenso erfolgen, nur muss das zweite Capture nach der fallendenFlanke des Impulses durchgeführt werden.

    Zyklische Interrupts

    Um z.B. ein Anzeigeelement regelmäßig durch den Mikrocontroller zu aktualisieren, kannein zyklischer Interrupt benutzt werden, der regelmäßig durch den Überlauf eines Zeitgebers

  • 13.2 Typische Baugruppen von Mikrocontrollern 229

    ausgelöst wird. Der Interrupthandler würde die gewünschte Aktualisierung der Anzeige vor-nehmen. Bei einem 16-Bit-Zähler und einer Zählerinkrementzeit von 1μs würde also zyklischnach 65.536 ms eine Aktualisierung der Anzeige vorgenommen. Ist diese Zykluszeit zu groß,so betreibt man den Zeitgeber im Reload-Modus mit einem geeigneten Reload-Wert (Abb.13.4). So wird z.B. ein Reload-Wert von 55536 (der -10000 entspricht) dazu führen, dass schonnach 10000 Schritten, also 10 ms, ein Zählerüberlauf stattfindet.

    Abbildung 13.4:Der Überlauf einesZeitgebers kannbenutzt werden umzyklische Interruptsauszulösen.

    Ist dagegen die Zykluszeit auch mit Reload-Wert 0 noch zu groß, kann man den Interrupt-handler so programmieren, dass erst nach mehreren Zählerüberläufen die Aktualisierung er-folgt. Wartet man z.B. vor jeder Aktualisierung 16 mal den Überlauf ab, so erhält man eineZykluszeit von 65.536 ms · 16 = 1.0486 s. Eine andere Möglichkeit ist die Aktivierung einesTeilers, falls vorhanden (Abb. 13.1).

    Impulszählung, Impulsdifferenzen

    Bewegliche Teile in Maschinen, wie z.B. Robotern, werden häufig mit so genannten Encodernausgestattet. Diese geben bei Bewegung eine bestimmte Anzahl von Impulsen pro mm oderWinkelgrad ab. Um diese Impulse zu erfassen, kann man den Baustein auf Zählerbetrieb ein-stellen und den Zählerstand mehrfach durch Capture erfassen (Abb. 13.5). Wenn der letzte

    Abbildung 13.5: Impulszählung miteinem Zählerbaustein. Jeder einlaufen-de Impuls erhöht den Zählwert um eins,mit dem Capture-Befehl kann das Zähl-register jederzeit ausgelesen werden.

    eingelesene Zählerstand gespeichert wird, kann aus der Differenz der Zählerstände der zwi-schenzeitlich zurückgelegte Weg bzw. Winkel berechnet werden. Für eine echte Geschwindig-keits- bzw. Winkelgeschwindigkeitsmessung kann ein zweiter Baustein als Zeitgeber betriebenwerden und zyklisch einen Interrupt erzeugen. Man muss dann nur den ermittelten Weg bzw.Winkel durch die verstrichene Zeit dividieren, um die Geschwindigkeit bzw. Winkelgeschwin-digkeit zu erhalten.

  • 230 13 Mikrocontroller

    Pulsweitenmodulation

    Es ergibt sich manchmal die Aufgabe, durch einen Mikrocontroller einen angeschlossenenBaustein in Teilleistung zu betreiben. So möchte man z.B. einen Motor nicht immer mit vollerLeistung laufen lassen. Eine Lösung mit einem Digital-Analog-Wandler und einem Verstärkerist aufwändig und teuer. Einfacher ist es, ein pulsweitenmoduliertes Signal (PWM-Signal) zubenutzen. Dabei wird die Versorgungsspannung zyklisch für kurze Zeit abgeschaltet. Das gehtso schnell, dass der Motor nicht ruckelt.1 Durch die zeitweilige Abschaltung wird aber wenigerLeistung übertragen. Bleibt z.B. der Motor zyklisch für 3 ms eingeschaltet und danach für1ms ausgeschaltet, so fehlen 25 % der Leistung, der Motor läuft also noch mit 75 % Leistung.Allgemein ergibt sich das Tastverhältnis V zu

    V =THT

    wobei TH die Zeitspanne ist in der das PWM-Signal HIGH ist und T die Zykluszeit desPWM-Signals ist. Das Tastverhältnis liegt zwischen 0 und 1 und gibt den Anteil der aktuellübertragenen Leistung an. Müßte der Mikrocontroller das PWM-Signal softwaremäßig erzeu-gen, so würde sehr viel Rechenzeit verbraucht. Zum Glück bietet aber die Zähler/Zeitgeber-Einheit die Möglichkeit, das PWM-Signal selbstständig zu erzeugen. Dazu wird durch denZählerüberlauf ein zyklischer Interrupt erzeugt, der das PWM-Signal auf LOW schaltet. DerReload-Wert bestimmt wieder die Zykluszeit. Das Schalten des PWM-Signals auf HIGH er-folgt durch ein Compare-Ereignis, wobei der Compare-Wert eine Zahl zwischen dem Relaod-Wert und dem Zählermaximalwert ist (Abb. 13.6).

    Abbildung 13.6: Erzeugung eines PWM-Signals: Der Reload-Wert bestimmt die Zy-kluszeit T , der Compare-Wert das Tastverhältnis V .

    Beispiel Der Reload-Wert sei 65036 (-500), das ergibt eine Zykluszeit von 500 μs, also einSignal von 2 kHz. Der Comparewert sei 65236, dann wird immer 200 μs nach dem Reloaddas Signal von LOW auf HIGH geschaltet und bleibt dann weitere 300 μs auf HIGH bis zum

    1Falls erforderlich, kann das Signal noch durch ein nachgeschaltetes Integrationsglied bzw. Tiefpassfiltergeglättet werden.

  • 13.2 Typische Baugruppen von Mikrocontrollern 231

    nächsten Zählerüberlauf mit Reload. Von insgesamt 500 μs ist das Signal also 300 μs HIGH,d.h. das Tastverhältnis ist

    TV =300 μs500 μs

    = 0.6

    Das PWM-Signal stellt also hier 60% Leistung zur Verfügung.

    13.2.7 Analoge Signale

    In Embedded Sytems ist es oft erforderlich, mit analogen Signalen zu arbeiten. Solche Signalekennen nicht nur die beiden Bereiche HIGH und LOW, sondern können kontinuierlich alleSpannungswerte zwischen 0 Volt und einer maximalen Spannung annehmen. Analoge Sig-nale werden z.B. von Messfühlern geliefert und repräsentieren dann gemessene physikalischeGrößen. Ein Beispiel dafür wäre das Signal eines Temperatursensors. Solche Signale könnenvon Mikrocontrollern mit einem Analogeingang verarbeitet werden. In anderen Fällen er-zeugt der Mikrocontroller mit einem Analogausgang analoge Signale, die dann zur Peripherieübertragen werden, beispielsweise zu einem spannungsgesteuerten externen Oszillator.

    Analoge Signale können nicht über IO-Ports ein- und ausgegeben werden, diese verarbeitenja digitale Spannungspegel. Es gibt zwei Möglichkeiten, analoge Signale einzulesen: Analog-Digital-Umsetzer und analoge Komparatoren. Für die Ausgabe von analogen Signalen gibt esdie Möglichkeit, einen Digital-Analog-Umsetzer zu benutzen oder mit dem schon besprochenenPWM-Verfahren zu arbeiten.

    Analog-Digital-Umsetzer

    Analog-Digital-Umsetzer, abgekürzt ADU, (engl. Analog/Digital-Converter, ADC) sind Bau-steine, die einen analogen Eingang haben und N digitale Ausgangsleitungen. Ein am Einganganliegendes analoges Signal wird in eine ganze Zahl umgerechnet und in binärer Darstellungan den N digitalen Ausgangsleitungen ausgegeben (Abb. 13.7).

    Abbildung 13.7:Ein Analog-Digital-Umsetzer

    Die Analog-Digital-Umsetzung hat dann eine Auflösung von N Bit. Das analoge Eingangs-signal Ue muss im Bereich von Umin . . . Umax liegen, die erzeugte digitale Zahl Z liegt füreinen Umsetzer mit N Bit im Bereich 0 . . . 2N − 1. Ein 8-Bit-Umsetzer erzeugt beispielsweiseZahlen im Bereich 0 . . . 255. Die Umsetzung ist eine lineare Abbildung nach der Formel:

    Z =Ue − Umin

    Umax − Umin (2N − 1)

  • 232 13 Mikrocontroller

    Die Höhe der Quantisierungsstufen ULSB hängt von der Auflösung des Analog-Digital-Wand-lers ab:

    ULSB =Umax − Umin

    2N − 1

    Beispiel An einem ADU mit 10 Bit Auflösung und einem Eingangsbereich von 0..5V liegtein analoges Signal von 3.5V an. Die Umsetzung ergibt einen Digitalwert von Z = 3.5V/5V ·1024 = 717. Die Höhe der Quantisierungsstufen ist 5V/1023 = 0.00489V

    Alle Analog-Digital-Umsetzer sind mit Fehlern behaftet. Prinzipiell unvermeidbar ist derQuantisierungsfehler, der durch die Rundung auf eine ganze Zahl entsteht. Der Quantisie-rungsfehler beträgt auch bei einem idealen ADU bis zu 0.5ULSB. Dazu kommen Fehler durchFertigungstoleranzen, wie z.B. der Linearitätsfehler. Jeder ADU braucht eine gewisse Zeit fürden Wandlungsvorgang. Diese Wandlungszeit begrenzt auch die maximal mögliche AnzahlWandlungen pro Sekunde, die Abtastfrequenz. Die Wandlungszeit hängt stark von der Bauartdes Wandlers ab. Alle ADU brauchen eine externe Referenzspannung und bestimmen dasWandlungsergebnis durch Vergleich mit dieser Referenzspannung.

    Viele Mikrocontroller haben einen ADU On-Chip, in der Regel mit einer Auflösung zwischen8 und 12 Bit. Sie wandeln meist nach dem Verfahren der sukzessiven Approximation. Beieinigen Controllern lassen sich Umin und Umax in Schritten programmieren. Damit kann derEingangsbereich aufgespreizt und an das analoge Signal angepasst werden. Das ebenfallserforderliche Abtast-Halte-Glied ist meist auch On-Chip; es sorgt dafür, dass das Signal fürden Zeitraum der Wandlung zwischengespeichert wird und konstant bleibt.

    Wenn der On-Chip-ADU nicht ausreicht oder keiner vorhanden ist, kann ein externer ADUbetrieben und das Ergebnis über die IO-Ports des Mikrocontrollers eingelesen werden.

    Analoge Komparatoren

    Analoge Komparatoren sind einfacher als Analog-Digital-Umsetzer: Sie haben eine digitaleAusgangsleitung und bestimmen nur, ob die anliegende Signalspannung größer oder kleiner alseine Vergleichsspannung ist. Kommt diese Vergleichsspannung von einem programmierbarenDigital/Analog-Umsetzer, so ist mit entsprechenden Algorithmen auch die Bestimmung desunbekannten analogen Signals möglich.

    Digital-Analog-Umsetzer

    Digital-Analog-Umsetzer, abgekürzt DAU, (engl. Digital/Analog-Converter, DAC) arbeitengenau umgekehrt wie ADUs: Sie erhalten an ihren digitalen Eingangsleitungen eine Ganzzahlin binärer Darstellung und erzeugen am Ausgang die entsprechende analoge Spannung. Dieseergibt sich gemäß:

    Ua =Z

    2N − 1(Umax − Umin) + Umin

    Es sind nur wenige Mikrocontroller mit On-Chip-DAU ausgerüstet, es bleiben aber die Al-ternativen eines externen DAU oder des PWM-Verfahrens.

  • 13.2 Typische Baugruppen von Mikrocontrollern 233

    13.2.8 Interrupt-System

    Ein Mikrocontroller verfügt schon auf seinem Chip über verschiedene vielseitige Peripherie-komponenten. Über die I/O-Ports können weitere, externe Komponenten angeschlossen wer-den. Der Mikrocontrollerkern muss also eine Vielzahl von Subsystemen ansteuern und bedie-nen. Ohne das Interruptkonzept müsste die CPU in vielen Abfrageschleifen die Zustandsflagsder Peripheriekomponenten abfragen, wertvolle Zeit ginge verloren (s. auch Kap. 8.1.2). Vieleffizienter ist es, wenn z.B. der Analog-Digital-Umsetzer durch einen Interrupt signalisiert,dass die Wandlung beendet ist und ein Ergebnis vorliegt. Ebenso kann eine Zähler/Zeitgeber-Einheit mit einem Interrupt ein Compare-Ereignis signalisieren. Durch den Interrupt-Betriebwird die Effizienz enorm gesteigert und wegen der vielfältigen Peripherie spricht hier nochmehr für das Interrupt-Konzept als bei den Mikroprozessoren. Ein zusätzlicher Aspekt istdie oft geforderte Echtzeitfähigkeit, eine garantierte und sichere Reaktion des Mikrocontrol-lers auf ein Ereignis innerhalb einer definierten maximalen Reaktionszeit. Meldet z.B. derEndschalter eines motorgetriebenen Rolltores, dass das Tor nun (fast) seine Endposition er-reicht hat, muss der Mikrocontroller in der Steuerung innerhalb sehr kurzer Zeit den Motorausschalten.

    Wegen der genannten Gründe verfügen fast alle Mikrocontroller über die Möglichkeit derInterrupt-Verarbeitung. Das Interrupt-System erlaubt es, auf ein Peripherieereignis sofortzu reagieren, ohne die entsprechende Komponente ständig abzufragen. Nach der Interrupt-Anforderung wird in der Regel der laufende Befehl noch beendet und danach ein Interrupt-Handler aktiviert, der die Serviceanforderung der Interrupt-Quelle bearbeitet. Die maximaleReaktionszeit lässt sich also überblicken und bei bekannter Taktfrequenz ausrechnen. EinProblem können hier Multiplikations- und Divisionsbefehle darstellen, die oft viele Takte fürdie Ausführung brauchen. Manche Mikrocontroller erlauben hier sogar die Unterbrechungdieser Befehle, um die Interrupt-Reaktionszeit klein zu halten. Neben den Peripheriekom-ponenten kann auch die CPU, d.h. der Controllerkern, in bestimmten Situationen, z.B. beieinem Divisionsfehler, eine Ausnahme auslösen. Ausnahmen werden meist etwas anders be-handelt und haben höchste Priorität. Einen Überblick über typische Interruptquellen und dieauslösenden Ereignisse gibt Tabelle 13.1.

    Tabelle 13.1: Interrupt- und Ausnahmequellen bei Mikrocontrollern

    Quelle EreignisseZähler/Zeitgeber Compare-Ereignis, ZählerüberlaufSerielle Schnittstelle Zeichen empfangen, Empfangspuffer voll,

    Sendepuffer leer, ÜbertragungsfehlerAnalog-Digital-Umsetzer Umsetzung beendetI/O Pin (externes Signal) steigende oder fallende Flanke, HIGH-SignalCPU Divisionsfehler, unbekannter Opcode

    Daten-Ausrichtungsfehler

    Wegen der vielen möglichen Quellen muss der Controller also mit vielen und evtl. auchgleichzeitigen Interruptanforderungen umgehen. Wie bei den Prozessoren muss also die Mas-kierung, Priorisierung und Vektorisierung der Interruptquellen bewerkstelligt werden. Manführt hier aber keinen externen Interrupt-Controller ein, sondern integriert diesen auf dem

  • 234 13 Mikrocontroller

    Chip. Damit entfällt die Übertragung der Interruptquellen-Nr. via Datenbus. Die meisten mo-dernen Mikrocontroller haben ein ausgefeiltes und flexibel konfigurierbares Interrupt-Systemmit beispielsweise den folgenden Eigenschaften:

    • Jede Interruptquelle kann einzeln aktiviert und deaktiviert (maskiert) werden.• Für kritische Phasen können zentral alle Interrupts deaktiviert werden.• Für jede Interruptquelle kann ein eigener Interrupt-Handler geschrieben werden, Größe

    und Position im Speicher kann durch das Programm festgelegt werden.

    • Für jede Interruptquelle kann eine Priorität festgelegt werden, um auch geschachtelteInterrupts zu ermöglichen.

    • Das Interrupt-System kann auch im laufenden Betrieb umkonfiguriert werden.

    Das Abschalten aller Interrupts ist z.B. während der Konfigurierung des Interrupt-Systemsangebracht. Wie erfolgt der Aufruf des Interrupt-Handlers? Es gibt auch hier mehrere Mög-lichkeiten, z.B.:

    Sprungtabelle Für jede vorhandene Interruptquelle wird zu einer bestimmten, festen Adres-se im Code verzweigt. Dort kann dann ein ganz kurzer Interrupt-Handler oder einSprungbefehl zu einem längeren Interrupt-Handler stehen.

    Vektorentabelle In der Interrupt-Vektorentabelle wird für jeden Interrupt die Einsprung-adresse eines Interrupt-Handlers hinterlegt. Bei Auslösung eines Interrupts wird dorthinverzweigt.

    Die Interrupt-Behandlungsruotine muss vor dem Rücksprung in das unterbrochene Programmalle Register und Flags wiederherstellen. Die meisten Mikrocontroller unterstützen den Pro-grammierer und speichern bei der Auslösung des Interrupts nicht nur die Rücksprungadresse,sondern auch die Flags auf dem Stack. Die Registerinhalte müssen dann mit Transportbe-fehlen in den allgemeinen Speicher oder den Stack gesichert werden. Manche Mikrocontrollerbieten die Möglichkeit, zwischen mehreren Register- Speicherbänken umzuschalten. Der Inter-rupthandler kann dann z.B. zu Beginn der Interruptbehandlung auf eine andere Registerbankschalten und am Ende wieder auf die ursprüngliche Bank zurückschalten. Das Sichern vonRegistern ist dann überflüssig. Mit dieser zeitsparenden Technik sind moderne Controllervielen Mikroprozessoren weit voraus!

    13.2.9 Komponenten zur Datenübertragung

    Die Möglichkeit des Datenaustauschs mit anderen Bausteinen oder Systemen ist für Mikro-controller sehr nützlich, Beispiele sind der Datenaustausch mit PCs, mit anderen Mikrocon-trollern, mit intelligenten Displays, Kartenlesegeräten oder Speichern mit Kommunikations-interface. Der Datenaustausch wird fast immer seriell aufgebaut um mit wenigen Leitungenauszukommen. Fast alle Mikrocontroller sind daher mit irgendeiner Art von serieller Schnitt-stelle ausgestattet. Es sind asynchrone und synchrone Schnittstellen verbreitet, manche Mi-krocontroller haben auch mehrere Schnittstellen. Die Schnittstellen tragen Bezeichnungen

  • 13.2 Typische Baugruppen von Mikrocontrollern 235

    wie Serial Communication Interface (SCI) oder Universal Synchronous/Asynchronous Recei-ver/Transmitter (USART) oder Asynchronous/Synchronous Channel(ASC). Im Folgendensind die wichtigsten seriellen Schnittstellen kurz beschrieben.

    Asynchrones serielles Interface

    Jedes Zeichen wird in einem Rahmen übertragen, der aus einem Startbit, 5 bis 8 Datenbit,einem optionalen Paritätsbit und 1 bis 2 Stoppbits besteht. Das Startbit startet den internenBaudratengenerator, der dann die Abtastung der übrigen Bits des Datenrahmens synchroni-siert. Das Stoppbit bzw. die Stoppbits grenzen den Datenrahmen gegen den nächst folgendenDatenrahmen ab. Eine Taktleitung wird also nicht gebraucht. Wenn der Baudratengenera-tor programmierbar ist, kann die Baudrate flexibel eingestellt werden, typisch sind Wertezwischen 1200 Baud und 115200 Baud. Wenn man zusätzlich Bausteine zur Pegelanpassungeinsetzt, kann das asynchrone serielle Interface mit RS232-Schnittstellen kommunizieren, z.B.der eines anderen Computers. Dies erklärt die Beliebtheit dieser Schnittstelle. Viele Entwick-lungsumgebungen benutzen eine solche Verbindung während der Programmentwicklung: Einso genanntes Monitorprogramm auf dem Controller empfängt das auszuführende Programmvom Entwicklungsrechner (meist ein PC), speichert es und bringt es zur Ausführung. Dabeikönnen auch Informationen zurück zum Entwicklungsrechner übertragen werden, um z.B.eine evtl. Fehlersuche (Debugging) zu erleichtern.

    Inter Integrated Circuit Bus, I2C

    Dieser Bus wird meist kurz als I2C-Bus bezeichnet. Er wurde von der Fa. Philips für dieKommunikation zwischen digitalen Bausteinen auf einer Leiterplatte oder zwischen Bau-gruppen in einem System entwickelt. Er kann nur auf wenige Meter Länge ausgedehnt werdenund ist besonders in der Video- und Audiotechnik verbreitet. Der I2C-Bus ist ein synchro-ner Bus, er benötigt drei Leitungen: Bezugspotenzial (Masse), Serial-Data-Line (SDA) undSerial-Clock-Line (SCL). SCL ist die Taktleitung, sie synchronisiert die Abtastzeitpunktefür gültige Datenbits auf der Datenleitung SDA. Anfang und Ende der Übertragung werdendurch festgelegte Signalformen auf SCL und SDA gemeinsam synchronisiert. Man erreichtDatenübertragungsraten von maximal 100 kbit/s. Die I2C-Bus-Schnittstellen können wech-selnd als Sender (Master) oder Empfänger (Slave) arbeiten, ein Arbitrierungsprotokoll sorgtdafür, dass es immer nur einen Master gibt. Jeder Teilnehmer am I2C-Bus hat eine Adresseund jeder Datensatz beginnt immer mit der Adresse des Empfängers. So können leicht vieleI2C-Bausteine verknüpft werden. Mittlerweile existiert einige Auswahl an I2C-Komponenten,z.B. Uhren, verschiedene Speicher, Anzeigebausteine, Tastatur-Scanner, ADC, DAC sowieviele spezielle Video- und Audiobausteine.

    Synchronous Serial Peripheral Interface, SPI-Bus

    Dieser von der Fa. Freescale entwickelte Bus ist für einen ähnlichen Einsatzbereich gedacht,auch er kann nur wenige Meter überbrücken. Hier gibt es allerdings für die beiden Übertra-gungsrichtungen separate Leitungen: MISO (Master In, Slave Out) und MOSI (Master Out,Slave In). Die Bitsynchronisierung erfolgt über SCK (Serial Clock). Alle SPI-Komponenten

  • 236 13 Mikrocontroller

    werden über ein Freigabesignal (Slave Select, SS) aktiviert, so dass ganze Bussysteme auf-gebaut werden können. Es werden Datenraten bis zu 1 Mbit/s erreicht, ähnlich wie beimI2C-Bus sind zahlreiche Bausteine mit der SPI-Schnittstelle im Handel.

    CAN-Bus

    Der CAN-Bus (Controller Area Network) wurde von den Firmen Intel und Bosch ursprünglichfür den Kraftfahrzeugbereich entworfen, wird aber mittlerweile auch in ganz anderen Berei-chen eingesetzt, z.B. zur Steuerung großer Gebäudeheizungssysteme. Meist wird differen-tiell über die Leitungen CAN-L und CAN-H übertragen, zusätzlich ist eine Masseleitungvorgeschrieben. Die Übertragung ist asynchron, es werden Datenübertragungsraten bis zu1 Mbit/s erreicht, wenn die Übertragungsstrecke nicht größer als 40m ist. Auch für denCAN-Bus gibt es einen Arbitrierungsprozess, so dass mit mehreren Busmastern gearbeitetwerden kann. Bezüglich der Verarbeitung und Verwaltung der empfangenen Nachrichten un-terscheidet man zwischen BasicCAN und FullCAN. Bei der CAN-Kommunikation werdennicht einzelne Stationen adressiert, sondern es werden priorisierte Nachrichten verschickt.Die Empfänger entscheiden dann anhand von Masken und Identifizierungsbits, ob sie dieNachrichten empfangen und weiterverarbeiten. Für den Fall, dass mehrere Stationen gleich-zeitig beginnen zu senden, findet ein Arbitrierungsprozess statt. Dabei prüft jeder Sender, obdie von ihm gesendeten Daten korrekt auf dem Bus erscheinen. Falls ja, betrachtet er sich alsBus-Master, falls nein, geht er in den Empfangsmodus und versucht später, erneut zu senden.Der CAN-Bus hat mittlerweile große Verbreitung gefunden und viele Mikrocontroller bieteneine CAN-Bus-Schnittstelle an.

    Weitere Datenübertragungskomponenten

    Aus dem PC-Bereich kommt der USB-Bus (Universal Serial Bus). Der USB ist ein bidirektio-naler Bus mit differentiellen Pegeln, bei dem das Taktsignal aus den Datenbits gewonnen wird.Ein USB-Gerät kann einen USB-Hub enthalten, an den dann weitere USB-Geräte angeschlos-sen werden können. So lassen sich mit dem USB ganze Bäume von USB-Komponenten aufbau-en. Beim USB gibt es mehrere Arten von Kanälen, die verschiedene Datenübertragungsratenanbieten: Low Speed USB mit 1.5 Mbit/s, Medium Speed mit 12 Mbit/s und High SpeedUSB mit 500 Mbit/s. Einige Mikrocontroller können als USB-Endgerät arbeiten, andere auchals USB-Hub.

    Manche Mikrocontroller besitzen eine IrDA-Schnittstelle für die drahtlose Übertragung vonDaten mit Infrarotlicht nach IrDA 1.0 (bis 115,2kbit/s) oder IrDA 1.1 (bis 4 Mbit/s). IrDAarbeitet mit Infrarotlicht von 850 . . . 900 nm.

    13.2.10 Bausteine für die Betriebssicherheit

    Da Mikrocontroller auch in Steuerungen eingesetzt werden, deren Fehlfunktion gravierendeFolgen haben kann – denken wir nur an große Maschinen – sind sie zum Teil mit speziellenBausteinen zur Verbesserung der Betriebssicherheit ausgerüstet.

  • 13.2 Typische Baugruppen von Mikrocontrollern 237

    Watchdog-Timer

    Ein Mikrocontroller könnte durch einen versteckten Programmfehler oder durch umgebungs-bedingte Veränderungen von Speicher- oder Registerinhalten, z.B. Störsignale, in eine Endlos-schleife geraten. Damit fällt er praktisch aus und die Steuerung ist blockiert. Diese gefährlicheSituation soll ein Watchdog-Timer (WDT) vermeiden.

    Ein Watchdog-Timer ist ein freilaufender Zähler, der bei Überlauf einen Reset des Mikro-controllers auslöst. Im normalen Programmablauf muss daher der WDT regelmäßig durchdas Programm zurückgesetzt werden um den WDT-Reset zu vermeiden. Dies kann manz.B. in der Hauptprogrammschleife machen, die ständig durchlaufen wird. Gerät das Pro-gramm des Controllers dann durch eine Störung ungewollt in eine Endlosschleife, so findetdas Zurücksetzen des Watchdog-Timer nicht mehr statt (es sei denn der Rücksetzbefehl desWDT liegt innerhalb dieser Endlosschleife) und dieser löst nach einer gewissen Zeit ein Resetaus (Abb. 13.8). Nun wird das System neu hochgefahren und initialisiert und kann wiederkorrekt arbeiten.

    Abbildung 13.8: Ein Watchdog-Timer muss regelmäßig vom Programm zurückge-setzt werden, sonst löst er ein Reset aus.

    Kritisch ist auch der Ausfall des Oszillatortaktes. Ein Oscillator-Watchdog hat eine eigeneOszillatorschaltung. Er vergleicht ständig den Oszillatortakt mit einer eigenen Oszillatorfre-quenz und reagiert bei gravierenden Abweichungen, indem er auf den eigenen Oszillatortaktumschaltet und außerdem ein Reset auslöst.

    Brown-Out-Protection

    Unter ”Brown-Out“ versteht man einen kurzzeitigen Einbruch der Versorgungsspannung un-ter den erlaubten Minimalwert, der aber nicht ausreicht um ein Power-on-Reset auszulösen.Das ist ein kritischer Zustand, da sich z.B. der Inhalt von Speicherzellen verändert habenkönnte. Es ist daher sicherer, nach einem Brown-Out ein Reset auszulösen, um den Mikro-controller neu zu initialisieren. Genau dies tut eine Brown-Out-Protection. Die Schaltschwelleist entweder fest vorgegeben, z.B. bei 3.8V, oder programmierbar.

    Überprüfung der Versorgungsspannung

    Speziell für batteriebetriebene Geräte ist ein Baustein zur Überprüfung der Versorgungsspan-nung (Low-Voltage-Detect, LVD) gedacht. Dieser soll ein Absinken der Versorgungsspannung

  • 238 13 Mikrocontroller

    schon dann feststellen, wenn die Spannung noch im zulässigen Bereich ist. Das Absinken kanndann durch den noch einwandfrei funktionierenden Mikrocontroller angezeigt werden, so dassnoch Zeit bleibt, z.B. den Akku zu wechseln.

    13.2.11 Stromspar-Betriebsarten

    Gerade bei batteriebetriebenen Geräten ist eine niedrige Stromaufnahme sehr wichtig. Hierkommen meist Mikrocontroller in CMOS-Technologie zum Einsatz. Fast alle Mikrocontrollerbieten aber weitere Möglichkeiten an, um die Stromaufnahme zu reduzieren. Man macht sichdabei zunutze, dass die Stromaufnahme von CMOS-Bausteinen in einem weiten Bereich linearmit dem Oszillatortakt ansteigt. Im statischen Betrieb wird dagegen nur ganz wenig Stromverbraucht.2 Man kann also die Stromaufnahme drastisch reduzieren indem man Teile desControllers einfach ”anhält“. Man findet folgende Maßnahmen:

    • Taktabschaltung für den Kern (CPU),• Taktabschaltung von On-Chip-Peripherie,• Oszillatorabschaltung,• Taktverringerung,• Gezielte Abschaltung von unbenutzten Komponenten.

    Die Bezeichnungen für diese Stromsparbetriebsarten sind vielfältig: Idle-Mode, Sleep-Mode,Standby-Mode, Power-Down-Mode u.a.m. Die Aktivierung erfolgt softwaremäßig über spezi-elle Befehle oder Konfigurationsregister, das Verlassen des Stromsparbetriebes erfolgt durchSoftware-Befehl, falls der Kern noch läuft und sonst durch Interrupt oder Reset. Der Strom-verbrauch kann dadurch zurückgehen bis auf 1/100000 !

    13.3 Softwarentwicklung

    Wenn ein Programm für einen PC entwickelt wird, ist es selbstverständlich, dass auch dieProgrammentwicklung auf einem PC stattfindet. Der PC hat Bildschirm, Tastatur, Maus,Laufwerke usw. und wird zum Editieren, Testen, Debuggen und Speichern des Programmsbenutzt. Entwicklungssystem und Zielsystem sind also identisch, der erzeugte Maschinencodekann direkt auf dem Entwicklungsrechner ausgeführt werden. Besondere Beachtung erfordernnur Befehle, die spezielle Prozessor-Einheiten wie MMX, SSE oder 3DNow! ansprechen.

    Bei einer Mikrocontroller-Entwicklung ist die Situation ganz anders: Der Mikrocontrollerkann nicht als Entwicklungssystem benutzt werden, weil er in der Regel weder Bildschirmnoch Tastatur hat. Außerdem wird ein Mikrocontroller nicht größer als nötig ausgewählt,auf dem fertigen System ist also kein Platz für platzraubende Entwicklungswerkzeuge. Manbraucht also einen separaten Entwicklungsrechner, z.B. einen PC. Das Zielsystem ist aber

    2Der Grund dafür liegt in der Bauweise der Feldeffekt-Transistoren, deren Gate nichtleitend ist, so dassder Strom hauptsächlich durch das Umladen der Kapazitäten entsteht.

  • 13.3 Softwarentwicklung 239

    hinsichtlich Prozessor, Befehlssatz und Peripherie völlig verschieden vom Entwicklungssy-stem. Der Maschinencode wird durch einen Übersetzer auf dem Entwicklungssystem erzeugt,kann aber nicht mehr auf dem Entwicklungssystem ausgeführt werden, man betreibt cross-platform-Entwicklung. Aus diesem Grund braucht man für Mikrocontroller-Entwicklungenspezielle Werkzeuge und die Hersteller bieten eine ganze Palette davon an. Besonders wichtigsind dabei die Möglichkeiten zur Fehlersuche. Kaum ein Programm läuft gleich fehlerfrei,meistens ist eine längere Phase des Testens und Fehlersuchens nötig.

    Die Softwareentwicklung für Mikrocontroller und Embedded Systems erfolgte früher überwie-gend in Assembler. Assemblersprache bietet den Vorteil absoluter Transparenz und maximalerKontrolle über das Programm. Ein gut geschriebener Assemblercode ist meistens auch kürzerund effizienter als der von einem Hochsprachen-Compiler erzeugte. Ein Beispiel dafür ist dieParameterübergabe über Register, die wir in den Code-Beispielen zu unseren Beispielarchi-tekturen diskutiert haben. (Abschnitt 9.1.8) Ein Assembler und Linker wird meistens vomHersteller des Mikrocontrollers mitgeliefert.

    Bei größeren Programmen wird die Programmierung in Assembler mühsam und unübersicht-lich. Fehler sind jetzt schwerer zu finden. Für mathematische Operationen, wie beispielsweisedas Wurzelziehen, braucht man außerdem Bibliotheken, wenn man nicht gerade ein ganzhartgesottener Programmierer ist. Deshalb kommen heute meistens Hochsprachen-Compilerzum Einsatz. Die meist benutzte Programmiersprache ist C, es wird aber auch Basic, Java,Pascal und zunehmend C++ benutzt. Eine häufige Vorgehensweise ist, das Programm in Czu schreiben und anschließend einzelne zeitkritische Abschnitte durch Assembler zu ersetzen.Nach der Übersetzung fügt dann der Linker die Codeabschnitte zusammen. Compiler sindbeim Hersteller des Mikrocontrollers oder bei Drittanbietern erhältlich. Es gibt für vieleController auch kostenlose Compiler, wie zum Beispiel den GNU-Compiler GCC.

    13.3.1 Das Einspielen des Programmes auf das Zielsystem

    Controller mit internem Programmspeicher

    Für Mikrocontroller mit internem Programmspeicher stehen verschiedene Varianten zur Ver-fügung. Ist der Programmspeicher ein maskenprogrammiertes ROM, kann das bei der Her-stellung eingegebene Programm nicht mehr geändert werden. Ist es dagegen ein EPROM(s. Kap. 4), so kann es im Entwicklungslabor mit UV-Licht gelöscht und neu beschriebenwerden. Noch praktischer sind die heute üblichen Mikrocontroller mit internem EEPROM-oder Flash-Programmspeicher: Sie können einfach und schnell elektrisch gelöscht und neubeschrieben werden. Die Hersteller bieten dazu passende Programmiergeräte an. Bei den sogenannten Piggyback-Gehäusen sind die Leitungen, die sonst zum internen ROM führen andie Gehäuseoberseite zu zwei Reihen von Anschlussstiften geführt. In diese kann dann einStandard-EPROM oder EEPROM eingesetzt werden. In allen Fällen kann das Programm sooft wie nötig geändert und in den Programmspeicher übertragen werden. Man kann Testläufein Echtzeit und mit echter Peripherie machen. Der Nachteil liegt darin, dass man keine wei-tere Kontrolle über das einmal gestartete System hat. Einzelschrittbetrieb, Breakpoints, dieAusgabe von Register- oder Speicherinhalt sind nicht möglich, die Fehlersuche ist also sehrmühsam. Weiterhin gibt es einige Mikrocontroller als OTP-Versionen (One Time Program-mable). Sie sind für die ersten Praxistests und für Kleinserien gedacht.

  • 240 13 Mikrocontroller

    Bootstrap

    Den Bootstrap-Mode bieten nur einige Mikrocontroller an. Diese haben in einem internenROM einen so genannten Bootloader gespeichert, ein kleines Programm, das nach dem Ein-schalten zunächst über eine serielle Schnittstelle das auszuführende Programm lädt und iminternen Programmspeicher ablegt. Der Programmspeicher ist hier aus RAM-Bausteinen auf-gebaut, so dass man ganz ohne Programmiergerät auskommt. Für den Betrieb dieser Mikro-controller reicht tatsächlich ein Entwicklungsrechner mit seriellem Kabel und entsprechenderSoftware aus, was sie für manche Zwecke sehr interessant macht.

    Controller mit externem Programmspeicher

    Hier bieten sich für die Entwicklungsphase weitere Möglichkeiten. Natürlich kann man im-mer wieder das Programm nach einer Änderung in einen EPROM oder EEPROM-Bausteinübertragen, diesen in den externen Speichersockel stecken und das Programm testen. Beque-mer ist es aber, einen EPROM-Simulator oder einen RAM-Simulator zu verwenden. Diesebesitzen einen Speicher für das Mikrocontroller-Programm, der vom Mikrocontroller gelesenund vom Entwicklungsrechner beschrieben werden kann. Der externe Programmspeicher wirdaus dem Sockel entnommen und stattdessen wird der Stecker des EPROM-Simulators dortaufgesteckt. Der EPROM-Simulator liefert nun das Programm für den Mikrocontroller (Abb.13.9). Nach einer Änderung kann das Programm schnell und ohne mechanischen Eingriff vomEntwicklungsrechner in den EPROM-Simulator geladen und wieder ausgeführt werden.

    Abbildung 13.9: Ein EPROM-Simulator ersetzt in der Testphase den externen Spei-cher.

    13.3.2 Einschub: Die JTAG-Schnittstelle

    Digitalbausteine werden immer komplexer und haben auch immer mehr Anschlussleitun-gen. Die Gehäuse führen die Anschlussleitungen mit immer kleineren Abständen nach außen,wobei auch die Gehäuseunterseiten mit Leitungen bestückt sind. Einen gefertigten Chip inklassischer Art mit einem Nadelbettadapter zu testen, wird also immer schwieriger. Nochkomplexer wird die Situation auf den modernen Platinen. Mehrere Chips sitzen dichtge-drängt auf mehrlagigen Platinen und von den zahlreichen Verbindungsleitungen verlaufen

  • 13.3 Softwarentwicklung 241

    viele im Inneren zwischen den Platinen. Unter diesen Umständen ist es kaum noch möglich,die gewünschten Leitungen für einen Test zu kontaktieren.

    Seit Mitte der 80er Jahre entwickelte eine Gruppe von Firmen, die Joint Test Action Group,kurz JTAG, an einem neuen Verfahren: Die Idee war, die Ausgangsleitungen schon im Innerender Chips abzufragen und die Information seriell nach außen zu leiten. Umgekehrt solltees auch möglich sein, die Eingangsleitungen mit seriell eingespeisten Signalen (Stimuli) zuversorgen und die Reaktion des Chips zu testen. Dazu werden chiptintern in alle Ein- undAusgangsleitungen so genannte Boundary-Scan-Cells, kurz BSC, eingeschleift. Die Boundary-Scan-Zellen sind durch eine serielle Datenleitung verbunden. Diese Datenleitung geht durchden TDI-Eingang (Test Data In) in die Zelle hinein, durch den TDO-Ausgang (Test DataOut) wieder hinaus und weiter zur nächsten Zelle. So werden alle relevanten Ein-/Ausgänge ineine große Schleife gelegt, den Boundary Scan Path, und können über die serielle Datenleitungerreicht werden.[2] Über den so genannten Test Access Port, kurz TAP spricht ein Testgerät

    Abbildung 13.10: Digitalbaustein mit JTAG-Schnittstelle. Die Ein- und Ausgangs-leitungen sind durch den Boundary Scan Path verbunden (TDI/TDO).

    (häufig ein PC) die JTAG-Schnittstelle des Bausteines an. (Bild 13.10) Die Funktion der fünfTAP-Leitungen ist:

    TDI Test Data in

    TDO Test Data out

  • 242 13 Mikrocontroller

    TCK Test Clock, Arbietstakt der JTAG-Schnittstelle

    TMS Test Mode Select, unterscheidet Befehl einlesen / Befehl ausführen

    TRST Test Reset, optionales Signal, versetzt die Schnittstelle in den Anfangszustand

    Die Boundary-Scan-Zelle enthält zwei interne Flipflops um Systemzustände zu speichern, dasScan-Flipflop und das Test-Flipflop. Die Zelle hat folgende Funktionalitäten:

    NormalbetriebKein Testbetrieb, die Signale des Chips werden von DI nach DO durchgeleitet.

    Auffangen (Capture)Der Zustand des DI-Signals wird im Scan-Flipflop gespeichert. Damit kann bei den Eingängendas extern anliegende Signal und bei Ausgängen das von der Chiplogik kommende Signal zurÜberprüfung gespeichert werden.

    Scan-FunktionDer Zustand der Datenleitung TDI wird in das Scan-Flipflop gespeichert. Da außerdem derAusgang des Scan-Flipflops mit TDO verbunden ist, werden bei dieser Operation alle Da-tenbits in die nächste BSC übertragen. Der ganze Boundary Scan Path arbeitet dabei wieein großes Schieberegister. Wird dies mehrfach wiederholt, können ganze Bitketten in dieBoundary Scan Cells hinein geschrieben oder heraus gelesen werden.

    AuffrischenDer Zustand des Scan-Flipflops wird an das Test-Flipflop weitergegeben. Vorbereitung desTestbetriebs nachdem mit der Scan-Funktion die Bitmuster in die BSCs gelangt sind.

    TestbetriebDer Zustand des Test-Flipflops wird auf den Ausgang DO gegeben. Damit wird ein Stimulusan das System gegeben. Bei Eingängen gelangt der Stimulus an die Chiplogik, bei Ausgängenauf die Leitung.

    Mit diesen fünf Funktionen können nun die Funktionen der gefertigten Chips getestet wer-den. Dazu werden nach Vorgabe der Konstrukteure in langen Sequenzen Signale an die Ein-gange der Schaltung gebracht (Stimuli) und die Reaktion der Schaltung an den Ausgängenwieder abgegriffen. Die Ergebnisse werden dann mit vorgegebenen Tabellen verglichen. Esist auch möglich eine Testsequenz in der Chip-Logik zu verankern, die beim Power-on-Resetselbstständig durchlaufen wird, der so genannte Build-In Selftest (BIST). Möglich ist es auch,mehrere Bausteine mit TAP gemeinsam zu testen. Die TDI/TDO-Leitung wird dann in ei-ner Schleife durch die TAPs aller Bausteine geführt. Dadurch wird es zum Beispiel möglich,auf einer Platine mehrere Chips und die Verbindungsleitungen der Platine zu prüfen. Manerhält also hervorragende Testmöglichkeiten und braucht dazu nicht mehr als die 5 seriellenLeitungen zum TAP. Zusätzlich gibt es eine Reihe von Befehlen, die ein JTAG-Controllerausführen kann.[2] Damit kann dann zum Beispiel ein bestimmter TAP vom aktuellen Testausgenommen werden.

    Die JTAG-Schnittstelle hat sich bei Mikroprozessoren und Mikrocontrollern weitgehend durch-gesetzt. Man hat daher bald die Funktionalität über die ursprüngliche Aufgabe des Chiptestshinaus erweitert. Speziell für Mikrocontroller wurden via JTAG ganz neue Möglichkeiteneröffnet:

  • 13.3 Softwarentwicklung 243

    • Programme in den Flash-Speicher zu übertragen• Die Abarbeitung des Programmes zu verfolgen (Trace Mode)• Breakpoints zu setzen und das Programm im Einzelschritt auszuführen

    Das ist ein großer Vorteil, den viele integrierte Entwicklungsumgebungen für Mikrocontrollerausnutzen. Damit lassen sich komfortable Debugger anbieten, die das Austesten der Program-me auf dem Zielsystem ermöglichen, ein In-System-Debugging. Die Software-Entwicklungwird damit wesentlich erleichtert.

    13.3.3 Programmtest

    Simulation

    Ein sehr preiswertes Hilfsmittel ist der Simulator. Er ist ein reines Software-Werkzeug fürden Entwicklungsrechner. Man kann damit alle Codesequenzen testen, die sich im Kern desMikrocontrollers abspielen. Echtzeitverhalten läßt sich nicht testen, ebensowenig Programm-befehle, die Peripheriekomponenten ansprechen. Der Simulator ist also ein Werkzeug mit engbegrenzten Verwendungsmöglichkeiten.

    Wenn man mit seiner Entwicklung etwas weiter ist, muss man den Mikrocontroller auch inseiner Systemeinbettung testen. Das Vorgehen hängt nun davon ab, ob das Programm iminternen oder externen Programmspeicher liegt. Ein kompaktes Programm kann vollständigim internen Programmspeicher des Mikrocontrollers liegen, ein umfangreiches Programmmuss dagegen in einem externen Programmspeicher untergebracht werden. Für diese beidenFälle stehen unterschiedliche Entwicklungswerkzeuge zur Verfügung.

    Evaluation-Board

    In Evaluation-Boards sind die Mikrocontroller in eine vollständige und funktionierende Schal-tung integriert. Alle Ein- und Ausgänge des Mikrocontrollers sind nach aussen geführt, sodass eine vollständige Verbindung zum Zielsystem hergestellt werden kann. Das Evaluation-Board besitzt eine serielle Schnittstelle für die Verbindung zum Entwicklungsrechner undeinen erweiterten Programmspeicher, auf dem ein Monitor-Programm residiert. Das Monitor-Programm empfängt das auszuführende Mikrocontroller-Programm vom Entwicklungsrech-ner, speichert es und startet auf Kommando dessen Ausführung. Die Ausführung kann vomMonitor-Programm überwacht werden. Durch die Rückübermittlung von Daten zum Ent-wicklungsrechner bieten Monitor-Programme z.T. komfortable Unterstützung, wie z.B.

    • Anzeige und Änderung von Register- und Speicherinhalten,• Einzelschrittbetrieb,• Setzen und Löschen von Breakpoints,• Assemblieren und Disassemblieren einzelner Zeilen,• Direkter Zugriff auf Peripherie.

  • 244 13 Mikrocontroller

    Evaluation-Boards sind recht beliebte und nicht allzu teure Hilfsmittel, die z.T. auf sehrkleinen Platinen aufgebaut sind und komplett in ein Zielsystem eingesteckt werden. Sie sindfür die meisten Tests geeignet, Einschränkungen kommen allerdings zustande, wenn nichtwirklich alle Leitungen des Mikrocontrollers herausgeführt sind.

    In-Circuit-Emulatoren

    In-Circuit-Emulatoren, kurz ICE, sind die teuersten und leistungsfähigsten Entwicklungs-werkzeuge für Microcontroller. Ein In-Circuit-Emulator hilft auch bei schwer zu findendenFehlern, die z.B. nur gelegentlich auftreten. Der ICE emuliert einen Mikrocontroller wirk-lich vollständig, d.h. mit allen Signalen und mit echtem Zeitverhalten. Beim Betrieb wirdder echte Mikrocontroller aus dem Sockel des Zielsystems gezogen und stattdessen der An-schlussstecker des ICE eingesteckt (Abb. 13.11). Man kann also mit dem fertigen Zielsystem,einschließlich aller Peripheriesignale, testen, und das ist ein großer Vorteil.

    Abbildung 13.11: Ein In-Circuit-Emulator ersetzt in der Testphase den komplettenMikrocontroller und bietet weitgehende Debug-Möglichkeiten.

    Der In-Circuit-Emulator ist ein eigener Computer, oft enthält er einen Controller aus derFamilie des emulierten Controllers, der das Programm ausführt. Der In-Circuit-Emulator istso schnell, dass er in Echtzeit das Programm abarbeitet und gleichzeitig komfortable Mög-lichkeiten des Debuggens bietet. So kann man komplexe Haltebedingungen formulieren, diesich nicht nur auf Register- oder Speicherinhalte beziehen, sondern z.B. auch auf IO-Portsoder Zählerstände. Ebenfalls sehr nützlich ist eine Trace-Funktion, die ein Protokoll allerAktivitäten, wie z.B. Speicherzugriffe, Interrupts, Portzugriffe u.a.m. erstellt. Dieses Protokollergibt z.B. auch die Laufzeit von Programmabschnitten.

    13.3.4 Integrierte Entwicklungsumgebungen

    Eine Softwarentwicklung für einen Mikrocontroller erfordert viele Schritte. Zunächst muss einProgrammentwurf gemacht werden, später werden erste Teile des Codes editiert, übersetztund getestet. Am Ende steht die Freigabe (Release) und die Dokumentation. Häufig gibt esverschiedene Varianten, die verwaltetet werden müssen und bei einem längeren Lebenszyklus

  • 13.3 Softwarentwicklung 245

    braucht man eine Versionsverwaltung. Wenn mehrere Entwickler an dem Projekt arbeiten,müssen deren Beiträge zusammengeführt (integriert) werden.

    Integrierte Entwicklungsumgebungen, auch IDE (Integrated Development Environment) ge-nannt, bieten alle diese Funktionen in einem System. Zum Editieren steht zunächst ein kom-fortabler Editor zur Verfügung, in dem mehrere Quelltexte gleichzeitig geöffnet gehalten wer-den können. Für sein Entwicklungsvorhaben definiert man ein so genanntes Projekt. Darinwird festgelegt, welche Hochsprachen- und Assembler-Dateien bei der Code-Erzeugung einge-schlossen werden sollen. In den Projekteinstellungen gibt man genau den Typ des benutztenMikrocontrollers an. Die IDE bietet Bibliotheksfunktionen an, die ebenfalls zum Projekt hin-zugefügt werden. Sehr nützlich sind auch die Header-Dateien, in denen die Adressen dertypspezifischen Peripherie-Register auf entsprechende Namen zugewiesen werden. Der Pro-grammierer kann dann mit diesen Namen arbeiten und muss nicht die Hardwareadresseneintragen. Zum Beispiel würde man das Richtungsregister von IO-Port2 am MSP430 nichtunter 0x002A ansprechen sondern mit dem Symbol P2DIR. Die IDE fügt exakt die passendeHeader-Datei ins Projekt ein.

    Abbildung 13.12: Oberfläche der IAR Embedded Workbench IDE. Die IDE befindetsich gerade im Debug-Modus, zu sehen sind die Register und ein Ausschnitt aus demSpeicher des angeschlossenen Systems.

    Bei der Übersetzung kann man einzelne Dateien oder aber das ganze Projekt übersetzen. Im

  • 246 13 Mikrocontroller

    zweiten Fall werden alle Quelldateien assembliert bzw. compiliert und anschließend gelinkt(zusammengefügt). Wenn ein Mikrocontrollerboard angeschlossen ist, gibt man der IDE dieArt der Verbindung an: Seriell, parallel, JTAG usw. Die IDE lädt dann auf Klick das Pro-gramm in den Controller und führt es aus. Besonders gut ist es, wenn auch ein echtes Debug-ging im Controller unterstützt wird, z. B. via JTAG-Schnittstelle. In diesem Fall kann mansogar auf der Zielhardware Breakpoints setzen und im Einzelschritt-Modus das Programmdurchgehen. Währenddessen kann man die Register und den Speicher betrachten. Das istbei der Fehlersuche eine große Hilfe. Abbildung 13.12 zeigt das Arbeitsfenster der IAR Em-bedded Workbench IDE des Herstellers IAR Systems, mit der die MSP430-Codebeispielefür dieses Buch entwickelt und getestet wurden. Manche Entwicklungsumgebungen, wie zumBeispiel das Codewarrior Development Studio von Freescale Semiconductor, enthalten aucheinen Simulator. Dann kann auch ohne echtes Zielsystem schon ein Teil des Codes getestetwerden.

    Eine IDE übernimmt weitere Aufgaben, zum Beispiel das Abzählen von Arbeitstakten fürbestimmte Codeabschnitte. Sie kann auch hilfreich sein, wenn bei der Mikrocontrollerhardwa-re ein Typwechsel stattfindet. Dann können die Hochsprachenanteile vielleicht übernommenwerden, wenn die Header-Dateien ausgetauscht werden. Manche IDEs unterstützen auch Ar-beitsräume (Workspaces), die dann wiederum mehrere Projekte enthalten können. Damitkann man gut Entwicklungsarbeiten verwalten, bei denen mehrere Versionen einer Softwareerzeugt werden, die aber auch gemeinsame Dateien benutzen.

    13.4 Fallbeispiel: Infineon C167

    Zu Beginn der 90er Jahre hatte ein typischer Mikrocontroller einen 8-Bit-CISC-Kern, derz.B. mit 1 Mhz getaktet wurde. Moderne Mikrocontroller sind wesentlich leistungsfähiger:Wir finden 16- und 32-Bit-Kerne, die deutlich höher getaktet werden. Außerdem ist in vielenmodernen Mikrocontrollern echte RISC-Technologie zu finden, so dass die Rechenleistung umFaktor 10 bis 100 angewachsen ist. Dazu kommen Verbesserungen in der Peripherie.

    Als Beispiel für einen leistungsfähigen universellen 16-Bit-Mikrocontroller soll hier der C167des Herstellers Infineon Technologies betrachtet werden. Er gehört zur C166-Familie, derenerster Typ der 80C166 war. Die Familie umfasst weiterhin die Mikrocontroller C165, C161,C163 und C164, die sich in Art und Größe der internen Speicher, der Peripherieausstat-tung, der Betriebsspannung und der Taktfrequenz unterscheiden. Die Bezeichnungen sind alsSammelbezeichnungen zu verstehen, denn alle Mikrocontroller der Familie sind wiederum inmehreren Modellvarianten lieferbar. Die jüngsten Mitglieder der Familie sind die Mikrocon-troller XC161, XC164 und XC167, sie sind vielen Bereichen stark verbessert (s. S. 260).

    Der C167 ist ein 16-Bit-Mikrocontroller der neueren Generation und in seinem Kern sindschon viele RISC-Technologien zu finden. Dieser schnelle RISC-Kern macht ihn sehr per-formant, so dass er in Echtzeitanwendungen, z.B. Motorsteuerungen und Mobiltelefonen,verwendet werden kann. Das Blockdiagramm in Abb. 13.13 gibt einen Überblick über dieBaugruppen des C167. In dem C166-Kern gibt es einen integrierten Interrupt-Controller undeinen so genannte Peripheral Event Controller. Separate Busse binden Programmspeicher,internes RAM und den sehr flexiblen externen Buscontroller an den Kern an. Die reichhalti-ge Peripherie enthält einen Analog-Digital-Umsetzer mit 10 Bit Auflösung und 16 Kanälen,

  • 13.4 Fallbeispiel: Infineon C167 247

    Abbildung 13.13: Blockdiagramm des C167 CR. Abbildung mit freundlicher Geneh-migung des Herstellers Infineon Technologies AG.

    acht E/A-Ports, acht Zähler/Zeitgeber-Einheiten und eine PWM-Einheit mit vier Kanälen.Zur Kommunikation ist eine asynchrone und eine synchrone Schnittstelle sowie eine CAN-Busschnittstelle vorhanden. Die Oszillator-Einheit enthält eine Phase-Locked-Loop-Schaltung(PLL), die Betriebssicherheit wird durch einen Watchdog-Timer erhöht [18], [33]. Der C167soll nun im Einzelnen vorgestellt werden.

    13.4.1 Kern

    Die ALU kennt neben den üblichen Operationen eine große Palette von Bitbefehlen, die gera-de bei Steuerungsaufgaben häufig eingesetzt werden können. Dadurch kann z.B. ein Steuerbitfür einen Peripheriebaustein in einem Befehl modifiziert werden, ohne dass Masken gebildetwerden müssen. Ein Barrel-Shifter ermöglicht die Ausführung von Schiebe und Rotations-befehlen auch über mehrere Bits in einem Takt. Ergänzt wird die ALU durch eine spezi-elle Multiplikations-/Divisionshardware. Die C167-CPU kennt keine festen Allzweckregister!Stattdessen wird die Technik der Registerfenster benutzt (s. Abschn. 7.4): Der CPU wirdein Ausschnitt aus dem internen RAM als Registerstapel verfügbar gemacht. Dieses Regis-terfenster umfasst 16 Register zu je 16 Bit, die byte- oder wortweise angesprochen werdenkönnen (Abb. 13.14). Man spricht hier auch von einer Speicher-Speicher-Architektur. Das Re-gisterfenster kann über das Register CP (Context Pointer) flexibel im internen RAM plaziert

  • 248 13 Mikrocontroller

    Abbildung 13.14: Die Allzweck-register des C167 werden alsAusschnitt (Registerfenster) desinternen RAMs realisiert.

    werden. Damit kann bei einem Kontextwechsel ein Satz von Variablen aufbewahrt werden.Durch Überlappung der Registerfenster kann eine schnelle Parameterübergabe bei einem Un-terprogrammaufruf erreicht werden. Diese Technik wurde für ursprünglich RISC-Prozessorenentwickelt (s. Abschn. 7.4 ).

    Der C167 kennt eine große Zahl von Special Function Registern (SFR) über die der Controllerkonfiguriert und gesteuert wird. Die SFR werden z.B. benutzt, um die zahlreichen Periphe-rieblöcke auf bestimmte Betriebs-Parameter einzustellen. Dies gilt für die Baudraten derSchnittstellen, die Vorteiler der Zähler/Zeitgeber, die Steuerregister der A/D-Wandler u.a.m.Die SFR sind der Schlüssel zur Bedienung des C167 und ihre Bedienung ist das tägliche Brotdes Entwicklers. Einige SFR gehören nicht zur Peripherie, sondern steuern den Kern des C167(s. Tab. 13.2).

    Tabelle 13.2: Special Function Register des C167-Kerns

    IP Instruction Pointer, Zeiger auf nächsten BefehlCSP Code Segment Pointer, Zeiger auf aktuelles CodesegmentCP Context Pointer, Zeiger auf aktuelles RegisterfensterDPP Data Page Pointer, Zeiger auf aktuelle Datenseite (Page)SP, STKOV, STKUN Stackpointer, Stackoverflowpointer, StackunderflowpointerPSW Program Status Word, FlagregisterSYSCON Systemkonfiguration der CPUMDL, MDH, MDC Daten und Steuerregister für Multiplik.-/DivisionshardwareBUSCON0..BUSCON4, Parameter Buskonfiguration AdressbereicheADDRSEL1..ADDRSEL4 Definition externe Adressbereiche

    Der Kern des C167 ist eine RISC-CPU mit 16 Bit Verarbeitungsbreite und einer vierstufigenBefehlspipeline. Diese besteht aus den Verarbeitungsstufen:

  • 13.4 Fallbeispiel: Infineon C167 249

    1. Befehl holen (Instruction Fetch) Ein Befehl wird aus dem Programmspeicher (internesRAM / internes ROM oder externer Speicher) eingelesen, Adressierung über die Regis-ter IP und CSP (s. Tab. 13.2).

    2. Dekodieren (Decode) Identifizieren des Befehls, und gegebenenfalls weitere Aktivitätenwie z.B. Operanden lesen, Stackpointer ändern, Sprungadressen laden.

    3. Ausführen (Execute) Ausführung des Befehles.

    4. Zurückschreiben (Write Back) Ergebnisse in Zielregistern abgelegen bzw. Befehl ab-schließen.

    Die Funktion einer Pipeline ist in Kap. 11.1 erklärt, hier soll nur auf einige Besonderheitender Pipeline in der C166-Familie hingewiesen werden. So werden die so genannten injizier-ten Befehle intern generiert und direkt in die Dekodierungsstufe eingeschrieben. Es wirdbeispielsweise ein Transportbefehl injiziert, wenn durch einen Interrupt der PEC-Service aus-gelöst wird. Ein NOP (Leerbefehl) wird injiziert, wenn wegen eines Sprungbefehles ein schoneingelesener Befehl unwirksam gemacht werden muss. Bei Wiederholungsschleifen kann dasallerdings meistens vermieden werden: Ein Sprungziel-Cache speichert nämlich den Befehl,der am zuletzt benutzten Sprungziel steht. Wird erneut zu diesem Sprungziel verzweigt, sowird der dort stehende Befehl aus dem Cache geholt und injiziert, der Fetch-Zyklus entfällt.

    Die Pipeline des C167 kann allerdings in die gleichen Schwierigkeiten geraten wie jede anderePipeline, z.B. durch Datenabhängigkeiten (s. S. 185). Ein Problem durch eine Datenabhängig-keit entsteht z.B., wenn durch einen Befehl ein Zeigerregister verändert wird, dessen Inhaltim unmittelbar folgenden Befehl verwendet wird. Das Zurückschreiben des neuen Wertesin das Register erfolgt ja erst in der letzten Stufe der Pipeline, gleichzeitig ist aber derFolgebefehl schon in der Ausführungsstufe. Bei seiner Ausführung würde dann ein veralteterWert benutzt, das Ergebnis wäre fehlerhaft. Dies betrifft den Stackpointer (SP), den ContextPointer (CP) und die Data Page Pointer (DPP) [21]. Wird eines dieser Register beschrieben,so muss der nachfolgende Befehl unabhängig von diesem Register sein; ist er das nicht, somuss auf Assemblerebene ein anderer Befehl eingefügt werden. Die Compiler für die C166-Familie erledigen das selbstständig, bei Assemblerprogrammierung ist hier allerdings Vorsichtgeboten. Weitere Architekturmerkmale, die die Ausführungsgeschwindigkeit verbessern, sindein flexibler Vergleichs-Sprungbefehl, eine optimierte Erkennung von Schleifenenden und einschnell dekodierbares Maschinencode-Format.

    Der CPU-Takt wird aus einem Oszillatortakt flexibel erzeugt beträgt bis zu 33 MHz. Bei33 MHz CPU-Takt dauert ein CPU-Zyklus 30 ns. Ein Maschinenzyklus entspricht zwei CPU-Takten. Der C167 kann die meisten Befehle in einem Maschinenzyklus, also 60 ns, ausführen.Zum Vergleich: Ein SAB80515-Microcontroller (8051-Familie) braucht bei 12 Mhz für eineBefehlsausführung im Regelfall 1000 ns! Die sehr viel kürzere Ausführungszeit des C167entsteht nicht nur durch seine höhere Taktfrequenz, sondern vor allem durch seine RISC-Architektur. Einige Befehle brauchen trotzdem etwas mehr Zeit, eine 32-Bit/16-Bit-Divisionbraucht zehn Maschinenzyklen, eine 16-Bit x 16-Bit-Multiplikation fünf. Beim XC-167 ist dieAusführungsgeschwindigkeit weiter verbessert (s. S. 260). Der Befehlssatz des C167 kann infolgende Gruppen eingeteilt werden:

    Arithmetische Befehle Addition, Subtraktion, Multiplikation, Division, Negieren in 8/16-Bit-Breite

  • 250 13 Mikrocontroller

    Bitweise logische Befehle UND-, ODER-, Exclusiv-ODER-Verknüpfung, 1er-Komplement

    Vergleiche und Schleifensteuerung Vergleich, Vergleich mit Inkrement, Vergleich mitDekrement

    Boolesche Bitverarbeitungsbefehle Setzen, Löschen, Verschieben, Vergleichen und Ver-knüpfen von einzelnen Bits, bitweiser Speicherzugriff

    Schiebe- und Rotationsbefehle Schieben, Rotieren, arithmetische Schieben

    Transportbefehle Transport, Transport mit Vorzeichen oder Nullbyteerweiterung

    Stackbefehle Push, Pop, Kontext-Umschaltung

    Sprungbefehle Bedingter Sprung, unbedingter Sprung

    Aufrufbefehle, Rücksprungbefehle Unterprogrammaufruf, Trap, Return, Return fromInterrupt

    Systemsteuerung Software-Reset, Idle-Modus, Power-Down, WDT-Wartung, WDT-Ab-schaltung, Initialisierung beenden

    Verschiedenes Unteilbare Befehlssequenzen definieren, Operandennormalisierung, Adres-sierungsarten umschalten, No Operation

    13.4.2 Speicherorganisation und Busschnittstelle

    Beim C167 werden alle Speicherbereiche in einem durchgehenden Adressraum abgebildet.Ob man also internes RAM, externes RAM, Allzweck-Register, SFR, Programm- oder Da-tenspeicher anspricht, hängt allein von der Adresse ab.3 Das interne RAM beherbergt nebendem erwähnten Bereich für die Registerfenster der CPU den System-Stack und Benutzerda-ten. Beim Stackzugriff wird im Hintergrund automatisch geprüft, ob ein Stacküberlauf oder-unterlauf vorliegt. Einige Teile des internen RAM sind bitadressierbar, z.B. die Registerfens-ter.

    Vorhandensein, Größe und Art eines internen ROM hängen ganz von dem gewählten Con-trollerderivat ab. Eine typische Größe sind 32 KByte internes ROM als Programmspeicher.Da ja auch ein internes RAM von z.B. 4 KByte zur Verfügung steht, kann der C167 ohneexterne Speicherbausteine betrieben werden.

    Wird mehr Speicher gebraucht oder hat der ausgewählte Mikrocontroller kein internes ROMmuss externer Speicher angeschlossen werden. Dazu stellt der C167 eine sehr flexible Bus-schnittstelle zur Verfügung. Man kann über die ADDRSEL/BUSCON-SFR bis zu fünf ver-schiedene Speicherbereiche konfigurieren. Für jeden Speicherbereich lässt sich z.B. die Breitedes Datenbusses auf 8 oder 16 Bit einstellen. Es lässt sich außerdem einstellen, ob die Adress-und Datensignale auf getrennten Leitungen (Demultiplex-Betrieb) oder auf den selben Leitun-gen geführt werden sollen (Multiplex-Betrieb). Im Multiplex-Betrieb werden Address-Latchesgebraucht und der C167 erzeugt dann auch das notwendige Address-Latch-Enable-Signal

    3Das ist z.B. bei der 8051-Familie ganz anders.

  • 13.4 Fallbeispiel: Infineon C167 251

    (ALE). Weitere Parameter wie Waitstates und Signalverzögerungen sind ebenfalls bereichs-weise einstellbar. Für den Betrieb an der externen Busschnittstelle eignen sich daher sehrviele marktübliche Bausteine. Durch die bereichsweise Konfiguration können sogar verschie-denartige Speicherbausteine gleichzeitig betrieben werden.

    Abbildung 13.15: In einer 16-Bit-Datenadresse geben die beiden höchstwertigen Bitdie Nummer des DPP an, dieser verweist auf die aktuelle Datenseite (Page). Dieniederwertigen 14 Bit sind die Adresse innerhalb der Page.

    Der Adressbus kann in verschiedener Breite aktiviert werden: 16, 18, 20 oder 24 Bit. Ent-sprechend ist der gesamte Adressraum 64 KByte, 256 KByte, 1 Mbyte oder 16 Mbyte. ZurVerwaltung dieses relativ großen Adressraumes teilt der C167 die Datenbereiche in Daten-seiten, die Pages zu je 16 KByte ein (Abb. 13.15). Die Pages werden über vier Register, dieData Page Pointer DPP0..DPP3 verwaltet. Darin liegt ein 10-Bit-Verweis auf eine der biszu 1024 Pages. Eine 16-Bit-Adresse wird nun so interpretiert: Bit 0..Bit 13 gibt den Offset(relative Adresse) innerhalb der Page und Bit 15, Bit 14 wählen eines der vier DPP-Registeraus, das wiederum auf die aktuelle Page verweist.

    Die Codebereiche werden in Segmenten von 64 KByte verwaltet. Jede 24-Bit Adresse wirdintern in zwei Anteilen interpretiert: Ein 16 Bit-Offset im IP-Register gibt die Adresse inner-halb des Segments an und ein 8-Bit-Wert im CSP-Register (Code Segment Pointer) wählteines von 256 Codesegmenten aus (Abb. 13.16). Glücklicherweise übernimmt der Chip selbstdie Arbeit, die mit der Codesegmentierung verbunden ist. Ein Sprungbefehl beispielsweisewird ausgeführt, indem die Register IP und CSP verändert werden.

    13.4.3 Kommunikationsschnittstellen

    Der C167 verfügt über eine asynchrone/synchrone serielle Schnittstelle, den Asynchronous/Synchronous Serial Channel, abgekürzt ASC0. Der ASC0 lässt sich sehr flexibel konfigurieren.Er hat einen internen Baudratengenerator und erlaubt eine asynchrone Kommunikation mitbis zu 1.03 MBit/s voll-duplex und bis zu 4.1 MBit/s halbduplex, abhängig vom CPU-Takt.

  • 252 13 Mikrocontroller

    Abbildung 13.16: Eine 16-Bit-Code-Adresse gibt nur den Offset innerhalb des Seg-ments an. Erst mit der im CSP eingetragenen Segmentnummer ergibt sich die 24-Bit-Adresse im Speicher.

    Die 8- oder 9-Bit-Datenpakete sind eingerahmt von einem Startbit und ein oder zwei Stopp-bits, und beginnen mit LSB; zur Absicherung kann ein Paritätsbit erzeugt bzw. ausgewertetwerden. Mit geeigneten Pegelwandlern kann also eine Übertragung nach dem Standard RS-232C erfolgen. Die Schnittstelle entdeckt verschiedene Fehler selbstständig: Paritätsfehler,Rahmenfehler, überschriebener Empfangspuffer (Overrun). Um Pollingschleifen zu vermei-den, unterstützt die ASC0-Schnittstelle vier verschiedene Interrupts für Empfang, Sendenund Fehlerbehandlung. Für Testzwecke kann ein Prüfschleifenbit (Loop-Back-Testbit) akti-viert werden: Über ein internes Gatter werden dann die gesendeten Datenpakete direkt wiederauf die Empfangsschnittstelle geleitet. Im synchronen Betrieb erzeugt ASC0 ein Taktsignal.

    Weiterhin verfügt der C167 über eine synchrone serielle Schnittstelle, Synchronous SerialChannel, SSC, über die mit bis zu 8.25 MBit/s voll-duplex kommuniziert werden kann. DerTakt wird im Masterbetrieb über die Leitung SCLK gesendet, während die Daten taktsyn-chron übertragen werden. Im Slave-Betrieb wird der Takt von einer anderen Schnittstelleerzeugt und über SCLK empfangen. Die Datenpakete umfassen hier 2..16 Bit und begin-nen wahlweise mit LSB oder MSB. Auch SSC ist in der Lage Fehler zu erkennen, u.a. auchPhasen- und Baudratenfehler.

    Der C167 besitzt ein CAN-Modul für die vollautomatische Übertragung gemäß CAN-Spezi-fikation V2.0 Teil B. Damit wird volle CAN-Funktionalität (FullCAN) für bis zu 15 Nach-richtenobjekte garantiert, Nachrichtenobjekt 15 kann nach BasicCAN behandelt werden (s.auch Abschn. 13.2.9). Bei anderen Mikrocontrollern aus der C166-Familie findet man weitereTypen von Kommunikationsmodulen: I2C-Module, SSP- oder HDLC-Kanäle.

    13.4.4 Zeitgeber/Zähler-, Capture/Compare- und PWM-Einheiten

    Der C167 ist in dieser Hinsicht reichhaltig ausgestattet, er hat On-Chip fünf Allzweck-Zähler-/Zeitgeberbausteine, vier Capture/Compare-Einheiten und vier PWM-Kanäle. Diese sind inGruppen zusammengefasst und alle etwas unterschiedlich beschaltet, wodurch sich eine Füllevon Verwendungsmöglichkeiten ergibt.

  • 13.4 Fallbeispiel: Infineon C167 253

    General Purpose Timer 1 (GPT1)

    Der GPT1 (Allzweck-Zähler 1) umfasst die Timer 2, Timer 3 und Timer 4. Jeder dieser Timerkann über die zum Timer gehörenden SFR auf eine von vier Betriebsarten eingestellt werden:

    Zähler (Counter) Jeder Timer hat einen zugehörigen Impulseingang, die Impulse an diesemEingang werden gezählt. Die Zählrichtung kann per SFR eingestellt werden (Up/Down-Bit in Timer-Steuerregister) oder über den Eingang TxEUD (Timer external Up/Down)durch die Peripherie gesteuert werden.

    Zeitgeber (Timer) Der Eingang des Timers wird durch den vorgeteilten CPU-Takt ange-steuert, das Teilerverhältnis ist in Grenzen frei programmierbar: 2n : 1.

    Torgesteuerter Zeitgeber (Gated Timer) Der Baustein läuft als Zeitgeber, wobei der Im-pulseingang des Timers als Toreingang (Gate) benutzt wird: Es werden nur Impulsegezählt, während der Zähler über den Toreingang freigeschaltet ist.

    Inkrementeller Schnittstellenmodus Hier kann ein inkrementeller Positionsgeber mitseinen A- und B-Signalen direkt an den Timer angeschlossen werden. Der Timer ermit-telt daraus Richtungs- und Zählsignal und hält damit immer einen aktuellen Lagewertin seinem Zählregister.

    Alle drei Timer können so eingestellt werden, dass sie bei Überlauf bzw. Unterlauf einenInterrupt auslösen. Außerdem gibt es mehrere Querverbindungen zwischen den Zählern: Ti-mer 3 hat ein Ausgangs-Umschalt-Flipflop (Output-Toggle-Latch), das bei jedem Überlaufinvertiert wird. Es kann entweder an einen Anschlussstift geleitet werden oder aber an denEingang von Timer 2 oder Timer 4 geschaltet werden. Im letzten Fall sind zwei 16-Bit-Zählerkaskadiert zu einem 32-Bit-Zähler, mit dem man auch große Zeiten genau messen kann. Ti-mer 2 und Timer 4 können angehalten werden und als Capture oder Reload-Register fürTimer 3 benutzt werden.

    General Purpose Timer 2 (GPT2)

    Die Gruppe GPT2 umfasst die Timer 5 und Timer 6 sowie ein Capture/Reload-Register.Die Timer 5 und Timer 6 können ähnlich wie die oben beschriebenen Timer 2 bis Timer 4betrieben werden, auch sie können kaskadiert werden. Besondere Möglichkeiten bietet dasCapture/Reload-Register, das mit beiden Timern verschaltet ist: Es kann für Timer 5 alsCapture-Register und für Timer 6 als Reload-Register arbeiten, auf ein Ereignis hin kann auchbeides geschehen. Der Capture-Wert von Timer 5 ist dann der Reload-Wert, also Startwert,für Timer 5. Außerdem kann das Capture mit einem Zurücksetzen des Zählregisters verbundenwerden. Durch diese Beschaltung ergeben sich pfiffige Möglichkeiten, für die ich hier zweiBeispiele geben will:

    Beispiel: Messung der Differenz von ZeitabständenNehmen wir Folgendes an: Ein Peripherieereignis startet im Zeitpunkt T1 den Timer 5,ein zweites Peripherieereignis löst im Zeitpunkt T2 ein Capture und Zurücksetzen von Ti-mer 5 aus. Aus dem Capture-Register wird der Wert gleich weitergegeben an Timer 6,der mit gleichem Takt abwärts zählt. Bei einem dritten Peripherieereignis im Zeitpunkt T3

  • 254 13 Mikrocontroller

    wird Timer 6 über ein SFR ausgelesen und enthält die Differenz der beiden Zeitabstände:(T2 − T1) − (T3 − T2).Beispiel: Digitale FrequenzvervielfachungNehmen wir wieder an, Timer 5 wird als aufwärts laufender Zähler betrieben und Timer 6 alsabwärts laufender Zeitgeber. Diesmal soll aber der Takt von Timer 6 höher eingestellt sein(kleinerer Teilerfaktor) als der von Teiler 5. Nehmen wir an, er ist viermal so groß. Am Eingangvon Timer 5 liegt ein symmetrisches Rechtecksignal an. Jeder Pegelwechsel löst an Timer 5ein Capture aus, der Capture-Wert wird von Timer 6 als Reload-Wert benutzt. Durch denhöheren Takt ist aber in Timer 6 in einem Viertel der Zeit schon der Unterlauf und damit einPegelwechsel am Ausgang erreicht. Der Wert wird immer wieder geladen und heruntergezählt,es ergibt sich am Ausgang viermal so oft ein Pegelwechsel, wie am Eingang. Der Eingangstaktan Timer 5 ist also vervierfacht. Die Taktvervielfachung folgt der Eingangstaktfrequenz miteiner gewissen Verzögerung, hält aber stets den Faktor ein, der durch die unterschiedlichenZählertaktfrequenzen gegeben ist [21].

    Capture/Compare-Einheit

    Es gibt zwei gleichartige Capture/Compare-Einheiten, die eine umfasst Timer 0 und Ti-mer 1, die andere Timer 7 und Timer 8. Die Capture/Compare-Einheiten sind gedacht für dieschnelle Verarbeitung von I/O-Signalen wie Impulserzeugung, Wellenformen und Pulsweiten-modulierte Signale (PWM). Der C167 hat eine besonders leistungsfähige Capture/Compare-Einheit: Hier sind gleich zwei Timer am Werk und jeder davon kann in einer Zählperiodemehrere Capture- oder Compare-Ereignisse verarbeiten. Dazu sind in jeder Einheit die beidenTimer mit einem gemeinsamen Stapel von 16 Capture/Compare-Registern verbunden. Zu je-dem Register gehört ein Anschlussstift (CCxIO), der im Capture-Betrieb der Eingang für dasereignisauslösende Signal ist. Im Compare-Betrieb dagegen ist er ein Ausgang und wird nachdem Compare-Ereignis geschaltet oder invertiert. Jedes Capture/Compare-Register kann ei-nem der beiden Timer zugewiesen werden. Mit den beiden Capture/Compare-Einheiten desC167 lassen sich also gleichzeitig immerhin bis zu 32 externe Signale verfolgen bzw. erzeugen.Für die Timereingänge sind verschiedene Impulsquellen wählbar: Ein vorgeteilter CPU-Takt,ein externes Signal (nur Timer 0 und Timer 7) oder der Ausgang von Timer 6. Damit lassensich also Zeitintervalle oder eine bestimmte Zahl von Peripherieereignissen abmessen.

    Im Capture-Betrieb muss zunächst festgelegt werden, welches Ereignis das Compare auslösensoll: Eine negative, positive oder beliebige Signalflanke an einem festgelegten Eingang. BeiEintreten des festgelegten Capture-Ereignisses wird der aktuelle Zählwert des spezifiziertenTimers in dem zu diesem Eingang gehörenden Capture/Compare-Register abgelegt. Außer-dem kann durch dieses Ereignis ein Interrupt ausgelöst werden.

    Im Compare-Betrieb wird zunächst eine von fünf Compare-Betriebsarten gewählt. So ist esz.B. möglich pro Timer-Periode einen oder mehrere Interrupts erzeugen zu lassen. Dannmüssen Compare-Werte in die zugehörigen Capture/Compare-Register eingeschrieben wer-den. Danach werden alle aktivierten Compare-Werte ständig mit dem aktuellen Inhalt deszugewiesenen Timers verglichen. Wenn eine Gleichheit eintritt, wird der zugehörige Ausgangbedient und ein Interrupt erzeugt.

  • 13.4 Fallbeispiel: Infineon C167 255

    PWM-Einheit

    Für die Pulsweitenmodulation stellt der C167 eine eigene Einheit zur Verfügung, obwohl auchdie Capture/Compare-Einheit PWM-Signale erzeugen kann. Die PWM-Einheit kann bis zuvier PWM-Signale gleichzeitig und unabhängig erzeugen. Jeder PWM-Kanal wird über einCompare- und ein Reload-Register gesteuert. Am Ausgangstreiber kann die Polarität gewähltwerden, auch verschiedene Flankenausrichtungen sind einstellbar. Eine Besonderheit ist, dassauch zwei Kanäle überlagert werden können.

    13.4.5 Input/Output-Ports und Analog-Digital-Wandler

    Für den Austausch digitaler Information mit der Peripherie besitzt der C167 bis zu 111I/O-Leitungen (Ein-/Ausgabe-Leitungen), die in Gruppen als Ports organisiert werden. Aufdiesen Leitungen werden die digitalen Pegel HIGH und LOW ausgegeben oder eingelesen. DiePorts können über Steuerregister (SFR) bitweise als Eingang oder Ausgang geschaltet wer-den. Ausgangsports sind rücklesbar. Bei einigen der Ausgabeports ist sogar wählbar, ob sie alsGegentaktausgang oder als Open-Drain-Ausgang arbeiten. Da sich TTL- und CMOS-Pegelunterscheiden, lässt sich für einige Eingänge wählen, ob sie zur HIGH/LOW-Erkennung dieTTL- oder CMOS-Pegel zugrunde legen. Alle I/O-Port-Leitungen haben alternative Funk-tionen wie z.B. die Funktion als externe Busschnittstelle, Analogeingabe, GPT, Kommunika-tionsschnittstelle u.a.m.

    Für die Erfassung analoger Signale besitzt der C167 einen 10-Bit-Analog-Digital-Umsetzermit einem 16-Kanal-Eingangsmultiplexer. Darüber lässt sich also einer der 16-Kanäle aufden Wandler durchschalten. Zwischen dem Multiplexer und dem Wandler ist ein Abtast-Halte-Glied eingefügt, das das externe Analogsignal über eine gewisse Zeit erfasst und dannals konstanten Pegel dem A/D-Wandler anbietet. So kann auch eine schnell veränderlicheSpannung ohne externes Abtast-Halte-Glied gewandelt werden. Es gibt vier Betriebsarten:Die Einzelwandlung an einem Kanal, die Dauerwandlung an einem Kanal, die Einzelwandlungeiner Gruppe von Kanälen (Auto-Scan) und die Dauerwandlung einer Gruppe von Kanälen.

    Der A/D-Wandler wird über zugehörige SFR gesteuert: Der Start der Wandlung wird überein Bit im SFR ADCON ausgelöst und in diesem Register wird auch angezeigt, ob die Wand-lung schon beendet ist. Dann kann aus einem anderen SFR das 10-Bit-Ergebnis entnommenwerden. Die Wandlung geschieht in zwei Abschnitten: Öffnung des Abtast-Halte-Gliedes fürdas externe Signal (Sampling) und die eigentliche Analog-Digital-Wandlung des Pegels aufdem Abtast-Halte-Glied (Conversion). Auf dem C167 kann die Sampling-Zeit und der Taktfür den A/D-Wandler programmiert werden. Die erreichbare Wandlungszeit hängt natürlichvon dieser Einstellung ab und beträgt über 50 CPU-Takte, je nach Einstellung noch weitmehr. Meist will man diese Zeit nicht mit nutzlosen Warteschleifen verbringen. Der A/D-Wandler des C167 ist daher fähig, einen Interrupt auszulösen, wenn die Wandlung beendetist und das Ergebni