Layerbasierte Embedded-Systems-Laborübung mit MSP430F5335 und Crazy Car Plattform. Ziel ist die Entwicklung eines autonomen Mini-Fahrzeugs inkl. GPIO, Timer, PWM, ADC (DMA), SPI-Display, I2C-Sensorik, FreeRTOS und Regelalgorithmen in C. Projektstruktur mit HAL, DL, AL. Entwicklung mit Code Composer Studio, Verifikation mit Unity.
Dieses Repository begleitet die Embedded-Systems-Laborreihe im Studiengang Elektronik und Computer Engineering (FH JOANNEUM). Im Zentrum steht die systematische Entwicklung eines autonomen Fahrzeugs (Crazy Car) auf Basis des MSP430F5335-Mikrocontrollers.
Die Laborreihe gliedert sich in neun inhaltlich geführte Einheiten. Die verbleibenden Termine dienen dem freien Fahren und der Vorbereitung auf das Crazy Car Event.
Die Übung vermittelt praxisnah:
- Hardwarenahe C-Programmierung
- Strukturierte Layer-Architektur (HAL / DL / AL)
- Debugging, Registerzugriffe, ISR
- Messtechnische Verifikation mit Oszilloskop und Logic-Analyzer
- Testen mit Unity: von bereitgestellten Vorlagen bis zur eigenständigen Suite
- Modularisierung und Wiederverwendbarkeit von Komponenten
1–3: Einführung, Interrupts, Clock und Timer
- Überblick zur Crazy Car Platine
- Softwarearchitektur: HAL, DL, AL
- Projektstruktur in CCS, Git-Versionierung
- Memory-Mapped I/O, Pin-Header, GPIO-Konfiguration
- Rechendauer: Integer vs. Float
- Interruptgesteuerte Tasterauswertung, Entprellen
- Polling vs. Delay: zeitliche Zuverlässigkeit
- Debugging (Breakpoints, Register, Expressions)
- Unified Clock System (UCS)
- TimerB0-Konfiguration
- Soll- vs. Ist-Taktfrequenz am Oszilloskop
- Einstieg Unity: Gerüst vorgegeben, Grenzfälle ergänzen
4–5: PWM, Aktorik und Schnittstellen
- PWM mit TimerA1, Ansteuerung von Servo & ESC
- Driver Layer für Lenkung und Beschleunigung
- Drehzahl, Geschwindigkeit und Weg über TimerA
- MockHAL für DL-Tests
Markdown Soon available
- SPI über USCI_B1 selbst konfigurieren, interruptgesteuerte Übertragung
- UART und I2C als vorgegebene Module einbinden und erweitern
- Alle drei Schnittstellen am Logic-Analyzer messen und dekodieren
6–7: Sensorik, Datenerfassung, Display
Markdown Soon available
- ToF-Sensoren und API angeleitet einbinden, Adressvergabe über XSHUT
- ADC12_A aufsetzen, timergesteuerte Abtastung, Batteriespannung
- Erfassung auf DMA umstellen, DL-Tests müssen unverändert bestehen
- Verifikation ausschließlich im Debugger
Markdown Soon available
- Displayinitialisierung (ST7565), Zeichenausgabe, Zeichentabelle
- Rahmenformat und Serviceroutinen der Kommunikation vervollständigen
- Sensorwerte am Display und am PC sichtbar machen
- DL-Tests mit Mock-HAL
8–9: FreeRTOS und Fahralgorithmus
Markdown Soon available
- Gesamte bisherige Testsuite fertigstellen
- FreeRTOS einbinden, Task-Pipeline Fetch → Process → Decide
- Task-Timing und Latenz über die Telemetrie verifizieren
- Neue Testkategorie: Ablauf- und Scheduling-Tests
Markdown Soon available
- Zustandsautomat: Links / Mitte / Rechts
- Regler für Lenkung und Geschwindigkeit
- Host-Tests mit bereitgestelltem Mocking, Verifikation im CrazyCar-Simulator
- Nachweis am realen Fahrzeug
Freies Fahren
- Feinabstimmung der Regelung am realen Fahrzeug
- Systemintegration und individuelle Erweiterung
- Vorbereitung auf das Crazy Car Event
- Vollständige Testsuite bleibt verpflichtend
- Modularisierung der Embedded Software (Layerstruktur)
- Verständnis für low-level Hardwareansteuerung
- Messtechnischer Nachweis der eigenen Konfiguration
- Schichtweises Testen mit Unity und Mocking
- Entwicklung von Steuerungs- und Regelalgorithmen
- Einsatz eines Echtzeitbetriebssystems
- Umsetzung eines lauffähigen autonomen Systems auf Mikrocontroller-Basis
Die Projektstruktur folgt dem klassischen Layer-Prinzip:
- HAL – Hardware Abstraction Layer (Registerzugriff, ISR)
- DL – Driver Layer (Komponentensteuerung)
- AL – Application Layer (Tasks, Zustandsautomat, Regelung)
- extLib – eingebundene Bibliotheken (FreeRTOS, VL53L1X)
- test – Unity-Tests und MockHAL
- main.c – Einstiegspunkt, Systeminitialisierung
Das Projekt wächst über die gesamte Laborreihe hinweg. Es wird nicht pro Einheit neu angelegt.
- Mikrocontroller: MSP430F5335 (Texas Instruments)
- Entwicklungsumgebung: Code Composer Studio (TI)
- Debugger: Spy-Bi-Wire / JTAG
- Messtechnik: Oszilloskop, Digilent Analog Discovery mit WaveForms
- Testframework: Unity (Host-Tests mit MockHAL)
- Echtzeitbetriebssystem: FreeRTOS (ab Einheit 8)
- Simulation: CrazyCar-Simulator (ab Einheit 9)
- Dokumentation: TI User Guide, Schaltpläne, Datenblätter
- Versionsverwaltung (optional empfohlen): GitLab, GitHub, Git
- Grundkenntnisse in C (Bitmasken, Pointer, Headerstrukturen)
- Verständnis für Mikrocontroller-Peripherie
- Umgang mit Code Composer Studio und Debugging-Werkzeugen
Es wird empfohlen, das Projekt versionsverwaltet in einem GitLab- oder GitHub-Repository zu entwickeln. Ein typischer Initialisierungsvorgang:
git init
git remote add origin https://gitlab.com/<benutzer>/<projekt>.git
git add .
git commit -m "Initial commit"
git push -u origin masterDas vorhandene .gitignore im Hauptverzeichnis kann ihrem Projektordner hinzugefügt werden und ist bereits auf die durchgehend generierten Metadaten des Code Composers abgestimmt.