Lösung von I/O-Erweiterungsproblemen für Mikrocontroller durch Aufrüstung mit externen Bausteinen

Von Jacob Beningo

Zur Verfügung gestellt von Nordamerikanische Fachredakteure von Digi-Key

Die Entwickler werden bei Mikrocontrollern häufig mit zwei I/O-Problemen konfrontiert. Das erste tritt dann auf, wenn der am besten geeignete Mikrocontroller nicht über den richtigen Umfang von I/O-Fähigkeiten verfügt. Das zweite tritt auf, wenn für eine bereits auf dem Markt befindliche Produktlinie weitere I/O-Fähigkeiten benötigt werden.

Im ersten Fall ist es oft unvermeidlich, einen teureren und leistungsfähigeren Mikrocontroller einzusetzen. Im zweiten Fall könnte sich der Wechsel auf einen neuen Mikrocontroller und die Portierung der Software für diesen sowohl aus zeitlichen als auch aus Kostengründen verbieten.

Eine mögliche Lösung für beide Probleme ist die Verwendung von externen I/O-Erweiterungsbausteinen, die oft an den SPI- oder I2C-Bus des Mikrocontrollers angeschlossen werden können. Dadurch wird eine „Überspezifizierung“ des Mikrocontrollers bezüglich Anzahl der Pins, Leistung oder Abmessungen vermieden. Gleichzeitig wird das Produkt zukunftssicher bezüglich neuer Features, Erweiterungen des Zielmarkts, Kundenwünschen nach neuen Funktionen und – auch das kommt vor – der Wahl eines ungeeigneten Mikrocontrollers.

In diesem Artikel werden die typischen I/O-Anforderungen für einen Mikrocontroller behandelt, und es werden einige geeignete externe Erweiterungsbausteine vorgestellt. Dann wird gezeigt, wie mit diesen Ressourcen außerhalb des Chips zusätzliche Mehrzweck-I/O-Schnittstellen (GPIOs), Arbeitsspeicher, Pulsweitenmodulation (PWM) und sogar Watchdog-Timerfunktionen implementiert werden können.

Wahl einer Erweiterungsschnittstelle

Mikrocontroller verfügen auf dem Chip über verschiedene Peripherieschnittstellen für die Kommunikation mit externen Komponenten. Je nach Mikrocontroller könnte es sich u. a. um die folgenden Schnittstellen handeln:

  • SPI (Serielle Peripherieschnittstelle)
  • I2C-Bus (Inter-integrated Circuit Bus)
  • USB (Universal Serial Bus)
  • UART (Universal Asynchronous Receiver/Transmitter)
  • CAN (Controller Area Network)
  • Wi-Fi

Die für die Kommunikation mit externen Erweiterungsbausteinen am besten geeigneten Schnittstellen sind I2C und SPI.

I2C ist ein Zwei-Draht-Bus, der normalerweise mit 100 Kbits/s oder 400 Kbits/s arbeitet. Es gibt auch Hochgeschwindigkeitsbausteine, die 1 Mbit/s oder mehr unterstützen. Ein Draht ist eine dedizierte Taktleitung und über den anderen läuft die bidirektionale Kommunikation zwischen Master und Slave. Der Mikrocontroller ist normalerweise der Master und die externen Bausteine sind Slaves. Die Slaves können über ein 7-Bit- oder 10-Bit-Schema adressiert werden.

SPI ist eine Drei-Draht-Busschnittstelle mit einer Geschwindigkeit zwischen 1 Mbit/s und 12 Mbits/s. Der SPI-Bus hat eine dedizierte Master-Ausgangsleitung, eine Slave-Ausgangsleitung und eine Taktleitung. Auch hier wird der Mikrocontroller als Master konfiguriert, und er kommuniziert dann über eine „Slave Select“-Leitung mit den Slave-Bausteinen. Ein an den Mikrocontroller angeschlossener Slave-Baustein benötigt einen dedizierten Ausgangs-Pin, mit dem er zur Kommunikation ausgewählt wird. Es ist leicht möglich, dass die I/O-Leitungen zur Auswahl der Slave-Bausteine nicht ausreichen, wenn viele externe Komponenten angeschlossen werden sollen.

