Microcontroller

Übungsaufgaben zum I²C-Bus: Adressen, Peripheriebausteine und Oszillogramme

Drei Übungsaufgaben zum I²C-Bus am Mikrocontroller: I²C-Adressen aus Datenblatt und Schalterstellung bestimmen, digitale Temperatursensoren auswerten und weitere Sensoren einbinden, eine Port-Erweiterung ansteuern und Austauschvarianten beurteilen sowie die Adresse eines D/A-Umsetzers aus einem Oszillogramm ablesen. Zu jeder Teilaufgabe lässt sich eine Beispiellösung einblenden.

Mikrocontroller: Wiederholung und Übungsaufgaben

Wiederholung und Übungsaufgaben zur Mikrocontroller-Hardware – von Speicher und Takt über Ein- und Ausgangsbeschaltung, Analogeingang, Timer und PWM bis zu Watchdog und Stromlaufplan. Du berechnest Vorwiderstände, Basiswiderstände, Spannungsteiler für 24-V-Signale, Umsetzwerte, PWM-Frequenzen und Timer-Vergleichswerte und analysierst zum Schluss den Stromlaufplan einer temperaturabhängigen Lüftersteuerung. Zu jeder der 19 Aufgaben lässt sich eine Beispiellösung einblenden.

Übungsaufgaben zur Zeitsteuerung mit millis() und zu Zustandsautomaten auf dem Mikrocontroller

Zwei Übungsaufgaben zur Zeitsteuerung auf Mikrocontrollern: Für einen Klimaregler im Gewächshaus baust Du ein Pumpenprogramm mit delay() in ein nicht blockierendes Programm mit millis() um und beurteilst, ob ein Vergleich den Überlauf übersteht. Für die Lichtanlage eines Lastenrads verfolgst Du ein UML-Zustandsdiagramm Schritt für Schritt und setzt es als Zustandsautomaten mit enum, switch und millis() um. Zu jeder Teilaufgabe lässt sich eine Beispiellösung einblenden.

Zeit ohne delay(): millis(), nicht blockierende Abläufe und Zustandsautomaten auf dem Mikrocontroller

Warum delay() das ganze Programm anhält und wie Du mit millis() und micros() Abläufe programmierst, die nicht blockieren: Blinken ohne delay(), mehrere LEDs mit unterschiedlichem Takt und eine Tasterabfrage gleichzeitig, Entprellen mit einer Stoppuhr und der Überlauf von millis() nach knapp 50 Tagen, den die Differenz millis() – start sicher übersteht. Zum Schluss wird eine Ampel zum Zustandsautomaten mit enum und switch, dargestellt als UML-Zustandsdiagramm. Für ESP32-C6, ESP32, ESP8266 (NodeMCU) und Arduino Uno.

Übungsaufgaben zu Zeichenketten auf dem Mikrocontroller

Drei Übungsaufgaben zu Zeichenketten auf Mikrocontrollern: Für das Prüffeld eines Bodenfeuchte-Loggers sagst Du vorher, welche Zeilen ein Prüfprogramm aus char-Arrays und String-Methoden ausgibt. Für die Signalleuchte an einem Flurmonitor zerlegst Du serielle Befehle und schreibst den Befehlsinterpreter. In der Serviceschnittstelle eines Klimareglers findest und behebst Du Pufferüberläufe. Zu jeder Teilaufgabe lässt sich eine Beispiellösung einblenden.

Zeichenketten auf dem Mikrocontroller: char-Arrays, String-Klasse, F()-Makro und serielle Befehle

Ein Mikrocontroller soll Messwerte als lesbare Zeile ausgeben und Befehle wie „LED AN“ oder „BLINK 500“ aus dem seriellen Monitor verstehen. Dafür braucht er Zeichenketten. Dieser Artikel zeigt die beiden Wege in C++: das char-Array mit Nullterminator und die Arduino-Klasse String, mit ihren wichtigsten Funktionen, Vor- und Nachteilen. Dazu kommen das F()-Makro gegen knappen RAM auf dem Uno, formatierte Messwertzeilen mit snprintf() und dtostrf() und das Zerlegen von Eingaben in Befehl, Zahl und CSV-Felder. Für ESP32-C6, ESP32, ESP8266 (NodeMCU) und Arduino Uno.

Übungsaufgaben zu Wiederholungsstrukturen auf dem Mikrocontroller

