Schnelle Entwicklung mit dem Raspberry Pi 3 (im Vergleich mit dem spartanischen Raspberry Pi Zero)

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

Raspberry-Pi-Platinen in allen Versionen waren ein Segen für die Entwickler, sowohl für Profis als auch für Hobbyanwender. Während der Raspberry Pi Zero viel Aufmerksamkeit erregt hat, war es schwierig ihn zu beschaffen. Glücklicherweise gibt es viele weitere Boards innerhalb der Pi-Familie, die überlegene Features für die Anforderungen aller Anwendungen bieten.

Der Raspberry Pi 3 mit seinem Quad-Core-Prozessor hat einen doppelt so großen Arbeitsspeicher wie der Pi Zero mit Single-Core-Prozessor. Für Entwickler, die ein kleines Format benötigen, aber nicht mit der Leistung des Pi Zero zufrieden sind, kommt der Raspberry Pi Compute Module 3 (CM3) in Frage, da seine Leistung der des Pi 3 entspricht und er das Kreditkartenformat des Pi Zero hat. Aufgrund der riesigen Menge von Zusatzplatinen und leicht erhältlicher Software sind die Entwickler mit dem Pi 3 und CM3 für die Anforderungen eines breiten Spektrums von Anwendungen gerüstet.

Der Einstieg mit einem Raspberry Pi

Raspberry-Pi-Systeme bieten eine solide Open-Source-Grundlage, die Hersteller, Entwickler von Drittanbietern und Benutzer in die Lage versetzen, diese zu ihrem Vorteil einzusetzen bzw. zu einem sich ständig vergrößernden Software- und Hardware-Ökosystem beizutragen. Die Pi-Hardware, die ursprünglich von der Raspberry Pi Foundation als kostengünstige Plattform für den Computerunterricht konzipiert wurde, hat sich zu einer mächtigen, aber immer noch kostengünstigen Plattform entwickelt, die sich für das Rapid Prototyping und zunehmend als einbettbare Computerplattform eignet.

Die Pi-Software ist ähnlich leistungsfähig und anwenderfreundlich. Auf Pi-Platinen läuft Raspbian, eine für Raspberry-Pi-Platinen optimierte Version des Betriebssystems (OS) GNU/Linux. Entwickler legen einfach eine SD-Karte mit dem Raspbian-Installationsprogramm NOOBS in den SD-Karteneinschub einer Pi-Platine ein und befinden sich innerhalb weniger Sekunden in einer vertrauten Linux-Umgebung.

Dank der sehr aktiven Raspberry-Pi-Community haben Entwickler mit speziellen Anforderungen die Wahl zwischen weiteren Betriebssystemen, darunter Ubuntu, Ubuntu Core, Windows 10 IoT Core, der Linux-Version von OSMC (Open Source Media Center) und RISC OS. Bei diesen Distributionen muss das System nur von einem auf einer SD-Karte gespeicherten, heruntergeladenem Image geladen werden. Schließlich können die Softwareingenieure von einer Vielzahl von verfügbaren Softwarebibliotheken profitieren, die ein breites Spektrum von Programmiersprachen unterstützen.

Der Pi unter der Lupe

Die Hardware des Pi hat sich in drei größere Zweige entwickelt, die sich bezüglich Leistung, Größe und Funktionalität beträchtlich unterscheiden (Tabelle 1). Der kürzlich eingeführte und wegen seiner geringen Größe interessante Pi Zero stellt eine Einstiegsplatine dar, bei der Funktionselemente den geringeren Abmessungen und Kosten geopfert wurden. Dagegen bieten der Pi 3 und seine Embedded-Variante CM3 einen leistungsstarken Quad-Core-Prozessor und einen großen Arbeitsspeicher und stellen damit die für Embedded-Anwendungen erforderliche robuste Hardwareplattform dar. Darüber hinaus entsprechen die Abmessungen des CM3 nahezu denen des Pi Zero, ohne dabei Leistung oder Funktionalität einzubüßen.

Pi Prozessor Arbeitsspeicher Abmessungen E/A
Pi 3 BCM2837 (1,2 GHz 64-Bit-Quad-Core-ARM-Cortex-A53 mit Dual-Core-VideoCore-IV-GPU)