Beim STM32L011D4P7 von STMicroelectronics stehen den Entwicklern beispielsweise elf I/O-Leitungen zur Verfügung (Abbildung 1). Drei I/O-Leitungen werden als Daten- und Taktleitung für SPI benötigt. So bleiben acht Leitungen für die Kommunikation mit Slave-Bausteinen und für weitere vom System benötigte Funktionen. Dies wird für viele Anwendungen ausreichen, aber manchmal möchte ein Entwickler die I/O-Möglichkeiten erweitern.

Bild: Arm®-Cortex®-M7-Prozessor STM32L011D4P7 von STMicroelectronics

Abbildung 1: Der STM32L011D4P7 ist ein Arm®-Cortex®-M7-Prozessor mit elf I/O-Pins. (Bildquelle: STMicroelectronics)

Die Daumenregel ist im Allgemeinen einfach: Verwende einen I2C-Bus, wenn die folgenden zusätzlichen Fähigkeiten benötigt werden:

  • I/O
  • PWM
  • EEPROM
  • Watchdog-Timer

Wenn zusätzliche Fähigkeiten wie Speicherzugriff mit hoher Geschwindigkeit auf eine SD-Karte benötigt werden, sollte der SPI-Bus bevorzugt werden.

Erweiterung von Mehrzweck-I/O (GPIO)

Es gibt einige ICs, die eine Erweiterung von Eingabe und Ausgabe über eine I2C-Schnittstelle unterstützen. Interessante Beispiele sind die Folgenden:

Der PCA8574 ist besonders interessant, da er nur ein einziges Register für Eingang und Ausgang hat. Ein einziges Register vereinfacht den Softwareaufwand für die Konfiguration des Bausteins sowie das Lesen und Schreiben über die Pins drastisch (Abbildung 2). Der Mikrocontroller kommuniziert mit dem PCA8574 über I2C und adressiert den Baustein je nach Konfiguration der Pins A0 bis A2. Dies macht das Design flexibel: Die Slave-Adresse für den PCA8574 kann ausgewählt werden, und es können sogar mehrere vorhanden sein.

Schaltbild: 8-Bit-I/O-I2C-Erweiterung PCA8574 von NXP

Abbildung 2: Der PCA8574 von NXP ist eine quasi-bidirektionale 8-Bit-I/O-I2C-Erweiterung. Sie verfügt nur über ein einziges I2C-Register zum Lesen und zum Schreiben, über das die I/O-Funktionen über die Pins durchgeführt werden. Damit ist der Baustein einfach und elegant. (Bildquelle: NXP Semiconductors)

Standardmäßig sind P0 bis P7 beim Einschalten als Eingang konfiguriert. Beim Lesen des internen Registers erhält man den Zustand jedes Pins des Bausteins, unabhängig davon, ob er als Eingang oder Ausgang konfiguriert ist. Beim PCA8574 können Pins gleichzeitig als Eingang und als Ausgang fungieren, d. h. das Schreiben auf das Register legt gleichzeitig die Ausgabe des entsprechenden Bits fest.

Der Ausgang wird durch einen kleinen internen Pull-up-Widerstand gesteuert, der leicht durch einen Eingangswert überwunden werden kann. Wenn sich einer der Eingangszustände ändert, wechselt der INT-Pin auf Low, was den Mikrocontroller darüber informiert, dass eine Änderung eines Eingangszustands stattgefunden hat. Der Mikrocontroller kann dann einen I2C-Aufruf durchführen, um die neuen Werte zu lesen.

PWM-Erweiterung

Ein sehr nützlicher Erweiterungsbaustein ist eine PWM-Erweiterung. Dieser Baustein ist insbesondere zum Ansteuern von LEDs nützlich. Wenn der Mikrocontroller gerade nichts zu tun hat, kann er schlafen gelegt werden, und die Ansteuerung einer LED kann von der PWM-Erweiterung übernommen werden.

Ein perfektes Beispiel für einen häufigen Einsatz einer PWM-Erweiterung sind Schaltungen mit RGB-Drucktasten, wie die RGB-Drucktaste PV6F240SSG von E-Switch oder die SPST-RGB-Drucktaste 3-101-399 von Schurter Electronic Components (Abbildung 3).

