Übungsaufgaben zu SPI: Sensoren mit eigener Auswahlleitung anbinden
https://bildung.social/@oerinformatik/
https://oer-informatik.de/spi-bus-uebungsaufgaben
SPI, Serial Peripheral Interface, Chip Select, SPI-Modus, Steuerbyte, Beschleunigungssensor, ESP32, I²C, Übungsaufgaben, Prüfungsvorbereitung
tl/dr; (ca. 20 min Lese- und Bearbeitungszeit): Eine Übungsaufgabe zu SPI am Mikrocontroller: Du begründest, warum drei gleiche Sensoren nicht an einen I²C-Bus passen, verdrahtest sie mit eigenen Auswahlleitungen am SPI-Bus eines ESP32, deutest den SPI-Modus, bildest Steuerbytes aus dem Datenblatt, berechnest Zugriffsdauer und Busbelegung und planst den Anschluss eines weiteren Sensors über I²C. Zu jeder Teilaufgabe lässt sich eine Beispiellösung einblenden [AI-Assisted]. (Zuletzt geändert am 11.11.2026)
Diese Übungsaufgaben gehören zum Artikel SPI: Schnell, einfach, mit eigener Leitung für jedes Gerät. Wie Zahlen zwischen dual und hexadezimal umgerechnet werden, zeigt der Artikel Zahlensysteme und Codes. Aufgaben zu den anderen seriellen Schnittstellen findest Du unter Übungsaufgaben zum I²C-Bus und Übungsaufgaben zu UART und RS-232.
Hinweise zur Bearbeitung: Als EGS oder IEGS musst Du zur Teil-2- bzw. Abschlussprüfung Aufgaben auf Kernkompetenz-Ebene lösen können, das ist Aufgabe 2.1. Die Beispiellösungen sind immer gleich aufgebaut: Unter Geg. steht, was gegeben ist (bei mehreren Teilaufgaben gemeinsam in der ersten), unter Ges., was gesucht ist. Jede Formel steht zuerst in ihrer Grundform; Umstellungen sind Äquivalenzumformungen, deren Rechenschritt grau rechts neben dem senkrechten Strich steht (Division mit „:“). Einfache Formeln werden römisch nummeriert und ineinander eingesetzt („I in II“), längere Rechnungen nacheinander mit drei signifikanten Stellen. Ergebnisse stehen mit drei signifikanten Stellen doppelt unterstrichen, gerundete mit \approx; wurde mit gerundeten Zwischenergebnissen gerechnet, steht das Ergebnis ohne Rundung darunter. Rechne selbst ebenso mit Formel, eingesetzten Werten und Einheit. Hexadezimalzahlen sind mit 0x gekennzeichnet, I²C-Adressen sind 7-Bit-Adressen, wenn nicht ausdrücklich „Adressbyte“, „Schreibadresse“ oder „Leseadresse“ dasteht. Bei „nennen“ genügen Stichworte, bei „beschreiben“, „erläutern“ und „begründen“ antwortest Du in ganzen Sätzen. Schreib Deine Lösung zuerst vollständig auf, bevor Du die Beispiellösung einblendest.
Du möchtest eigene Aufgaben zum Üben von einem KI-Sprachmodell generieren lassen?
Kopiere den Text in ein KI-Sprachmodell Deiner Wahl und passe Kompetenzstufe, Anzahl, Bearbeitungszeit und Szenario bei Bedarf an. Wie die Aufgaben aufgebaut sind, beschreibt der Artikel Wie sind die Aufgaben aufgebaut?. Prüfe die Ergebnisse mit dem Lehrartikel: KI-Sprachmodelle machen Fehler.
Erstelle neue Übungsaufgaben zum Thema „SPI: Sensoren mit eigener
Auswahlleitung anbinden“.
Bauplan: Halte Dich an Aufbau, Kompetenzstufen, Operatoren,
Anforderungsbereiche, Punkte und Zeitschätzung, die im Artikel
https://oer-informatik.de/aufgaben-aufbau beschrieben sind.
Fachliche Grundlage:
- https://oer-informatik.de/spi-bus
- https://oer-informatik.de/zahlensysteme-codes
- https://oer-informatik.de/mcu-aufbau
- Stilbeispiel: https://oer-informatik.de/spi-bus-uebungsaufgaben
Die Aufgaben sollen Inhalte zu diesen Schlagwörtern abdecken:
- SPI
- Serial Peripheral Interface
- Chip Select
- SPI-Modus
- Steuerbyte
- Beschleunigungssensor
- ESP32
- I²C
Kompetenzstufe: Kernkompetenz (alternativ: Basiskompetenz, Profilkompetenz, Expertise)
Anzahl: 1 Aufgabe mit Teilaufgaben
Bearbeitungszeit in Minuten ca.: <5 bis 30 min>
Szenario: eines der Szenarien aus dem Bauplan
Vorgehen:
1. Lies zuerst die verlinkten Artikel. Kannst Du keine Webseiten
abrufen, sag mir das, statt zu raten.
2. Steht bei einer Angabe noch ein Platzhalter in <…>, frag mich
zuerst danach. Richte Punkte und Zahl der Teilaufgaben nach der
Bearbeitungszeit (ca. 0,9 min je Punkt).
3. Gib je Aufgabe Titel mit Kompetenzstufe, Ausgangssituation und
Teilaufgaben mit Operator und Punktzahl aus, dazu die geschätzte
Bearbeitungszeit.
4. Gib die Beispiellösungen mit Punkteverteilung erst aus, wenn ich
danach frage.
Aufgabe 2.1: Schwingungsüberwachung mit drei Beschleunigungssensoren (Kernkompetenz)
In einer Werkhalle sollen die Lagerschwingungen von drei Abluftventilatoren überwacht werden. Ein ESP32 (3,3 V) liest dazu drei Beschleunigungssensoren ADXL345 aus, die auf kleinen Modulen sitzen. Die Module führen die Anschlüsse VCC, GND, CS, SDO, SDA und SCL heraus. Auszug aus dem Datenblatt des ADXL345:
- Schnittstellen I²C und SPI (4-Draht). Liegt CS fest an der Versorgung, arbeitet der Sensor als I²C-Baustein; wird CS vom Controller angesteuert, arbeitet er mit SPI. Im SPI-Betrieb ist SCL der Takteingang (SCLK), SDA der Dateneingang (SDI) und SDO der Datenausgang.
- I²C-Adresse 0x53, wenn der Pin ALT ADDRESS (am Modul der Anschluss SDO) an GND liegt, und 0x1D, wenn er an der Versorgung liegt.
- SPI: höchstens 5 MHz Takt, Modus 3 (CPOL = 1, CPHA = 1), höchstwertiges Bit zuerst.
- Erstes Byte jedes SPI-Zugriffs (Steuerbyte): Bit 7 = R/W (1 = Lesen), Bit 6 = MB (1 = mehrere Bytes nacheinander), Bits 5 bis 0 = Registeradresse.
- Register 0x2D (POWER_CTL): Der Wert 0x08 startet die Messung. Register 0x32 bis 0x37 (DATAX0 bis DATAZ1): Beschleunigung der drei Achsen, je zwei Byte.
Die SPI-Leitungen liegen an den Standardpins des ESP32 (SCK an GPIO18, MISO an GPIO19, MOSI an GPIO23); für die Auswahl der Sensoren sind GPIO5, GPIO16 und GPIO17 vorgesehen.
a) Begründe, warum die drei Sensoren nicht gemeinsam an einem I²C-Bus betrieben werden können. (2 Punkte)
Geg.: drei ADXL345; I²C-Adresse 0x53 (ALT ADDRESS an GND) oder 0x1D (ALT ADDRESS an Versorgung)
Ges.: Begründung, warum drei Sensoren nicht an einem I²C-Bus arbeiten
Der ADXL345 hat nur einen Adresspin; damit gibt es nur die zwei Adressen 0x53 und 0x1D (1 Punkt). An einem I²C-Bus muss jeder Teilnehmer eine eigene Adresse haben, sonst antworten zwei Sensoren gleichzeitig. Es können also \underline{\underline{\text{höchstens zwei}}} ADXL345 an einem Bus betrieben werden; der dritte bräuchte einen zweiten I²C-Bus, einen I²C-Multiplexer – oder eben SPI, bei dem jeder Sensor über seine eigene CS-Leitung ausgewählt wird (1 Punkt).
b) Vervollständige die Verdrahtungstabelle für den SPI-Betrieb. Gib für jeden Modulanschluss seine Funktion an SPI und den Anschluss am ESP32 an. (6 Punkte)
| Modulanschluss | Funktion bei SPI | Anschluss am ESP32 |
|---|---|---|
| SCL | ||
| SDA | ||
| SDO | ||
| CS (Sensor 1, 2, 3) | ||
| VCC | ||
| GND |
Ges.: Funktion der Modulanschlüsse bei SPI und Anschluss am ESP32
Je richtiger Zelle 0,5 Punkte:
| Modulanschluss | Funktion bei SPI | Anschluss am ESP32 |
|---|---|---|
| SCL | Takteingang SCLK | SCK, GPIO18 (alle drei Sensoren parallel) |
| SDA | Dateneingang SDI | MOSI, GPIO23 (parallel) |
| SDO | Datenausgang | MISO, GPIO19 (parallel) |
| CS (Sensor 1, 2, 3) | Auswahl, aktiv LOW |
je eine eigene Leitung: GPIO5, GPIO16, GPIO17 |
| VCC | Versorgung | 3,3 V |
| GND | Masse | GND (gemeinsame Masse) |
Typischer Fehler: SDO an MOSI. SDO ist der Ausgang des Sensors und gehört an den Eingang des Controllers (MISO).
c) Erläutere, was die Angabe „Modus 3 (CPOL = 1, CPHA = 1)“ für den Takt und die Datenübernahme bedeutet, und nenne die Einstellungen, die Du im Programm für die SPI-Übertragung festlegen musst. (3 Punkte)
Ges.: Bedeutung von Modus 3, Einstellungen im Programm
- CPOL = 1: Der Takt SCK ruht auf
HIGH(0,5 Punkte). - CPHA = 1: Abgetastet wird an der zweiten Flanke nach dem Fallen von CS, also an jeder steigenden Flanke; an der fallenden Flanke legt der Sender das nächste Bit an (1 Punkt).
Im Programm festzulegen (je 0,5 Punkte): Takt höchstens 5 MHz, Bitreihenfolge MSB zuerst, SPI-Modus 3, z. B. SPI.beginTransaction(SPISettings(5000000, MSBFIRST, SPI_MODE3));. Dazu kommt, dass vor jedem Zugriff der richtige CS-Pin auf LOW und danach wieder auf HIGH gesetzt wird.
d) Ermittle die Bytes, die der ESP32 nach dem Fallen von CS über MOSI sendet,
da) um die Messung zu starten, (2 Punkte)
db) um die sechs Messwert-Bytes ab Register 0x32 in einem Zugriff zu lesen. (2 Punkte)
Geg.: Steuerbyte: Bit 7 R/W, Bit 6 MB, Bits 5–0 Registeradresse; POWER_CTL 0x2D, Startwert 0x08; DATAX0 0x32
Ges.: gesendete Bytes für da) und db)
da) Schreiben (R/W = 0) eines einzelnen Bytes (MB = 0) ins Register 0x2D: Steuerbyte 00\,101101_2 = 0\mathrm{x}2\mathrm{D} (1 Punkt), danach das Datenbyte. Gesendet werden \underline{\underline{0\mathrm{x}2\mathrm{D},\ 0\mathrm{x}08}} (1 Punkt).
db) Lesen (R/W = 1) mehrerer Bytes (MB = 1) ab Register 0x32 = 110010_2:
\text{Steuerbyte} = 1\,1\,110010_2 = 1111\ 0010_2 = 0\mathrm{xF}2
(1 Punkt). Danach sendet der ESP32 sechs beliebige Füllbytes (z. B. 0x00), während der Sensor DATAX0 bis DATAZ1 über SDO herausschiebt: \underline{\underline{0\mathrm{xF}2\ \text{und sechs Füllbytes}}} (1 Punkt). Ohne MB-Bit (0xB2) käme nur das erste Register.
e) Jeder Sensor wird 800-mal je Sekunde mit einem Zugriff wie in db) ausgelesen; der SPI-Takt beträgt 5 MHz. Berechne die Dauer eines Lesezugriffs und den Anteil der Zeit, in der der Bus mit den drei Sensoren belegt ist. Pausen zwischen den Zugriffen bleiben unberücksichtigt. (4 Punkte)
Geg.: n_\mathrm{Byte} = 1 + 6 = 7, f_\mathrm{SCK} = 5\ \mathrm{MHz}, 3 Sensoren mit je 800 Zugriffen je Sekunde
Ges.: Dauer t_\mathrm{Z} eines Zugriffs, Busbelegung a
\begin{aligned} &\text{(I)} && t_\mathrm{Z} = \dfrac{n_\mathrm{Takt}}{f_\mathrm{SCK}} \\ &\text{(II)} && n_\mathrm{Takt} = n_\mathrm{Byte} \cdot 8 \end{aligned}
II in I (2 Punkte):
t_\mathrm{Z} = \frac{n_\mathrm{Byte} \cdot 8}{f_\mathrm{SCK}} = \frac{7 \cdot 8}{5 \cdot 10^{6}\ \tfrac{1}{\mathrm{s}}} = \underline{\underline{11{,}2\ \mathrm{\mu s}}}
Belegung in einer Sekunde und Anteil (2 Punkte):
t_\mathrm{belegt} = 3 \cdot 800 \cdot 11{,}2\ \mathrm{\mu s} = 26{,}88\ \mathrm{ms} \approx 26{,}9\ \mathrm{ms}
a = \frac{t_\mathrm{belegt}}{1\ \mathrm{s}} = \frac{26{,}88\ \mathrm{ms}}{1000\ \mathrm{ms}} \approx \underline{\underline{2{,}69\ \%}}
Der Bus ist also nur zu einem kleinen Teil ausgelastet; Takt und Zahl der Sensoren lassen noch Reserven.
f) Für einen vierten Ventilator soll ein weiteres Modul später an den vorhandenen I²C-Bus des ESP32 angeschlossen werden, an dem schon ein Sensor mit der Adresse 0x1D hängt. Beschreibe die nötigen Änderungen an Beschaltung und Programm. (3 Punkte)
Geg.: vorhandener I²C-Teilnehmer 0x1D
Ges.: Änderungen an Beschaltung und Programm
Beschaltung (2 Punkte):
- CS des neuen Moduls fest an 3,3 V legen, damit der Sensor als I²C-Baustein arbeitet.
- SDA und SCL an die I²C-Leitungen des ESP32 anschließen; Pull-up-Widerstände sind am Bus nötig (auf dem Modul oder auf der Platine, nur einmal je Leitung in passender Größe).
- SDO (ALT ADDRESS) an GND legen, damit der Sensor die freie Adresse 0x53 erhält; 0x1D ist schon belegt.
Programm (1 Punkt): Zugriff über die I²C-Bibliothek (Wire) mit der Adresse \underline{\underline{0\mathrm{x}53}}: erst die Registeradresse schreiben, dann lesen. Das R/W- und das MB-Bit des SPI-Steuerbytes entfallen, die Richtung steckt im R/W-Bit des Adressbytes.
Links und weitere Informationen
zum Nachlesen: SPI: Schnell, einfach, mit eigener Leitung für jedes Gerät
weitere Übungsaufgaben zu seriellen Schnittstellen: Übungsaufgaben zum I²C-Bus, Übungsaufgaben zu UART und RS-232
zum Rechnen mit Dual- und Hexadezimalzahlen: Zahlensysteme und Codes
zum Aufbau des Mikrocontrollers: Aufbau eines Mikrocontrollers
als Nachschlagewerk: Analog Devices: ADXL345 – Datenblatt
Hinweis zur Nachnutzung als Open Educational Resource (OER)
Dieser Artikel und seine Texte, Bilder, Grafiken, Code und sonstiger Inhalt sind - sofern nicht anders angegeben - lizenziert unter CC BY 4.0. Nennung gemäß TULLU-Regel bitte wie folgt: “Übungsaufgaben zu SPI: Sensoren mit eigener Auswahlleitung anbinden” von oer-informatik.de (H. Stein), Lizenz: CC BY 4.0. Der Artikel wurde unter https://oer-informatik.de/spi-bus-uebungsaufgaben veröffentlicht, die Quelltexte sind in weiterverarbeitbarer Form verfügbar im Repository unter https://gitlab.com/oer-informatik/mcu/mcu-schnittstellen. Erstellt mit KI-Assistenz; von mir umfassend redaktionell überarbeitet, geprüft und freigegeben. Stand: 11.11.2026.
[Kommentare zum Artikel lesen, schreiben] / [Artikel teilen] / [gitlab-Issue zum Artikel schreiben]