1 GB RAM

NVM: Mikro-SD-Karteneinschub

85 mm x 56 mm

40-Pin-Pi-Steckleiste

40 GPIO

WLAN 802.11n

Bluetooth 4.1

Ethernet

USB

HDMI

AV-Anschluss

Kameraschnittstelle (CSI)

Displayschnittstelle (DSI)

Pi CM3 Wie Pi 3

1 GB RAM

NVM: 4GB-eMMC-On-Board-Flash

67,6 mm x 31 mm

200-Pin-SODIMM

48 GPIO

2x I2C

2x SPI

2x UART

2x SD/SDIO

HDMI

USB

DPI, SMI, CSI, DSI

Pi Zero BCM2835 (1 GHz Single-Core ARM1176)

512 MB RAM

NVM: Mikro-SD-Karteneinschub

65 mm x 30 mm

Pi 40-Pin durchkontaktiert

HDMI

USB

HAT-kompatible Steckleiste

Composite Video- und Reset-Steckleisten

CSI-Kameraanschluss

Tabelle 1: Vergleich zwischen Raspberry Pi 3, Compute Module 3 (CM3) und Pi Zero (Quelle: Digi-Key Electronics, aus Daten der Raspberry Pi Foundation zusammengestellt)

Standard-Hardwareschnittstellen sind entscheidende Faktoren für einen Erfolg von Plattformen wie Raspberry Pi. Neuere Pi-Platinen wie der Pi 3 und der Pi Zero haben die gleiche 40-Pin-Schnittstelle mit 28 GPIO-Pins, von denen einige für I2C-, SPI- und UART-Verbindungen doppelt belegt sind (Abbildung 1). Neben den GPIO-Pins verfügt diese Pi-Standardschnittstelle über 3,3 V, 5 V, Erde und weitere Leitungen wie EEPROM ID. Dank dieser einheitlichen Pin-Belegung steht Pi-Anwendern eine große Auswahl von Zusatzplatinen von Drittanbietern zur Verfügung, die alle für diese Standardschnittstelle ausgelegt sind.

Diagramm von Pi-Platinen, darunter Pi 3 und Pi Zero

Abbildung 1: Die gemeinsame 40-Pin-Schnittstelle der Pi-Platinen, darunter Pi 3 und Pi Zero, stellt GPIO und weitere Leitungen des Host-Prozessors und der angeschlossenen Komponenten bereit. (Bildquelle: Raspberry Pi Foundation)

Auf dem Pi Zero hat die 40-Pin-Schnittstelle allerdings die Form von Durchkontaktierungslöchern auf der Platine, sodass der Anwender mit durchkontaktierten Steckverbindern mit Löten oder Presspassung arbeiten muss. Beim Pi 3 ist der Steckverbinder selbst Standard (Abbildung 2) – ebenso alle Steckverbinder für Features wie WLAN und Ethernet, die es wie aus der Tabelle ersichtlich beim Pi Zero nicht gibt.

Bild der Pi-Zero- und Pi-3-Platinen

Abbildung 2: Der Pi Zero (a) stellt die 40-Pin-Standardschnittstelle in Form von Durchkontaktierungslöchern bereit, während der Pi 3 (b) über einen 40-Pin-Steckverbinder verfügt, an den Zusatzplatinen, sogenannte HATs (Hardware Attached on Top), angeschlossen werden können. (Bildquelle: Raspberry Pi Foundation)

Zusatzhardware

Da die Pi-Schnittstelle Strom, Erde und GPIO bereitstellt, können Entwickler ihre zusätzlichen Schaltungen direkt mit den GPIO-Schnittstellen-Pins des Pi 3 verdrahten. Die Pi-Plattform bietet eine effektivere Methode zur Erweiterung eines Pi-3-Systems als eigenständige Schaltungen. Aufgrund der Verfügbarkeit des 40-Pin-Steckverbinders auf dem Pi 3 steht dort eine Standardschnittstelle für Zusatzplatinen zur Verfügung, die als HAT (Hardware Attached on Top) konfiguriert sind. Dank dieser einfachen elektrischen und mechanischen Schnittstelle können Entwickler die Pi-3-Basisplatine mit anwendungsspezifischer Funktionalität erweitern. Die Entwickler stecken einfach ein Pi-kompatibles Zusatz-HAT auf den 40-Pin-Steckverbinder – und können sogar Stapel von Zusatzplatinen herstellen, die sich diese einzige Schnittstelle teilen.