Bilder: RGB-Drucktaste von Schurter

Abbildung 3: Die RGB-Drucktaste von Schurter hat eine rote, blaue und grüne LED, die um die Drucktaste herum angeordnet sind und mit denen ein Farbmuster generiert werden kann. Dieser Typ von Bauelement eignet sich hervorragend zur Ansteuerung durch einen PWM-Erweiterungschip. (Bildquelle: Schurter)

Die RGB-Drucktaste von Schurter hat eine rote, blaue und grüne LED, die um die Drucktaste herum angeordnet sind und mit denen ein Farbmuster generiert werden kann. Dieser Typ von Bauelement eignet sich hervorragend für einen PWM-Erweiterungschip.

Ein für I2C geeigneter PWM-Erweiterungs-Chip ist der MAX7315 von Maxim Integrated. Der MAX7315 verfügt über acht PWM-Anschlüsse und über eine Funktion zur Helligkeitssteuerung von LEDs. Dies deckt problemlos die drei für die Ansteuerung eines RGB-Schalters erforderlichen Kanäle ab. So kann ein einziger Baustein mehrere Schalter und mehrere eigenständige LEDs ansteuern. Es ist noch ein neunter Anschluss vorhanden, der als Interrupt zur Erkennung eines Übergangs oder als Mehrzweck-Ausgang verwendet werden kann.

Die I2C-Schnittstelle des MAX7315 ist etwas komplizierter als die des PCA8574 von NXP, da sie mehr als ein einzelnes Register umfasst. Daher muss der Slave-Baustein adressiert, die gewünschte Speicheradresse für den Lese- oder Schreibzugriff angegeben und dann der Lese- oder Schreibvorgang durchgeführt werden. Abbildung 4 zeigt die Speicherauslegung des MAX7315.

Register Adress-Code (Hex) Autoinkrementierungs-Adresse
Lese-Eingangsanschlüsse 0x00 0x00 (keine Änderung)
Blinkphase 0 Ausgänge 0x01 0x01 (keine Änderung)
Anschlusskonfiguration 0x03 0x03 (keine Änderung)
Blinkphase 1 Ausgänge 0x09 0x09 (keine Änderung)
Master, O8 Intensität 0x0E 0x0E (keine Änderung)
Konfiguration 0x0F 0x0F (keine Änderung)
Ausgänge Intensität P1, P0 0x10 0x11
Ausgänge Intensität P3, P2 0x11 0x12
Ausgänge Intensität P5, P4 0x12 0x13
Ausgänge Intensität P7, P6 0x13 0x10

Abbildung 4: Der PWM-Controller MAX7315 verfügt über acht Ausgänge einschließlich einer Steuerungsfunktion für LED-Helligkeit. Die Registerauslegung des Bausteins ist einfach und erlaubt einen einfachen Zugriff auf die weiteren PWM-Funktionen. (Bildquelle: Maxim Integrated)

Die Registerauslegung des MAX7315 ist einfach und erlaubt einen einfachen Zugriff auf die weiteren PWM-Funktionen.

Kombinationserweiterungen mit WDT, EEPROM und PWM

Wie oben gezeigt können I2C-Bus-I/O-Erweiterungen als eigenständige Komponente extrem leistungsfähig sein. D. h. sie enthalten nur eine spezielle Funktion wie I/O oder PWM. Erweiterungen wie die Multiport-I/O-Erweiterung CY8C9520A von Cypress Semiconductor verfügen über mehrere Peripherieerweiterungen in einem einzigen IC-Gehäuse. Der CY8C9520A wird in drei Varianten geliefert: als 20-Bit-, 40-Bit oder 60-Bit-Erweiterung. Die Pins können als Eingang, Ausgang oder als PWM konfiguriert werden (Abbildung 5).

Diagramm: CY8C9520 von Cypress Semiconductor

Abbildung 5: Die CY8C9520 von Cypress Semiconductor ist eine 20-Bit-, 40-Bit- oder 60-Bit-I/O-Erweiterung mit EEPROM. Drei Erweiterungs-Pins können als Eingang, Ausgang oder PWM konfiguriert werden. (Bildquelle: Cypress Semiconductor)