Drei Übungsaufgaben zu Wiederholungsstrukturen auf Mikrocontrollern: an kurzen Programmausschnitten für ein Abfahrtssignal die Durchläufe von for-, while- und do-while-Schleifen bestimmen, für einen Klimaregler ein Lauflicht hin und zurück als Struktogramm entwerfen und programmieren, und im Prüffeld eine Messreihe mit Abbruchbedingungen, break und continue schreiben – samt der Frage, warum eine leere Warteschleife den ESP8266 neu starten lässt. Zu jeder Teilaufgabe lässt sich eine Beispiellösung einblenden.

Wiederholungsstrukturen auf dem Mikrocontroller: loop(), for, while, do-while, break und continue

Wie ein Mikrocontroller-Programm Anweisungen wiederholt: loop() als Endlosschleife, die Zählschleife for für Blinkfolgen und ein Lauflicht, die kopfgesteuerte while-Schleife zum Warten auf einen Tastendruck und die fußgesteuerte do-while-Schleife, dazu break und continue. Außerdem: Warum eine blockierende Warteschleife den ESP8266 neu starten lässt (Watchdog, yield()) und wie Du Schleifen als Struktogramm und Aktivitätsdiagramm darstellst. Für ESP32-C6, ESP32, ESP8266 (NodeMCU) und Arduino Uno.

Übungsaufgaben zu Variablen, Konstanten und Datentypen auf Mikrocontrollern

Drei Übungsaufgaben zu Variablen und Datentypen auf Mikrocontrollern: für die Messgrößen eines Loggers passende Datentypen wählen und den Speicherbedarf berechnen, in einer Füllstandsanzeige Überlauf, Ganzzahldivision und einen zu kleinen Zeittyp finden und beheben, und ein Anzeigeprogramm mit Zahlen im Code auf eine Liste der Ein- und Ausgabeelemente und Konstanten umstellen. Zu jeder Teilaufgabe lässt sich eine Beispiellösung einblenden.

Variablen, Konstanten und Datentypen auf 8- und 32-Bit-Mikrocontrollern

Wie Du Variablen anlegst und Werte zuweist, warum Pins als Konstanten in die Liste der Ein- und Ausgabeelemente gehören und wie sich const, #define und constexpr unterscheiden. Dazu: welcher Datentyp wie viel Speicher braucht, warum int auf dem Arduino Uno nur 16 Bit hat und auf den ESP-Boards 32 Bit, wie Überlauf, Ganzzahldivision und Typumwandlung zu falschen Ergebnissen führen und wo eine Variable gilt (global, lokal, static). Für ESP32-C6, ESP32, ESP8266 (NodeMCU) und Arduino Uno.

Sensoren für das Raumklima: BME280/BMP280 per I²C und SPI, CO₂-Sensoren MH-Z19 und MH-Z14A per UART, PWM und Analogausgang

Zwei Sensorfamilien tauchen in fast jedem Raumklima-Projekt auf: die Bosch-Sensoren BME280 und BMP280 für Temperatur, Luftdruck und (nur BME280) Luftfeuchte und die NDIR-CO₂-Sensoren MH-Z19 und MH-Z14A von Winsen. Der Artikel zeigt, wie Du den Sensor auf dem Breakout erkennst, die passende Bibliothek installierst, den BME280 per I²C und per SPI anschließt und den CO₂-Gehalt per UART, PWM und Analogausgang ausliest – mit vollständigen Programmen für ESP32-C6, ESP32, ESP8266 (NodeMCU) und Arduino Uno und den typischen Fehlerquellen.

Übungsaufgaben zu Registern und Bitoperationen: Ports, Bitmasken, Datenbytes und Grenzwerte

Zwei Übungsaufgaben zu Registern und Bitoperationen – von Datenbytes an einem Portexpander, Grenzströmen und Verlustleistung aus einem englischen Datenblatt und der Erweiterung um einen zweiten Expander bis zu Portbits, Bitmasken, Registercode und Statusbits eines Prüfadapters auf dem Arduino Uno und seiner Umstellung auf die Arduino-Funktionen. Zu jeder Teilaufgabe lässt sich eine Beispiellösung einblenden.

Register und Bitoperationen: Ports, DDR, PORT und PIN, Bitmasken und was digitalWrite() intern tut