Entwickler können auf einen beträchtlichen Bestand von Zusatzplatinen zurückgreifen. Das Pi Sense HAT enthält beispielsweise einen vollständigen Satz an Sensoren für Anwendungen, die Positions- oder Umgebungsdaten benötigen. Daneben bietet es eine LED-Matrix und einen Joystick mit fünf Tasten zur Interaktion mit dem Benutzer und für Feedback (Abbildung 3).

Bild: Pi Sense HAT

Abbildung 3: Entwickler können eine Pi-Platine mit zusätzlicher Funktionalität versehen, indem sie einfach HATs wie das Pi Sense HAT aufstecken, das mehrere Sensoren sowie eine LED-Matrix mit einem 5-Tasten-Joystick für die Benutzerinteraktion mitbringt. (Bildquelle: Raspberry Pi Foundation)

Das Sense HAT ist ein ausgeklügeltes eigenes Subsystem: Zusammen mit Ihrer 8-Bit-ATtiny-MCU (ATTINY88) von Microchip Technology verfügt diese Zusatzplatine über die Trägheitsmesseinheit (IMU) LSM9DS1 von STMicroelectronics, den Feuchtigkeits- und Temperatursensor HTS221 von STMicroelectronics und den Drucksensor LPS25HBTR von STMicroelectronics.

Einfache Bereitstellung

Das Sense HAT wird wie andere Pi-kompatible Zusatzplatinen auf den 40-Pin-Steckerbinder des Pi 3 aufgesteckt. Die Softwareschnittstelle ist ebenso einfach: Die offiziell unterstützte Python Sense-Hat-Bibliothek verbirgt Low-Level-Hardware-Interaktionen hinter einfachen intuitiven Aufrufen (Listing 1).

from sense_hat import SenseHat

 

sense = SenseHat()

 

temp = sense.get_temperature()

print("Temperature: %s C" % temp)

 

humidity = sense.get_humidity()

print("Humidity: %s %%rH" % humidity)

 

# get_orientation_degrees returns a Python dictionary

# with keys pitch, roll, and yaw

orientation = sense.get_orientation_degrees()

print("p: {pitch}, r: {roll}, y: {yaw}".format(**orientation))

Listing 1: Mithilfe der Sense-HAT-Bibliothek für den Raspberry Pi können Entwickler Daten von der Sense-HAT-Hardware mit wenigen intuitiven Aufrufen erfassen. (Codequelle: Raspberry Pi Foundation)

Außer dem Pi-Sense-HAT gibt es HATs von Drittanbietern, die die meisten typischen Anforderungen erfüllen. Das 114990831 von Seeed Technology bietet z. B. einen 16-Bit-2-Kanal-Digital/Analog-Wandler (DAC) und einen 24-Bit-Analog/Digital-Wandler (ADC) mit 8 asymmetrischen oder 4 differenziellen Eingangskanälen. Entwickler finden Zusatzbauteile vom GPS von Seeed, einem Ultraschall-Entfernungssensor von DFRobot bis hin zu einem Schrittmotor von Adafruit und vieles mehr.

Für Entwickler, deren Anforderungen von vorhandenen Zusatzplatinen nicht erfüllt werden können, bietet Seeed Technology eine Breakout-Platine als HAT an, die über Komponenten wie P-MOS-, N-MOS-, NPN- und PNP-Transistoren verfügt.

Bei der Arbeit mit HATs können Entwickler von einer Vielzahl von Software-Tools profitieren, die von der Raspberry Pi Foundation, Herstellern und anderen Mitgliedern der Pi-Community bereitgestellt werden. Mit dem Tool raspi-gpio für den Raspberry Pi kann beispielsweise der Zustand von GPIOs angezeigt und ihr Verhalten geändert werden. Der Open-Source-C-Code dieses Tools kann von Programmierern als Modell für eigene Softwareroutinen zur Steuerung der GPIO verwendet werden.

