Entwickeln Sie auf dem Book Development Board oder einem anderen Board mit zwei Tastern ein Programm, das die grüne LED aufleuchten lässt. Schalten Sie nach einer zufälligen Zeit die LED dunkel.
Nun sind zwei Spieler gefordert, einer den linken und einer den rechten Knopf zu drücken. Die Spielerin, die zuerst gedrückt hat, hat gewonnen. Auf der LED-Matrix soll ein blauer Pfeil zur siegenden Spielerin zeigen.
Sollte ein Spieler zu früh drücken, hat dieser verloren. Dies soll auf der LED-Matrix mit einem roten Pfeil auf den jeweiligen Spieler angezeigt werden.
Durch einen Reset kann das Spiel nun neu gestartet werden.
Verwenden Sie zum Erkennen der Knopfdrücke Interrupts.
Erstellen Sie unter FreeRTOS einen Task, der die LED_PUSH im Sekundentakt blinken lässt. Ein zweiter Task soll die LED_PULL ebenso im Sekundentakt blinken lassen.
Implementieren Sie nun in einem dritten Task eine Behandlung der beiden Taster. Beim Drücken des linken Tasters (SW2BOOT) soll das Blinked der LED_PULL verlangsamt, beim Drücken des rechten Tasters (SW3APP) beschleunigt werden.
Die Lösung soll iterativ verbessert/geändert werden (Verwenden Sie bedingte Compilierung (#ifdef), um zwischen den Lösungen per menuconfig zu wechseln):
Verwenden Sie im ersten Ansatz globale Variable zur Übergabe des Tastendrucks
Im zweiten Ansatz soll die globale Variable über einen Semaphor geschützt und synchronisiert werden
Schließlich soll das Ereignis über eine FreeRTOS Queue zugestellt werden
Implementieren Sie die Sortierverfahren Selection Sort, Bubble Sort und Quicksort und führen Sie eine Geschwindigkeitsmessung durch. Verwenden Sie dafür mehrere Durchgänge in denen Sie Zufallsdaten erzeugen und diese jeweils mit den drei Verfahren sortieren.
Können Sie die in Sortierverfahren beschriebenen Aufwände bestätigen? Verwenden Sie die in Kapitel 3 beschriebene Instrumentierung zur Bestimmung der exakten Taktzyklenzahl.
Zur Erleichterung des Einstiegs gibt es ein „Book Development Board“, das sämtliche Komponenten integriert hat, die für die Beispiele verwendet werden. Das sind
Der Mikrocontroller ESP32-C3, mit USB-C Anschluss für JTAG-Debugging und serielle Log-Ausgaben
Spannungswandler von 5V (USB) auf 3,3V
Zwei Taster für Benutzerinteraktion (plus ein Reset-Taster)
Zwei gelbe LEDs an GPIOs, eine in Push-Konfiguration und eine in Pull-Konfiguration
25 dreifarbige WA2812b-LEDs mit eigenem Spannungswandler
Ein Potentiometer am ADC-Eingang
Eine Stiftleiste, um ein Modellbau-Servo per PWM anzuschließen
Stiftleisten zum Anschluss des Displays und des MAX3010x-Boards zum Aufbau eines Pulsoximeters
Ein Einschub für eine Mikro-SD-Karte
Eine Sockelleiste mit den seriellen RX und TX-Signalen
Ein RS-485 Transceiver nebst Stiftleiste für den Anschluss
Ein Temperatur-/Luftfeuchtesensor, angeschlossen über I2C (nicht im Buch beschrieben, als Zusatz)
Ein Beschleunigungssensor/Gyroskop, angeschlossen über SPI (nicht im Buch beschrieben, als Zusatz)
bdb, book development board
Wie die einzelnen Komponenten angeschlossen sind, kann dem Schaltplan weiter unten entnommen werden. Wichtig ist, dass Header für Jumper vorgesehen sind, da manche Pins mehrfach verwendet werden.
Konkret werden IO0, IO1, IO3 und IO9 mehrfach belegt und müssen für die jeweilige Anwendung gesetzt werden:
Für die beiden GPIO-LEDs muss Header 1 nach unten gejumpert werden
Die CS-Leitungen (SPI) für den Beschleunigungssensor und die SD-Karte befinden sich ebenso auf Header 1. D.h., dass die LEDs und Beschleunigungssensor/SD-Karte nicht gleichzeitig funktionieren.
Header zwei dient der Auswahl zwischen RS-485 Schnittstelle (IO9 wird hier für die Halbduplex-Richtungswahl verwendet) oder PWM (auf IO9 wird das PWM-Signal generiert).
Header 3 wählt die Interruptleitung vom Beschleunigungssensor oder vom Pulsoximetersensor.
Es ist auch wichtig zu wissen, dass der Taster SW3APP mit dem Potentiometer gemeinsam verdrahtet ist. Das bedeutet, dass ein Drehen am Poti den Taster auslösen kann. Zur Verwendung des Tasters muss das Poti deshalb in Endstellung sein. Ebenso ändert ein Drücken des Tasters den gemessenen Widerstand des Potis.
GPIO
Func1
Func2
Anmerkung
IO0
LED_PUSH
CS_SD
Jumper 1: LED oder SD-Karte
IO1
LED_PULL
CS_ACC
Jumper 1: LED oder Beschleunigung
IO2
BTN, Potentiometer
Funktionen beeinflussen sich gegenseitig
IO3
IRQ_ACC
IRQ_PULSE
Jumper 3: Wahl des Gerätes für IRQ
IO4
MOSI
SPI-Leitung, einzige Funktion
IO5
SDA
I²C-Leitung, einzige Funktion
IO6
SDL
I²C-Leitung, einzige Funktion
IO7
MISO
SPI-Leitung, einzige Funktion
IO8
LEDS
WS2812c 5×5 LEDs Array
IO9
RS485_DIR
PWM
Jumper 2: Wahl RS485 oder PWM (Servo)
Gleichzeitig mit SW2BOOT belegt
TXD0
Serial TX
geteilt mit RS-485 bzw. Serial Header (3,3V)
RXD0
Serial RX
geteilt mit RS-485 bzw. Serial Header (3,3V)
IO18
USB-JTAG
Flash und Debug
IO19
USB-JTAG
Flash und Debug
Vordefinierte Verwendung der GPIOs
Bestellung und Lieferung
Das Board, sowie die Aufsätze Display und MAX3010x sind nun lieferbar. Bitte einfach eine Mail an patrick(AT)ritschel.at schicken, die Stückzahl und ob ein SD1306-Display bzw. ein MAX3010x gewünscht sind. Ich habe aufgrund der geringen Stückzahlen noch keine fixe Preisliste und werde die aktuellen Preise (v.a. der MAX3010x ist schwankt in meinem Einkauf stark) zusenden.
Das „Book Development Board“ mit Display und MAX30102 im Betrieb
Das Board dient nur dem Zweck des Erlernens eingebetteter Programmierung als Begleitung zum Buch. Es darf nicht für andere Zwecke verwendet werden. Es darf nicht unbeaufsichtigt betrieben werden.
This board is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Schaltplan
Der Schaltplan sollte nur als Referenz verwendet werden und darf nicht als Basis kommerzieller Projekte.
The Schematic is in the Public Domain (or CC0 licensed, at your option). Unless required by applicable law or agreed to in writing, this schematic is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Implementieren Sie einen Fiebermesser. Bis zu einer gemessenen Körpertemperatur von 37°C soll die LED des Entwicklungsboards grün, zwischen 37°C und 38°C wegen erhöhter Temperatur orange und darüber zur Anzeige von Fieber rot leuchten.
Während des Messvorgangs soll die LED blau leuchten. Die Temperatur soll so lange gemessen werden, bis der Messwert nicht mehr nennenswert steigt.
Implementierung
Als Sensor kann ein Sensor mit 1-wire-Bus, wie der DS18B20, der in verschiedenen Sensoren eingebaut ist. Im Beispiel wird eine günstige Edelstahlsonde verwendet.
Die Ausarbeitung fevercheck des Beispiels ist im Repository zu Vergleichszwecken abgelegt.
Mit einem Pyroelektrischen (PIR-) Sensor können Bewegungen warmer Objekte sehr stromsparend erkannt werden. Ein solcher Sensor, beispielsweise von Panasonic erhältlich bei Conrad, soll verwendet werden um die LED des Entwicklungsboards entsprechend zu dimmen. Bei erkannter Bewegung soll die LED fünf Sekunden lang hell sein, um anschließend wieder im gedimmten „Dämmermodus“ zu verweilen.
Die Ansteuerung des PIR-Sensors soll in einer Komponente pirsensor gekapselt sein. Eine PIR-Auslösung soll über einen dynamischen Callback in die Applikation gemeldet werden.
Implementierung
Die Ausarbeitung motiondetect des Beispiels ist im Repository zu Vergleichszwecken abgelegt. Der PIR-Sensor ist im Beispiel an GPIO 3 angeschlossen, der LED-Strip an GPIO 8. Die Auswahl kann in der Konfiguration geändert werden.
Entwickeln Sie auf einem Board mit 25×25 LEDs (wie dem in Bezugsquellen Entwicklungsboards beschriebenen ESP32-C3FH4-RGB) eine Laufschrift.
Der darzustellende Text wird als String mit speziellen Formatierungszeichen übergeben: \1 gefolgt von der Farbe, beispielsweise r setzt roten Text, gefolgt von b blauen Text. Die Anzeige des Strings "\1rWelcome \1gto \1bthe\1o>>ticker<<\1w!!! " ist in folgendem Video ersichtlich.
ticker bei der Anzeige
Implementierung
Die Ausarbeitung ticker des Beispiels ist im Repository zu Vergleichszwecken abgelegt.
Das Beispiel implementiert einen Patch für das rmt_led-Modul: Durch das Setzen der mem_block_symbols = 64 ist es nicht möglich, weitere RMT-Kanäle für andere Kommunikation parallel zu verwenden. Eine Änderung auf den Standardwert 48 ermöglicht dies. Zukünftige Versionen der led_strip-Bibliothek haben dieses Problem behoben.
Entwickeln Sie auf einem Board mit Display wie dem in Bezugsquellen Entwicklungsboards beschriebenen ESP32-C3-0.42LCD eine Stoppuhr.
Beim Druck auf den Taster soll die Stoppuhr gestartet werden. Gleichzeitig soll die LED des Boards grün leuchten und die laufende Zeit auf zwei Nachkommastellen genau auf dem Display angezeigt werden.
Wird der Taster wiederum gedrückt, soll die Stoppuhr anhalten und die gemessene Zeit auf drei Nachkommastellen auf dem Display angezeigt werden. Zusätzlich soll die LED rot leuchten.
Die Ausarbeitung stopwatch des Beispiels ist im Repository zu Vergleichszwecken abgelegt.
Das Beispiel umfasst die in Kapitel 9 besprochenen, in den Listings gezeigten Verfahren.
Über die Konfiguration kann eingestellt werden, ob der LED-Task in der Hauptschleife den Task-Status zyklisch abfragen und in der Konsole ausgeben soll. Ebenso kann der Mechanismus der Zustellung des Knopfdrucks eingestellt werden. Zur Wahl stehen eine Semaphore und eine Queue.
Konfiguration des Beispiels
Verwendet ein beliebiges Board mit ESP32-C3 Mikrocontroller.
Cookie-Zustimmung verwalten
Um dir ein optimales Erlebnis zu bieten, verwenden wir Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wenn du diesen Technologien zustimmst, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn du deine Zustimmung nicht erteilst oder zurückziehst, können bestimmte Merkmale und Funktionen beeinträchtigt werden.
Funktional
Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt.Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.