digitalWrite() schaltet einen Pin – aber was passiert dabei im Controller? Am Arduino Uno mit dem ATmega328P zeigt dieser Artikel, wie Du Ports und Portleitungen in Anschlussbelegung und Stromlaufplan findest, mit DDRx, PORTx und PINx Pins einstellst, schaltest und liest, Bits mit Masken setzt, löschst, umschaltest und abfragst, Datenbytes an Portbausteinen auswertest und was digitalWrite() intern tut. Dazu kommen ein Laufzeitvergleich mit dem direkten Registerzugriff, Grenzwerte aus dem Datenblatt, das Erweitern einer Schaltung und die GPIO-Register der ESP-Controller.

Übungsaufgaben zur analogen Ausgabe mit PWM

Drei Übungsaufgaben zur analogen Ausgabe mit PWM: Du wertest das Oszillogramm und die Timer-Einstellungen einer dimmbaren Leuchte aus, berechnest Tastgrad, Leistung, Auflösung und gammakorrigierte Helligkeitsstufen für eine Pflanzenleuchte und programmierst eine „atmende“ Ladeanzeige mit millis() und Gammakorrektur. Zu jeder Teilaufgabe lässt sich eine Beispiellösung einblenden.

Analoge Ausgabe mit PWM: LED dimmen, Tastgrad und Frequenz, Lüfter und Lauflicht mit Überblendung

Ein digitaler Pin kennt nur an und aus – trotzdem kann er eine LED dimmen und einen Lüfter langsamer drehen lassen. Dieser Artikel erklärt die Pulsweitenmodulation mit Tastgrad, Periodendauer und Frequenz, zeigt, wie Du diese Größen aus einem Oszillogramm abliest, und dimmt eine LED mit analogWrite() und einem Poti. Danach passt Du die Helligkeit mit einer Gammakorrektur an das Auge an, wählst auf den ESP32-Boards mit ledcAttach() Frequenz und Auflösung, steuerst einen Lüfter über einen MOSFET, baust ein Lauflicht mit Überblendung und grenzt PWM von einem echten Analogausgang ab.

Übungsaufgaben zum Projekt Simon Says

Drei Übungsaufgaben zum Projekt Simon Says: Für eine Messe-Spielstation baust Du nach geändertem Pflichtenheft eine Schwierigkeitsstufe per Poti ein, für die Spielstation am Tag der offenen Tür formulierst Du Testfälle und findest zwei Fehler im Quelltext, und für den Akkubetrieb planst Du Hard- und Softwareänderungen samt Energiebilanz. Zu jeder Teilaufgabe lässt sich eine Beispiellösung einblenden.

Projekt Simon Says: Mikrocontroller-Grundlagen zusammenführen und nach Pflichtenheft erweitern

Ein Merkspiel mit vier LEDs, vier Tastern und einem Summer führt die Grundlagen der Reihe zusammen: Aus Lastenheft und Pflichtenheft entsteht ein Zustandsautomat, Arrays verbinden LEDs, Taster und Töne, Zufallszahlen erzeugen die Folge, entprellte Taster und millis() prüfen die Eingabe, Level und Highscore zählen mit. Danach testest Du das Programm gegen das Pflichtenheft und planst eine kundenspezifische Erweiterung mit Hard- und Softwareänderungen und Energiebilanz. Für ESP32-C6, ESP32, ESP8266 (NodeMCU) und Arduino Uno.

Interrupts, Timer und PWM im Datenblatt: Interruptquellen, Flags, Flanken, Timer-Modi und PWM-Register

attachInterrupt(), millis() und analogWrite() verstecken, was im Controller passiert: Bits in Steuerregistern wählen Interruptquelle, Flanke, Timer-Modus und PWM-Ausgang. Am Arduino Uno (ATmega328P) findest Du Interruptquellen mit Flags und Freigabebits im Datenblatt, bestimmst die Auslösung aus einem englischen Registerauszug, berechnest Zähltakt und Vergleichstreffer eines Timers, stellst eine Zeitbasis im CTC-Modus ein und gibst ein Fast-PWM-Signal über die Register aus. Zum Schluss ordnest Du ein, welche Timer die Arduino-Funktionen belegen und wie die ESP-Controller das lösen.

Übungsaufgaben zu Interrupts auf dem Mikrocontroller