Es gibt auch GPIO-Bibliotheken für Hochsprachen wie Python. Das Python-Modul RPi.GPIO ermöglicht es Entwicklern, jeden Aspekt der GPIO-Funktion auf Pin-Ebene mit Aufrufen wie GPIO.input(channel) zum Lesen des Werts eines GPIO-Pins und GPIO.output(channel, state) zum Setzen des angegebenen GPIO-Pin auf einen bestimmten Zustand zu steuern.

Die Python-Bibliothek gpiozero führt in die GPIO-Programmierung eine Abstraktionen auf höherer Ebene ein, z. B. MotionSensor, LightSensor, LED, Motor usw. Mithilfe dieses Ansatzes können Programmierer die zugrunde liegende Hardware durch Lesen oder Setzen des gewünschten Zustands über Befehle wie led.on() zum Einschalten einer LED steuern, wobei die Bibliothek die dahinter stehenden GPIO-Transaktionen übernimmt.

Einsatz von Grove

Der HAT-Schnittstellenstandard des Pi bietet eine attraktive Grundlage für Drittanbieter, ist aber letztlich auf die Pi-Plattform beschränkt. Grove bietet dagegen einen grundlegenden Standard über alle Hardwareplattformen hinweg und ist daher für sehr viele Entwickler von Zusatzplatinen attraktiv. Das Grove Starter-Kit von Seeed Technology stellt eine Pi-kompatible HAT-Platine mit mehreren Grove-kompatiblen Anschlüssen bereit. Wie andere HATs wird das Grove-HAT auf den 40-Pin-Steckverbinder des Pi 3 aufgesteckt (Abbildung 4).

Bild des Grove-Starter-Kits von Seeed Technology

Abbildung 4: Das Grove-Starter-Kit von Seeed Technology wird auf den Standdard-40-Pin-Steckverbinder des Pi aufgesetzt und ermöglicht es Entwicklern, das Pi-System mithilfe des umfassenden Sortiments von Grove-kompatiblen Peripheriebausteinen zu erweitern. (Bildquelle: Seeed Technology)

Mit dem Grove-HAT bleibt der Pi 3 einfach und leistungsfähig wie bisher, aber die Entwickler haben Zugriff auf ein breites Sortiment von Grove-kompatiblen Zusatzkomponenten wie Aktoren, Gassensoren, Komponenten zur Motorsteuerung, Lautsprecher und drahtlose Transceiver und vieles mehr. Die Zusatzkomponenten werden nicht direkt auf den 40-Pin-Steckverbinder des Pi aufgesetzt, sondern der an diesen Produkten befindliche Grove-Steckverbinder wird in einen der oben auf dem Grove-HAT angebrachten Anschlüsse eingesteckt (ebenfalls Abbildung 4).

Es gibt für Entwickler Softwarebibliotheken für C, Java, Node.js, Python und andere Programmiersprachen, mit denen die Grove-Funktionalität auf ähnliche Weise in Anwendungen eingebracht werden kann. Hier denken die Entwickler mithilfe von Routinen in Hochsprache in Begriffen wie „Erfassen von analogen Daten“ (Listing 2), wobei die entsprechenden Transaktionen auf Bit-Ebene von Low-Level-Routinen der Bibliothek ausgeführt werden (Listing 3).

# Temperatur, Helligkeit und Lautstärke mit dem Raspberry Pi tweeten

# http://www.dexterindustries.com/GrovePi/projects-for-the-raspberry-pi/raspberry-pi-twitter-sensor-feed/

 

import twitter

import time

import grovepi

import math

 

# Verbindungen

sound_sensor = 0        # port A0

light_sensor = 1        # port A1

temperature_sensor = 2  # port D2

led = 3                 # port D3

 

intro_str = "DI Lab's"

 

# Mit Twitter verbinden

api = twitter.Api(

    consumer_key='YourKey',

    consumer_secret='YourKey',

    access_token_key='YourKey',

    access_token_secret='YourKey'

    )

 

grovepi.pinMode(led,"OUTPUT")

grovepi.analogWrite(led,255)  #tLED auf Maximum einstellen, um Bereitschaft anzuzeigen

 