Außer der I/O-Erweiterung enthält der CY8C9520 ein EEPROM, in dem wichtige Anwendungseinstellungen, z. B. eine Seriennummer oder andere wichtige Konfigurationsparameter, gespeichert werden können.

Bei einem näheren Blick auf Abbildung 5 ist der WD6-Pin an GPort 2 zu erkennen. Dies ist der Ausgangs-Pin eines Watchdog-Timers, über den der Mikrocontroller zurückgesetzt werden kann, wenn er nicht mehr kommuniziert und sich nicht beim Watchdog des CY8C9529 „meldet“. Die Einstellungen des Watchdogs sind komplett konfigurierbar und können den Anwendungscode robuster machen.

Tipps und Tricks zur Erweiterung der Fähigkeiten eines Mikrocontrollers

Es gibt viele Techniken, mit denen die Fähigkeiten eines Mikrocontrollers erweitert werden können. Es folgen einige hilfreiche Tipps und Tricks:

  • Verwenden Sie I2C als Schnittstelle für externe Komponenten. Die Schnittstelle benötigt nur zwei Pins und unterstützt mehrere Slave-Komponenten.
  • Bevor Sie ein Teil in Hardware gießen, besorgen Sie sich eine Entwicklungsplatine oder löten Sie den Chip auf eine Erweiterungsplatine, um zu testen, ob es alle Anforderungen des Systems erfüllt.
  • Verwenden Sie ein Hilfsprogramm für den I2C-Bus als Schnittstelle zum Erweiterungsbaustein und testen Sie seine Funktion aus. Dies beschleunigt die Softwareentwicklung dramatisch.
  • Überwachen Sie während der Softwareentwicklung die Kommunikation mit dem externen Baustein mit einem Bus-Analyser, um die Debug-Zeit zu minimieren.
  • Wählen Sie möglichst ein Bauelement mit einem externen Watchdog-Timer. Damit kann das System robuster gemacht werden.
  • Verwenden Sie für die Übertragung von Daten außer Konfigurationsdaten von einem Speicher außerhalb des Chips eine Hochgeschwindigkeitsschnittstelle wie SPI.
  • Stellen Sie sicher, dass der I2C-Treiber eine negative Antwort (NAK) einer Komponente oder ein Herunterfahren des Bus behandeln kann. Es ist nicht ungewöhnlich, dass Treiber derartige Fehler ignorieren und bei einer unerwarteten Antwort in einer Endlosschleife hängen bleiben.

Fazit

Wenn bei einer Entwicklung der Punkt erreicht ist, dass für einen Mikrocontroller keine ausreichenden I/O-Möglichkeiten mehr zur Verfügung stehen, müssen die Entwickler ihre Arbeit nicht stoppen und bei null anfangen. Mithilfe von externen Peripheriechips kann das System um zusätzliche Fähigkeiten erweitert werden.

Haftungsausschluss: Die Meinungen, Überzeugungen und Standpunkte der verschiedenen Autoren und/oder Forumsteilnehmer dieser Website spiegeln nicht notwendigerweise die Meinungen, Überzeugungen und Standpunkte der Digi-Key Electronics oder offiziellen Politik der Digi-Key Electronics wider.

Über den Autor

Jacob Beningo

Jacob Beningo ist ein Berater für eingebettete Software, der derzeit mit Kunden in mehr als einem Dutzend Ländern zusammenarbeitet, um ihr Unternehmen durch die Verbesserung von Produktqualität, Kosten und Markteinführungszeit dramatisch zu transformieren. Er hat mehr als 200 Artikel über Entwicklungstechniken für eingebettete Software veröffentlicht, ist ein gefragter Redner und technischer Trainer und verfügt über drei Abschlüsse, darunter einen Masters of Engineering der University of Michigan. Bei Interesse können Sie ihn unter jacob@beningo.com kontaktieren oder besuchen Sie seine Website www.beningo.com und melden Sie sich für seinen monatlichen Embedded Bytes Newsletter an.

Über den Verlag

Nordamerikanische Fachredakteure von Digi-Key