Zwei Übungsaufgaben zu Interrupts auf Mikrocontrollern: Im Programm für den Durchflusssensor einer Bewässerung findest Du die Verstöße gegen die Regeln für Interrupt-Service-Routinen, beschreibst ihre Folgen und korrigierst das Programm. Für den Tacho eines Lastenrads berechnest Du Geschwindigkeit, Impulsabstand und Auflösung aus gezählten Impulsen und programmierst die Messung mit einem Interrupt. Zu jeder Teilaufgabe lässt sich eine Beispiellösung einblenden.

Interrupts auf dem Mikrocontroller: Polling oder Interrupt, attachInterrupt(), Regeln für die ISR und Timer-Interrupts

Was eine signalgesteuerte Programmunterbrechung ist, warum ein Interrupt kurze Ereignisse zuverlässiger erfasst als ständiges Abfragen (Polling) und was zwischen Anforderung und Rücksprung passiert. Danach setzt Du Interrupts mit attachInterrupt() ein: für einen Stopp-Taster, einen Impulszähler für die Raddrehzahl und einen entprellten Taster. Du lernst die Regeln für die Interrupt-Service-Routine (kurz, kein delay() und kein Serial, volatile, atomarer Zugriff, IRAM_ATTR) und lässt eine LED per Timer-Interrupt blinken. Für ESP32-C6, ESP32, ESP8266 (NodeMCU) und Arduino Uno.

Übungsaufgaben zu eigenen Funktionen auf dem Mikrocontroller

Vier Übungsaufgaben zu eigenen Funktionen auf Mikrocontrollern: Für die Unterstützungsstufe eines Lastenrads bestimmst Du Rückgabewerte und die Wirkung von Referenzen und static. Für das Bedienteil eines Klimareglers lagerst Du wiederholten Code in eine Funktion aus, für eine Akkuanzeige implementierst Du Funktionen nach vorgegebener Signatur und teilst sie in ein Modul auf, und eine Bewässerungssteuerung erweiterst Du nach Pflichtenheft mit Funktionen und Energiesparbetrieb. Zu jeder Teilaufgabe lässt sich eine Beispiellösung einblenden.

Eigene Funktionen auf dem Mikrocontroller: Parameter, Rückgabewert, Gültigkeitsbereich und Aufteilen in .h/.cpp

Wenn derselbe Code an drei Stellen steht, muss jede Änderung dreimal gemacht werden. Eigene Funktionen geben einer Teilaufgabe einen Namen, bekommen Werte über Parameter und liefern ein Ergebnis zurück. Dieser Artikel zeigt, wie Du Funktionen mit Parametern und Rückgabewert schreibst, Wert- und Referenzparameter unterscheidest, die Gültigkeit lokaler, globaler und static-Variablen einordnest, eine Ampel aus einem Programmentwurf in Funktionen gliederst, Prototypen verstehst und ein Programm auf .h- und .cpp-Dateien aufteilst. Für ESP32-C6, ESP32, ESP8266 (NodeMCU) und Arduino Uno.

Übungsaufgaben zum Debuggen von Mikrocontroller-Programmen

Drei Übungsaufgaben zum Debuggen von Mikrocontroller-Programmen: Für die Lüftersteuerung eines Gewächshauses grenzt Du einen Syntax- und einen Logikfehler mit Debug-Ausgaben ein und bereitest die Werte für den seriellen Plotter auf. Für einen Meldetaster schaltest Du Debug-Ausgaben über Makros ab und filterst sie nach Log-Level, und in einer Füllstandsmessung suchst Du Fehler mit Breakpoint und Einzelschritt. Zu jeder Teilaufgabe lässt sich eine Beispiellösung einblenden.

Debuggen von Mikrocontroller-Programmen: serieller Monitor und Plotter, Debug-Makros, Log-Level, Fehlerarten und Hardware-Debugger

Kein Programm läuft beim ersten Versuch fehlerfrei. Dieser Artikel zeigt, wie Du Syntax-, Linker-, Laufzeit- und Logikfehler unterscheidest, Fehler mit Ausgaben im seriellen Monitor eingrenzt, Debug-Ausgaben über Makros ein- und ausschaltest und nach Log-Level filterst, Messwerte im seriellen Plotter als Kurve auswertest, mit dem Hardware-Debugger Haltepunkte setzt und Variablen beobachtest und die Absturzmeldungen des ESP liest. Dazu kommen Prozessabbild, Prüfadapter, Boundary-Scan und Code von KI-Assistenten. Für ESP32-C6, ESP32, ESP8266 (NodeMCU) und Arduino Uno.