while True:

    # Fehlerbehandlung im Fall von Kommunikationsproblemen mit dem GrovePi

    try:

        # Wert vom Temperatursensor lesen

        [t,h] = grovepi.dht(temperature_sensor,0)

 

        # Wert vom Lichtsensor lesen

        light_intensity = grovepi.analogRead(light_sensor)

 

        # PWM-Ausgabe an LED übertragen

        grovepi.analogWrite(led,light_intensity/4)

 

        # Lautstärke lesen

        sound_level = grovepi.analogRead(sound_sensor)

 

        # Tweet posten

        out_str ="%s Temp: %d C, Humidity: %d, Light: %d, Sound: %d" %(intro_str,t,h,light_intensity/10,sound_level)

        print (out_str)

        api.PostUpdate(out_str)

        time.sleep(60)

    except IOError:

        print("Error")

    except KeyboardInterrupt:

        exit()

    except:

        print("Duplicate Tweet or Twitter Refusal")

Listing 2: Mit einer Pi-Platine, Grove-Zusatzkomponenten und einer Grove-Softwarebibliothek können komplizierte Anwendungen schnell implementiert werden. Hier werden beispielsweise als Emulation eines Prozesses im Internet der Dinge Umgebungsdaten an einen Host-Dienst – in diesem Fall an Twitter – übergeben. (Codequelle: Dexter Industries)

# Analogen Wert vom Pin lesen

def analogRead(pin):

      write_i2c_block(address, aRead_cmd + [pin, unused, unused])

      read_i2c_byte(address)

      number = read_i2c_block(address)

      return number[1] * 256 + number[2]

Listing 3:  Die Grove-Software erledigt die auf Bit-Ebene erforderlichen Operationen zum Zugriff auf die Peripherie-Hardware. Dies erlaubt den Programmierern, mit intuitiven Aufrufen wie analogRead(pin) zu arbeiten. (Codequelle: Dexter Industries)

Vereinfachte Konfiguration

In der Vergangenheit stellte die Erweiterung eines Systems durch neue Hardware eine Herausforderung auf vielen Ebenen dar. Die Hardwareingenieure mussten geeignete mechanische und elektrische Schnittstellen entwickeln. Die Anwendungsentwickler mussten geeignete Softwarebibliotheken suchen, die eine zur Maximierung der Produktivität geeignete Abstraktionsebene boten. Mit dem Pi 3 und seinem Ökosystem bestehen diese Herausforderungen dank des 40-Pin-Steckverbinders nach Pi-Standard und der oben beschriebenen weit verbreiteten Softwarebibliotheken nicht mehr. Es geht noch weiter: die Pi-Architektur entbindet Entwickler von einer zusätzlichen Aufgabe: der Suche nach hardwarespezifischen Paketen zur Unterstützung von Platinen (Board-support packages, BSPs). BSPs bringen typischerweise den Low-Level-Code mit, der die Schnittstelle zwischen Betriebssystem und Zusatzhardware bildet.

Die Pi-Architektur macht die Installation und Konfiguration von BSPs für verschiedene Hardwarekomponenten für Pi-Anwender meist überflüssig. Stattdessen wird bei Pi-Systemen eine Gerätestruktur verwendet, die einen Mechanismus zum Laden von Modulen und Verwalten der Ressourcenzuweisung bietet, mit dem Konflikte zwischen verschiedenen Modulen vermieden werden, die dieselben Ressourcen benötigen. Wenn eine Hardwarekomponente spezielle Software benötigt, muss der Pi-Anwender nur einige Konfigurationsdaten festlegen. Der Kernel des Betriebssystems sucht und lädt die den einzelnen Hardwarekomponenten zugeordneten Module automatisch. Die I2C-Funktionalität eines Pi-Systems ist z. B. standardmäßig deaktiviert. Entwickler müssen nur die Konfigurationsdatei „config.txt“ bearbeiten und das Kommentarzeichen in der folgenden Zeile entfernen:

#dtparam=i2c_arm=on

Auf der Pi-Plattform wird dieser Schritt noch weiter vereinfacht. Wenn Raspbian zum ersten Mal hochgefahren wird, wird ein Konfigurationsprogramm ausgeführt, das dem Benutzer ein Menü mit Konfigurationselementen präsentiert. Dort können verschiedene Schnittstellen aktiviert werden.

