Seit Einführung der ersten ROM-MCU vor mehr als 40 Jahren haben sich Mikrocontroller stark weiter entwickelt. Vor allem 8-Bit-Mikrocontroller haben sich zu intelligenten ICs mit Analogfunktionen gemausert. Früher bestanden die Peripherieschaltungen eines 8-Bit-Mikrocontrollers aus Modulen, von denen jedes eine feste Funktion und nichts weiter ausführen konnte. Die neueste 8-Bit-Generation wurde von Grund auf für maximale Differenzierung konzipiert; dies entspricht einer Paradigmen-Verschiebung, die ein völlig neues Vorgehen bei der Entwicklung von Endprodukten zur Folge hat. In diesen neuen 8-Bit-Mikrocontrollern sind etliche innovative Peripherieschaltungen integriert, die je nach Bedarf viele Funktionen und Aufgaben übernehmen können. Diese sind konfigurierbar und lassen sich miteinander zu neuen Funktionen kombinieren, die früher nur schwer auszuführen waren. Die meisten dieser Peripherieschaltungen können eigenständig ohne Überwachung durch den CPU-Kern arbeiten, wodurch die CPU zur Ausführung notwendiger Aufgaben weniger belastet wird. Darüber hinaus lassen sich viele Peripherieschaltungen im Sleep-Modus für besonders energiesensitive Anwendungen nutzen.
Die wichtigste Peripherie
Die am häufigsten benutzten Peripherieschaltungen aus dieser neuen Gruppe ist die CLC (Configurable Logic Cell). Dabei handelt es sich um ein sehr einfaches, aber leistungsfähiges Modul, das Standard-Logikfunktionen wie AND, OR, XOR, SR Latch und J-K-FlipFlop bietet, die man zum Aufbau von Logik-Gattern für die Signalaufbereitung konfigurieren kann. Die Ein- und Ausgangssignale des CLC-Moduls lassen sich über interne Verbindungen mit beliebigen I/O-Kanälen, Peripherieschaltungen oder Registern verschalten. Das Modul ist nutzbar als einfacher Signal-Router, Glue-Logik oder als eine intelligente Zustandsmaschine für die Wake-up-Steuerung. Ein herkömmlicher Mikrocontroller benötigt ein externes PLD (Programmable Logic Device) oder zusätzlichen Programmcode für die gewünschte logische Steuerfunktion, und selbst ein derartiger Aufbau bietet nicht die gleiche Flexibilität wie ein CLC.
Der numerisch gesteuerte Oszillator (NCO, Numerically Controlled Oscillator) ist ein weiteres konfigurierbares Modul, das sich als 20-Bit-Timer oder PWM-Controller mit hochauflösender Steuerung und variabler Abtastrate implementieren lässt. Dabei handelt es sich nicht um einen herkömmlichen PWM/Timer, bei dem Leistungsdaten und Funktionsmerkmale fast das genaue Gegenteil voneinander sind.
Dank seiner höheren Auflösung und seiner linearen Frequenzsteuerung lassen sich mit dem NCO komplexe Steuerungsalgorithmen vereinfachen, die häufig in Stromversorgungs-Anwendungen wie etwa bei Leuchten-Vorschaltgeräten mit Dimmer-Funktion eingesetzt werden, und bei denen der Schaltungsstrom sehr genau geregelt werden muss. Ein weiterer Einsatz des NCO wäre die Steuerung des Alarmtongebers bei Rauchmeldern, da sich durch die variable Frequenzsteuerung problemlos die Höhe eines Alarmtons ändern lässt. Die höher aufgelöste Steuerung der erzeugten Frequenz erlaubt auch ohne den Einsatz externer analoger Komponenten eine bessere Abstimmung des Klangs und der Tonhöhe des Warntons.
Obwohl sich die integrierte Peripherieschaltung eigenständig nutzen lässt, geschieht die eigentliche Magie erst bei der Kombination mehrerer Module, mit der man andere Funktionen erzeugen kann. So benutzt man beispielsweise eine Manchester-Codierung meist in Telekommunikations- oder Datenspeicherungs-Anwendungen. Der herkömmliche Manchester-Algorithmus kann sehr Firmware-intensiv sein und benötigt CPU-Ressourcen für die Task-Verwaltung. Schaltet man die NCO- und CLC-Module zu einem Manchester-Decoder zusammen, so arbeitet diese Funktion ohne jegliche CPU-Beteiligung komplett in Hardware. Manchester-Encoder lassen sich übrigens mit nur einem einzigen CLC-Modul, und ohne jegliches Bit-Banging in Firmware aufbauen.
Andere Peripherieschaltungen wie etwa ein Angular Timer (AT), ein Signal Measurement Timer (SMT) sowie ein Math Accelerator (MathAcc) sind etwas komplexer als CLC- und NCO-Module. Der AT kann beliebige periodische Signale aus optischen Encodern, Nulldurchgangs-Detektoren oder Hall-Sensoren für Motorsteuerungen und AC-Power-Anwendungen unabhängig von Motordrehzahl oder Signalfrequenz messen. Das AT-Modul führt eine sofortige Domänen-Transformation zwischen Zeit und Winkel komplett in Hardware durch, und erreicht dies ohne jeglichen zusätzlichen CPU-Overhead. Wollte man diese Aufgabe mit einem herkömmlichen Mikrocontroller ausführen, so würde man üblicherweise mehrere Timer zum Zählen und Messen der Zeiteinheiten benötigen, und müsste die Werte anschließend über mathematische Berechnungen (via Firmware) in die Phasenwinkel-Domäne transformieren. Das herkömmliche Vorgehen erfordert ein zusätzliches Firmware-Set-up sowie CPU-Ressourcen für die Berechnungen und zusätzlich eine Größenbeschränkung der Lookup-Tabelle, die die Anzahl der verfügbaren Werte begrenzen, und damit zu Approximationen und Ungenauigkeiten führen könnte. Das AT-Modul kann automatisch und direkt Interrupts und Events auf der Basis des vom Entwickler konfigurierten Phasenwinkel-Werts generieren. Darüber hinaus bietet der AT dem Anwender drei Compare/Capture PWM (CCP) Funktionen.
Im Vergleich
Ein weiteres Beispiel für die Kombination mehrerer Peripherieschaltungen zur Vereinfachung einer Aufgabe ist die CDI-Zündsteuerung (Capacitive Discharge Ignition), die man oft in kleinen Verbrennungsmotoren einsetzt. In einem digital gesteuerten CDI-System hat der Mikrocontroller zwei Hauptaufgaben:
Ermittlungen des Zündwinkel-Vorlaufs für die Zündkerze anhand von Informationen aus unterschiedlichen Sensoren
Einstellung des Tastverhältnisses für die PWM-Signale zur Bereitstellung der Zündpulse an den Gleichstromwandler für den Zündfunken
Ohne auf alle technischen Details eines Steuersystems für einen Verbrennungsmotor einzugehen, ermöglicht eine PIC16F161x MCU- basierte CDI-Implementation mit einer Kombination aus AT, CLC und einigen anderen Peripherieschaltungen wie dem SMT und dem MathACC eine deutliche Verbesserung der Gesamtleistung, da diese Peripherieschaltungen effektiv die Drehzahl-Berechnung und -Steuerung des Zündzeitpunkts der Zündkerze ohne umfangreiche CPU-Beteiligung übernehmen können.
Die AT-Methode ermöglicht dank einer Reduzierung der Ausführungszeit und der CPU-Last um mehr als 50 Prozent bei gleichzeitiger Verringerung des Codeumfangs um 40 Prozent eine deutliche Verbesserung der Systemleistung.
Ein PWM-Signal lässt sich auf verschiedene Weise erzeugen, entweder über Firmware oder Hardware. Beim Messen und Extrahieren von Daten aus einem ankommenden PWM-Signal gibt es aber wesentlich weniger Möglichkeiten. Typischerweise nutzt man Timer und CCPs sowie eine große Anzahl von CPU-Zyklen zur Ermittlung des Pulses, der Pulsperiode und der Tastverhältnis-Werte. Zur Ausführung dieser Aufgaben kann man die CLC- und NCO-Module mit etwas zusätzlichem Programmcode miteinander verknüpfen.
Allerdings ermöglicht die im Beispiel oben erwähnte SMT-Peripherieschaltung als 24-Bit-Counter/-Timer mit leistungsfähiger Clock- und Gating-Logik unterschiedliche Betriebsarten für die Signalerfassung. Zu diesen Betriebsarten gehört eine automatische Messung und Speicherung der Periodendauer und der Tastverhältnis-Werte ohne Überwachung durch den CPU-Kern und ohne zusätzliche Berechnungen. Der SMT ist äußerst nützlich für alle Designs, bei denen ein PWM-Signal wie etwa in der Motorsteuerung gemessen werden muss.
Angesichts der umfangreichen Fähigkeiten dieser innovativen Peripherieschaltungen stellt sich die Frage, wie man die begrenzten I/O-Kanäle und die verfügbaren MCU-Ressourcen nutzt, um ein Maximum an Leistung aus dem Bauteil heraus zu holen. Zu viele Module und zu wenig Pins – diese Probleme setzten den Fähigkeiten traditioneller 8-Bit-Mikrocontroller mit geringer Pinanzahl Grenzen. Dank der neuen Pin-Peripheral-Select-Funktion (PPS) kann der Entwickler jetzt jedes digitale Signal „on the Fly“ ohne die Nutzung externer Bauteile zu einem beliebigen I/O-Pin verschalten. Ein herkömmliches Design mit mehreren UARTs benötigt meist einen Mikrocontroller mit hoher Pinanzahl sowie mehreren UART-Modulen für diese Aufgabe. Bei den 8-Bit-MCUs der neuen Generation kann jeder Mikrocontroller dies erreichen, solange er einen einzigen UART und PPS- oder CLC-Module für die einfache Verschaltung von Kommunikationssignalen an mehrere Pins besitzt.
Core-unabhängige Peripherieschaltungen bieten dem Entwickler prinzipiell mehr Flexibilität. Mit ihnen kann er mehrere Peripherieschaltungen so konfigurieren und miteinander kombinieren, dass er damit viele Anwendungsfunktionen ohne Einschränkungen der CPU-Leistung oder des Stromverbrauchs realisieren kann. Die neuen Hardware-Peripherieschaltungen verringern die traditionelle Abhängigkeit vom Core und ermöglichen mehr deterministisches Verhalten im gesamten Systemdesign. Dies verschafft 8-Bit-Mikrocontrollern der neuesten Generation zusätzliches Leistungspotenzial gegenüber herkömmlichen 8-Bit-MCUs, da sie mit diesem Aufbau oft mehr Leistung als bei einem Software-zentrischen Vorgehen mit 32-Bit-MCUs erzielen können, weil viele Funktionen auf integrierter Core-unabhängiger Hardware ausgeführt werden.