Übungsaufgaben zu Bibliotheken auf dem Mikrocontroller

Zwei Übungsaufgaben zu Bibliotheken auf Mikrocontrollern: Für einen Blätter-Taster am Flurmonitor des Mitfahrlabors deutest Du Meldungen beim Einbinden einer Bibliothek und sagst die Ausgaben des Programms voraus. Für den Bodenfeuchte-Logger von Blattwerk machst Du aus Funktionen eines Sketches eine eigene Bibliothek mit Header, Quelldatei, library.properties und keywords.txt. Zu jeder Teilaufgabe lässt sich eine Beispiellösung einblenden.

Bibliotheken auf dem Mikrocontroller einbinden: Bibliotheksverwalter, ZIP, Beispiele, Plattformunterschiede und eigene Bibliothek

Für fast jeden Sensor, jede Anzeige und jedes Protokoll hat schon jemand Code geschrieben und als Bibliothek veröffentlicht. Dieser Artikel zeigt, wie Du Bibliotheken über den Bibliotheksverwalter, als ZIP-Datei und aus einem Git-Repository installierst, #include <…> und #include „…“ unterscheidest, Fehlermeldungen wie „No such file or directory“ deutest, Beispielprogramme an Dein Board anpasst, Plattformunterschiede, Versionen, Lizenz und Pflegezustand beurteilst und aus einem eigenen Modul eine Bibliothek machst. Für ESP32-C6, ESP32, ESP8266 (NodeMCU) und Arduino Uno.

Übungsaufgaben zu bedingten Anweisungen auf dem Mikrocontroller

Drei Übungsaufgaben zu bedingten Anweisungen auf Mikrocontrollern: zu einer Klappensteuerung die Wahrheitstabelle aufstellen und die Wirkung fehlender Klammern erklären, eine Pumpensteuerung mit Betriebsarten und Trockenlaufschutz als Aktivitätsdiagramm entwerfen und programmieren, und in der Stufenwahl einer E-Bike-Bedieneinheit vier typische Fehler in Bedingungen finden und beheben. Zu jeder Teilaufgabe lässt sich eine Beispiellösung einblenden.

Bedingte Anweisungen auf dem Mikrocontroller: if, else, switch und logische Operatoren

Wie ein Mikrocontroller-Programm Entscheidungen trifft: Vergleichsoperatoren und Wahrheitswerte, if, if-else und else if, die Logikoperatoren &&, || und! mit Wahrheitstabelle, switch-case mit break für Betriebsarten, verschachtelte Bedingungen vereinfachen, der ternäre Operator und eine Schwellwertüberwachung mit Hysterese. Dazu die typischen Fehler = statt == und das vergessene break und wie Du Bedingungen als Aktivitätsdiagramm oder Struktogramm darstellst. Für ESP32-C6, ESP32, ESP8266 (NodeMCU) und Arduino Uno.

Übungsaufgaben zum Aufbau eines Mikrocontrollers: Bussystem, Register, Stack, Takt, Reset und Watchdog

Vier Übungsaufgaben zum Aufbau eines Mikrocontrollers – von Reset-Beschaltung, Power-on-Reset und Echtzeituhr mit Batteriepufferung über Busse, Adressleitungen, Wortbreite und Multiplexbus, Programmzähler, Statusregister und Stack bei Unterprogrammaufrufen bis zu Taktquellen, Quarz- und RC-Oszillator-Dimensionierung, Watchdog, Programmierschnittstelle und englischen Datenblattangaben. Zu jeder Teilaufgabe lässt sich eine Beispiellösung einblenden.

Aufbau eines Mikrocontrollers: Bussystem, Register, Stack, Takt, Reset und Watchdog

Ein Mikrocontroller vereint CPU, Speicher und Ein-/Ausgabe auf einem Chip. Dieser Artikel zeigt Schritt für Schritt, wie die Baugruppen über Adress-, Daten- und Steuerbus zusammenarbeiten, was Programmzähler, Statusregister und Stack tun, wie Du Taktquelle, Quarzbeschaltung und Reset-Schaltung auswählst und dimensionierst, wozu Watchdog und Echtzeituhr dienen, wie ein Controller in der Schaltung programmiert wird und wie Du englische Datenblätter auswertest – mit dem ATmega328P des Arduino Uno als Leitbeispiel und dem ESP32-C6 zum Vergleich.