Bibliotheken für Hochsprachen, z. B. die oben erwähnten, machen für Entwickler von Anwendungen, die I2C-basierte Hardware benötigen, das Codieren auf der Ebene von I2C-Transaktionen überflüssig. Wenn Code für spezielle I2C-Operationen entwickelt werden muss, kann Software wie die I2C-Tools für Linux direkt oder als Beispiel für spezifische I2C-Software verwendet werden.

Eingebetteter Pi

Für Entwickler, die Pi-Systeme in Produkte einbetten möchten, stellt der kürzlich angekündigte CM3 eine kompakte Drop-in-Lösung dar (Abbildung 5). Der CM3 verfügt über denselben Quad-Core-Prozessor wie der Pi 3 und bietet dieselben Features und Funktionen wie letzterer. Darüber hinaus hat der CM3 4 Gigabyte eMMC-Flash an Bord: andere Pi-Platinen haben einen Einschub für Mikro-SD-Karten, in den externe Karten mit Flash-Speicher eingesetzt werden können. (Raspberry Pi bietet auch den CM3L an – eine „Light“-Version des CM3, dem nur der On-Board-Flash-Speicher fehlt.)

Bild des Raspberry Pi Compute Module 3 (CM3)

Abbildung 5: Der Raspberry Pi Compute Module 3 (CM3) hat die geringen Abmessungen des Pi Zero und die Leistung des Pi 3 und stellt dabei mehr Pins als jedes dieser Modelle zur Verfügung. Er verfügt auch über ein 4-GB-Flash-Modul (auf der Rückseite der Platine). (Bildquelle: Raspberry Pi Foundation)

Der CM3 rückt von der beim Pi 3 und Pi Zero vorhandenen 40-Pin-E/A-Schnittstelle ab. Stattdessen stellt der CM3 seine erweiterte Schnittstelle als 200-pin SODIMM-Steckverbinder (Small Outline Dual In-line Memory Module) am Rand der Platine bereit (Abbildung 6). Tatsächlich ist die ganze CM3-Platine mit dem DDR2-SODIMM-Formfaktor kompatibel, sodass Entwickler den CM3 über einen Standard-DDR2-SODIMM-Steckverbinder an das Zielsystem anschließen können.

Diagramm des Raspberry Pi CM3

Abbildung 6: Der Raspberry Pi CM3 geht über die 40-Pin-Schnittstelle der andere Pi-Platinen hinaus und hat stattdessen einen 200-Pin-Anschluss, an dem Pins des Prozessors und anderer Komponenten herausgeführt werden. (Bildquelle: Raspberry Pi Foundation)

Entwickler können ihre Arbeit vereinfachen, indem sie das CM3-Entwicklungs-Kit für den Raspberry Pi einsetzen, das ein CM3-Modul mit der Compute-Module-IO-Platine für den Raspberry Pi verbindet. Die E/A-Platine ist eine einfache Open-Source-Platine mit einem DDR2-SODIMM-Steckverbinder für den CM3 und Steckleisten, die die 200-Pin-CM3-Schnittstelle nach außen führen (Abbildung 7). Darüber hinaus bietet die E/A-Platine Steckverbinder für die HDMI-, USB-, Kamera- und Display-Anschlüsse der Pi-3-Platine.

Bild der Compute-Module-IO-Platine für den Raspberry Pi

Abbildung 7: Die zum CM3-Entwicklungskit gehörende Compute-Module-IO-Platine für den Raspberry Pi bietet einen DDR2-SODIMM-Steckverbinder für den CM3 sowie Steckleisten für die 200-Pin-CM3-Schnittstelle und Steckverbinder für HDMI-, USB-, Kamera- und Display-Anschlüsse. (Bildquelle: Raspberry Pi Foundation)

Echtzeitanwendungen

Der CM3 verbindet hohe Leistung und geringe Abmessungen und eignet sich damit auch als eingebettetes System in Elektronikprodukten wie Fernsehern, Audio-Equipment und ähnlichen Verbraucherprodukten. Bei Echtzeitanwendungen müssen die Entwickler allerdings Einschränkungen der Pi-Plattform berücksichtigen.

So gibt es in Pi-Systemen z. B. keine Echtzeituhr (RTC). Auch verfügen Cores wie der im Pi-3 und CM3 eingesetzte Cortex-A53 (bzw. der im Pi Zero eingesetzte ARM1176) nicht über Features wie den SysTick-Systemtimer, die für zeitgesteuerte Ereignisse wie zeitgesteuertes Auslesen von Sensoren benötigt werden. SysTick-Timer sind wichtige Features von Cores wie ARM-Cortex-M, die speziell für deterministische Echtzeitanwendungen konzipiert wurden.

Dieser Mangel kann leicht durch den Einsatz eines Präzisions-RTC-ICs, z. B. des DS3231 von Maxim Integrated, beseitigt werden. Der RTC-IC DS3231 bietet eine Genauigkeit von ±2 ppm über den gesamten Temperaturbereich. Er generiert Rechteckwellen, mit denen Software-Systemtimer betrieben werden können. Darüber hinaus bietet er eine einfache I2C-Schnittstelle zum Auslesen von Echtzeitzählern. Entwickler können die RTC-Daten mithilfe von C-Routinen auf Grundlage des oben erwähnten I2C-Toolkits in ihre Echtzeitanwendungen integrieren.

Eine weitere Einschränkung des Standard-Pi-Systems für Echtzeitanwendungen liegt innerhalb des Betriebssystems selbst. Normale Linux-Distributionen sind für allgemeine Anwendungen bestimmt und bieten nicht die für eine zuverlässige Überwachung und Steuerung von Echtzeitprozessen erforderliche deterministische Reaktion. Im Standard-Betriebsmodus von Linux ist es möglich, dass selbst ein Thread sehr hoher Priorität den Kernel nicht unterbrechen kann. Daher muss selbst eine „Echtzeit“-Routine hoher Priorität, die versucht, Sensoren, Motorsteuerungen und Ähnliches auszulesen, möglicherweise für eine unbestimmte Dauer warten.

Glücklicherweise enthält der Linux-Kernel die Konfigurationsoption CONFIG_PREEMPT, die diese Einschränkung umgeht. Diese Option ermöglicht es Routinen hoher Priorität, den Kernel zu unterbrechen – außer unter besonderen Umständen, z. B. wenn der Kernel einen Thread im „Spinlock“ ausführt (blockiertes Warten auf eine Ressource). In der Praxis sind weitere Schritte außer der Änderung dieses Konfigurationselements erforderlich, um sicherzustellen, dass der Kernel unterbrochen werden kann. Die Open-Source-Community hat die Konvertierung von Linux in einen vollständig unterbrechbaren Kernel durch Herausgabe des Patch-Sets CONFIG_PREEMPT_RT formalisiert. Diese einfache und direkte Patch-Prozedur wurde dank der gut dokumentierten von der Raspberry Pi Foundation und den Mitgliedern der Pi-Community bereitgestellten Prozeduren zur Routine.

Fazit

Trotz des Interesses an der schwer erhältlichen Raspberry-Pi-Zero-Platine bieten Raspberry Pi 3 und CM3 eine attraktivere Plattform für das Erstellen von Hochleistungssystemen. Sowohl Pi 3 als auch CM3 bieten einen Quad-Core-Prozessor und doppelt so viel Onboard-RAM wie der Single-Core-Pi-Zero.

Der Pi 3 bietet seinerseits eine leistungsfähigere Computergrundlage für den Einsatz des breiten Spektrums von verfügbaren Zusatzplatinen, die zur 40-Pin-GPIO-Schnittstelle nach Pi-Standard kompatibel sind. Mit dem CM3 verfügen die Entwickler über eine Computergrundlage, die einerseits die geringen Abmessungen des Pi Zero und zum anderen die Leistungsvorteile des Pi 3 bietet. Mit den neuesten Pi-Platinen, Hardware-Add-ons und weitverbreiteten Softwarebibliotheken können schnell spezifische Systeme mit den verschiedensten Anwendungsanforderungen implementiert 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 Verlag

Nordamerikanische Fachredakteure von Digi-Key