Übungen mit ausführlichen Lösungen

Startseite · Cliff Notes · Formelsammlung · Probeklausuren · Glossar

Kuratierte Aufgaben zu den wichtigsten Konzepten, mit Schritt-für-Schritt-Lösung und Methode/Begründung. Jede Aufgabe ist mit einem Schwierigkeitsgrad markiert: Easy (Abfrage/1 Schritt) · Medium (Rechnung/mehrere Fakten) · Hard (mehrstufig oder subtile Falle). Erst selbst rechnen, dann Lösung aufklappen! Alle Zahlen gehen ohne Taschenrechner auf.

Nach Thema: Grundlagen/C · ARM-Architektur · Power Mgmt · PIO · Seriell/I²C · Timer · Signalverarbeitung · Regelung · CRC · Leitungscodes · Interrupt/SWI

Nach Aufgabentyp: Code schreiben · Code ändern · Zeichnen/Skizzieren · Herleitungen · Register-Konfiguration · Anwendung/Design


Thema: Grundlagen & C

Kap. 1

Ü1.1 - volatile Medium

Aufgabe: Erklären Sie, warum die folgende Schleife ohne volatile fehlerhaft optimiert werden könnte, und was volatile bewirkt.

int status = 0;
void poll(void){ while(status==0) ; }
Lösung

status wird nur durch externe Hardware (z. B. ein Peripherie-Register/ISR) verändert, nicht durch den Code der Schleife. Der Compiler „sieht" nur, dass status im Schleifenrumpf nie geändert wird → er darf den Wert einmal in ein Register laden und die Schleife durch eine Endlosschleife ersetzen. Mit volatile int status; muss der Compiler bei jedem Durchlauf den tatsächlichen Wert neu lesen → die Schleife endet, wenn die Hardware status setzt.

Ü1.2 - DMA vs. Memory-Mapped I/O Easy

Aufgabe: Wahr/falsch: „DMA nennt man das Prinzip, dass der Prozessorkern auf Peripheriebausteine in gleicher Form wie auf den Arbeitsspeicher über Adressen zugreift." Begründen Sie.

Lösung

Falsch. Beschrieben ist Memory-Mapped I/O. DMA = ein separater Controller überträgt Daten zwischen Peripherie und Speicher ohne den Prozessorkern. (KL20 Aufg. 1.4 - klassische Falle.)

Ü1.3 - Bitmanipulation: setzen / löschen / toggeln / testen Easy

Aufgabe: reg ist ein 32-Bit-Register. Schreiben Sie C-Ausdrücke, um (a) Bit 5 zu setzen, (b) Bit 12 zu löschen, (c) Bit 0 zu toggeln, (d) zu prüfen, ob Bit 7 gesetzt ist.

Lösung
reg |=  (1u << 5);      // (a) setzen
reg &= ~(1u << 12);     // (b) löschen (Maske invertieren!)
reg ^=  (1u << 0);      // (c) toggeln
if (reg & (1u << 7)) { ... }   // (d) testen

Merkhilfe: |= setzt, &= ~ löscht, ^= toggelt, & testet. Alle lassen die übrigen Bits unverändert.

Ü1.4 - Der klassische Bit-Bug Medium

Aufgabe: Ein Kollege setzt Bit 5 mit reg = (1 << 5);. Warum ist das oft ein Fehler?

Lösung

reg = (1<<5) überschreibt das ganze Register mit 0x20 und löscht damit alle anderen Bits (z. B. bereits konfigurierte Pins). Zum Setzen eines einzelnen Bits ohne die anderen zu stören: reg |= (1<<5);. Genau deshalb bietet Atmel getrennte SODR/CODR-Register (atomar, kein Read-Modify-Write).

Ü1.5 - Schiebeoperationen Easy

Aufgabe: Berechnen Sie (a) 1 << 14, (b) 0x0F000000 >> 24, (c) die Maske für „Bits 8 bis 11 setzen".

Lösung

(a) 1 << 14 = 16384 (= 0x4000). (b) 0x0F000000 >> 24 = 0x0000000F = 15. (c) Bits 8-11 = 0xF << 8 = 0x00000F00.

Ü1.6 - Compiler-Optimierung Medium

Aufgabe: (a) Welche -O-Stufe zum Debuggen, welche als Release-Standard? (b) Warum ist gerade bei -O3 das Schlüsselwort volatile wichtig?

Lösung

(a) -O0 zum Debuggen (stabiles Zeilen-Mapping), -O2 als Release-Standard (gute Balance). -Os für kleine Codegröße (Flash). (b) Aggressive Optimierung entfernt „überflüssige" Lese-/Schreibzugriffe. Bei Peripherie-Registern/HW-Variablen führt das zu Fehlern (weggelassene Zugriffe). volatile verbietet diese Optimierung für die betroffene Variable.

Ü1.7 - static vs. volatile vs. const Easy

Aufgabe: Ordnen Sie zu: (1) Sichtbarkeit auf die Moduldatei beschränken, (2) Wert kann sich außerhalb des Programmflusses ändern, (3) Wert darf vom Programm nicht geändert werden.

Lösung

(1) static, (2) volatile, (3) const. Kombinationen möglich, z. B. static volatile für ein modulinternes HW-Flag; ein nur lesbares Statusregister ist const volatile.


Thema: ARM-Architektur

ARM-Architektur

ÜA.1 - CPSR-Flags nach SUBS Hard

Aufgabe: Ein SUBS-Befehl rechnet 5 - 5. Welche der Flags N, Z, C, V werden gesetzt?

Lösung

Ergebnis = 0 → Z = 1. Nicht negativ → N = 0. Bei ARM-Subtraktion bedeutet C = 1 = kein Borrow (Minuend ≥ Subtrahend), also C = 1. Kein Vorzeichenüberlauf → V = 0. Falle: Bei Subtraktion ist C=1 das „Gutfall"-Ergebnis (kein Borrow) - nicht intuitiv.

ÜA.2 - Thumb vs. ARM Medium

Aufgabe: Nennen Sie Vor- und Nachteile des Thumb-Befehlssatzes gegenüber dem 32-Bit-ARM-Satz.

Lösung

Thumb = 16-Bit-Befehle → ~65 % der Codegröße, höhere Codedichte, energieeffizienter/schneller bei 16-Bit-Speichern. Nachteile: meist nur Register R0-R7 direkt, keine bedingte Ausführung (außer Branches), auf 32-Bit-Speicher langsamer. Thumb-2 (Cortex-M3) mischt 16-/32-Bit-Befehle. Das T-Bit im CPSR zeigt den Zustand an.

ÜA.3 - Prozessormodi & Stack Pointer (Cortex-M3) Medium

Aufgabe: (a) Welche zwei Modi kennt der Cortex-M3? (b) Welcher Stack Pointer gilt wann? (c) Ist Handler Mode privilegiert?

Lösung

(a) Thread Mode (Anwendungscode, nach Reset) und Handler Mode (Exceptions/Interrupts). (b) MSP (Main SP) für OS/Handler, PSP (Process SP) für unprivilegierten Anwendungscode; nur einer ist sichtbar (banked). (c) Ja, Handler Mode ist immer privilegiert.

ÜA.4 - Pipeline-Flush Easy

Aufgabe: Der Cortex-M3 hat eine 3-stufige Pipeline (Fetch-Decode-Execute). Wann muss sie geleert („geflusht") werden?

Lösung

Bei Branch (Sprung), Exception/Interrupt oder Breakpoint - dann sind die bereits geladenen Folgebefehle ungültig. Ein Flush kostet Takte → Branches sind „teuer".


Thema: Power Management

Kap. 2

Ü2.1 - Peripheral Clock einschalten (SAM3X) Medium

Aufgabe: Aktivieren Sie die Takte für PIOA (PID 11) und TC8 (PID 35).

Lösung
  • PID 11 < 32 → PMC->PMC_PCER0 = 1 << 11;
  • PID 35 ≥ 32 → PMC->PMC_PCER1 = 1 << (35-32); (Bit 3)

Methode: PID 0-31 → PCER0 Bit=PID; PID 32-44 → PCER1 Bit=PID−32.

Ü2.2 - Enable/Disable/Status-Konzept Medium

Aufgabe: Warum getrennte …ER/…DR/…SR-Register statt eines les-/schreibbaren Registers?

Lösung

Für atomare Bit-Operationen ohne Read-Modify-Write → keine Race Condition, wenn eine ISR gleichzeitig ein anderes Bit schaltet. Status wird über …SR nur gelesen.

Ü2.3 - Taktzustand nach Reset Easy

Aufgabe: Welcher Takt ist nach dem Reset ein-, welcher ausgeschaltet - und warum ist das sinnvoll?

Lösung

CPU-Takt: ein, Peripherie-Takt: aus. So startet der Kern sofort und schaltet dann gezielt nur die benötigte Peripherie ein → minimaler Energieverbrauch.

Ü2.4 - Warum spart ein kleinerer Takt Energie? Medium

Aufgabe: Begründen Sie, warum Reduktion der Taktfrequenz (bzw. Clock-Gating) Energie spart.

Lösung

Dynamische CMOS-Verlustleistung ist proportional zur Schaltfrequenz (PCU2fP \sim C\,U^2 f). Weniger/kein Umschalten → weniger Verbrauch. Clock-Gating (Baustein von der Clock trennen) senkt den dynamischen Anteil auf nahezu 0.

Ü2.5 - LED blinkt nicht Medium

Aufgabe: PIO ist korrekt als Ausgang konfiguriert und SODR/CODR werden geschaltet - trotzdem tut sich nichts. Was ist die wahrscheinlichste Ursache?

Lösung

Der Peripherie-Takt für den PIO-Baustein wurde nicht eingeschaltet (PMC_PCER). Ohne Clock ist der PIO-Controller „tot". Erster Blick bei nicht-funktionierender Peripherie: Power Management / PMC.


Thema: Parallele I/O

Kap. 3

Ü3.1 - SODR/CODR & 7-Segment Medium

Aufgabe: High-aktive Anzeige, a=PA0 … g=PA6, alles aus. Welche Ziffer nach PIOA->PIO_SODR = 0b1101101;?

Lösung

0b1101101 → Bits a=1,b=0,c=1,d=1,e=0,f=1,g=1 → Segmente a, c, d, f, g → Ziffer 5.

Ü3.2 - Init-Reihenfolge Easy

Aufgabe: Richtige Reihenfolge von PIO_OER, PMC_PCER, PIO_PER, SODR?

Lösung
  1. PMC_PCER (Clock an) → 2. PIO_PER (Pin dem PIO zuordnen) → 3. PIO_OER (als Ausgang) → 4. SODR/CODR (Pegel).

Ü3.3 - Taster mit Pull-Widerstand Medium

Aufgabe: Ein Taster verbindet den Pin bei Betätigung mit Masse (GND). Welcher interne Widerstand ist nötig, und welche Pegel liest man?

Lösung

Pull-Up einschalten (PIO_PUER). Ruhezustand: Pin auf High (= 1); gedrückt: Low (= 0)active low. (Ohne Pull-Up wäre der offene Eingang floating → zufällige Werte.) Mechanische Taster zusätzlich entprellen.

Ü3.4 - Pin-Multiplexing (Peripheriefunktion) Medium

Aufgabe: Ein Pin soll die USART-Funktion TXD übernehmen statt normaler PIO. Welche Schritte (SAM3X)?

Lösung
  1. Peripherie-Clock einschalten (PMC). 2. Pin vom PIO lösen: PIO_PDR (PIO Disable). 3. Peripherie A oder B wählen: PIO_ABSR. Danach steuert das USART-Modul den Pin. Merke: PIO_PER = PIO steuert; PIO_PDR = Peripherie steuert.

Ü3.5 - 7-Segment: Pins sparen mit Decoder Medium

Aufgabe: Eine 4-stellige Anzeige im Zeitmultiplex. Wie viele Pins (a) ohne, (b) mit BCD-Decoder?

Lösung

(a) Ohne Decoder: 8 Segmentleitungen (a-g + dp) + 4 Stellenauswahl = 12 Pins (statt 8×4=32 ohne Multiplex). (b) Mit BCD-Decoder: 5 (4 BCD + dp) + 4 Stellenauswahl = 9 Pins.

Ü3.6 - Tastaturmatrix Medium

Aufgabe: 16 Tasten als 4×4-Matrix. Wie viele Pins statt Einzelanschluss, und wie wird abgefragt?

Lösung

4 + 4 = 8 Pins statt 16. Abfrage im Zeitmultiplex: Spalten nacheinander aktivieren (Output), Reihen messen (Input, mit Pull-Up/Down). Aus aktiver Spalte + gemessener Reihe folgt die Taste.

Ü3.7 - Warum low-aktive LED? Medium

Aufgabe: Warum werden LEDs oft low-aktiv angeschlossen (leuchten, wenn der Pin Low ist)?

Lösung

Weil die Ausgangsstufe eines µC nach Masse meist mehr Strom „sinken" kann, als sie nach High „sourcen" kann. Bei low-aktiv fließt der LED-Strom von +UB+U_B in den Pin (Sink) → der Prozessor muss den Strom nicht selbst liefern.


Thema: Seriell / I²C

Kap. 4

Ü4.1 - „9600 8N1" Easy

Aufgabe: Erklären Sie „9600 8N1" und die minimale Leitungszahl (außer Masse).

Lösung

9600 Baud, 8 Datenbits, None Parität, 1 Stoppbit. Minimal 2 Leitungen: TXD + RXD, gekreuzt.

Ü4.2 - I²C Start/Stop & ACK Medium

Aufgabe: Beschreiben Sie Start-/Stopp-Bedingung und ACK/NACK.

Lösung
  • Start: SDA fällt auf Low während SCL High. Stopp: SDA steigt auf High während SCL High.
  • Sonst ändert sich SDA nur bei SCL Low.
  • ACK = Low (Empfänger bestätigt), NACK = High. Idle = beide High.

Ü4.3 - USART Wahr/Falsch Easy

Aufgabe: „Das THR serialisiert die Daten." Richtig?

Lösung

Falsch. Das Shift-Register (TSR) serialisiert; THR ist nur der Puffer für die CPU. Empfang analog: RSR deserialisiert → aus RHR lesen.

Ü4.4 - Übertragungszeit berechnen Medium

Aufgabe: Wie lange dauert die Übertragung von 100 Bytes bei 9600 8N1?

Lösung

Pro Byte-Rahmen: 1 Start + 8 Daten + 0 Parität + 1 Stopp = 10 Bit. 100 Bytes = 1000 Bit. Zeit = 1000 / 9600 ≈ 0,104 s = 104 ms. Falle: Nicht 8 Bit pro Zeichen rechnen - der Rahmen hat 10 Bit.

Ü4.5 - Paritätsbit bestimmen Easy

Aufgabe: Datenbits 1111001. Welches Paritätsbit bei gerader (even) bzw. ungerader (odd) Parität?

Lösung

Anzahl Einsen = 5 (ungerade). Even: Paritätsbit = 1 (macht 6, gerade). Odd: Paritätsbit = 0 (5 ist schon ungerade).

Ü4.6 - Synchron vs. asynchron Easy

Aufgabe: Ist I²C synchron oder asynchron? Und RS-232? Warum braucht Async ein Startbit?

Lösung

I²C = synchron (Taktleitung SCL). RS-232 = asynchron. Async braucht ein Startbit, damit sich der Empfänger auf den Zeichenbeginn synchronisiert und danach in Bit-Mitte abtastet.

Ü4.7 - RS-232-Pegel Medium

Aufgabe: Warum nutzt RS-232 z. B. −15 V für logisch 1 und +15 V für logisch 0, und wozu ein MAX232?

Lösung

Negative Logik mit hohen Spannungen → große Störsicherheit über lange Kabel. µC arbeiten mit TTL/CMOS → ein Pegelwandler (MAX232) erzeugt die ±-Spannungen und wandelt zurück.

Ü4.8 - I²C-Arbitrierung Hard

Aufgabe: Zwei Master starten gleichzeitig; Master A adressiert 0x50, Master B 0x48 (7-Bit). Wer gewinnt die Arbitrierung?

Lösung

0x50 = 1010000, 0x48 = 1001000. Vergleich MSB zuerst: Bit6 1=1, Bit5 0=0, Bit4 A=1, B=0. B zieht SDA auf Low; A sendet 1, liest aber 0A verliert und stoppt. Master B (0x48) gewinnt. Regel: Wer als Erster eine 0 gegen die 1 eines anderen durchsetzt, gewinnt → effektiv die niedrigere Adresse. Der Verlierer stört die Übertragung nicht.


Thema: Timer

Kap. 5

Ü5.1 - Optimaler Prescaler + RC Medium

Aufgabe: f_CLK = 32 MHz, 16-Bit, f_A = 50 Hz. Prescaler (aus 2/8/32/128/1024) und RC?

Lösung

Ideal = 32·10⁶/(50·65536) ≈ 9,77Prescaler 32 (8 wäre zu klein → RC>65536). RC = 32·10⁶/(32·50) = 20 000 (< 65536).

Ü5.2 - Servo-PWM Medium

Aufgabe: Servo 50 Hz (20 ms), 1,5 ms High = Mitte. f_CLK=16 MHz, 16-Bit. Prescaler, RC, RA?

Lösung

Ideal ≈ 4,88Prescaler 8. RC = 16·10⁶/(8·50) = 40 000. T_step = 8/16 MHz = 0,5 µsRA = 1,5 ms/0,5 µs = 3 000 (= 7,5 %).

Ü5.3 - Signal aus Init-Code (Altklausur) Hard

Aufgabe [Q: ALT 2009]: f_CLK=16 MHz; WAVE, CPCTRG, ACPA=Set@RA, ACPC=Clear@RC, MCK/32; RA=100, RC=1000. Frequenz? Und Umbau auf symmetrisches 1-kHz-Rechteck?

Lösung

T_step = 32/16 MHz = 2 µs; T_A = 1000·2 µs = 2 ms500 Hz. High von RA…RC = 900 Schritte → 90 %. 1 kHz symmetrisch: RC = 1 ms/2 µs = 500, RA = 250 (50 %).

Ü5.4 - Capture: Periodendauer Medium

Aufgabe: Capture, Prescaler=8, f_CLK=25 MHz, RA=125, RB=3250. Periode? Mindest-Messdauer?

Lösung

T_A = (3250−125)·8/25·10⁶ = 3125·320 ns = 1 ms. Mindest-Messdauer ≥ 2·T_A = 2 ms (Worst Case).

Ü5.5 - ns pro Zählschritt Easy

Aufgabe: f_CLK = 5 MHz, Prescaler 8. ns pro Inkrement?

Lösung

T_step = 8/5·10⁶ = 1,6 µs = 1600 ns.

Ü5.6 - PWM-Tastverhältnis Easy

Aufgabe: Wave-Mode PWM (Clear@RA, Set@RC+Reset). RC = 10 000, RA = 2 500. (a) Tastverhältnis? (b) RA für 40 %?

Lösung

(a) D = RA/RC = 25 %. (b) RA = 0,40·10 000 = 4 000.

Ü5.7 - Ultraschall-Entfernung Medium

Aufgabe: Der Echo-Impuls eines HC-SR04 dauert 1,2 ms. Schallgeschwindigkeit 340 m/s. Wie weit ist die Wand entfernt?

Lösung

Schall läuft hin und zurücks = v·t/2 = 340 · 1,2·10⁻³ / 2 = 0,408/2 = 0,204 m = 20,4 cm. Falle: Ohne den Faktor /2 ergäbe sich der doppelte (falsche) Abstand.

Ü5.8 - Overflow-Zeit Medium

Aufgabe: (a) 16-Bit, f_CLK = 8 MHz, Prescaler 1024, kein RC. Nach welcher Zeit Überlauf? (b) Warum ist das beim SAM3X (32 Bit) unkritischer?

Lösung

(a) T_ovf = 2¹⁶·1024/8·10⁶ = 65536·1024/8·10⁶ ≈ 8,39 s. (b) 32 Bit → Faktor 65536 mehr Zählbereich → Überlauf erst nach Stunden; lange Zeiten ohne Kaskadierung.

Ü5.9 - Frequenzmessung via Capture Medium

Aufgabe: Prescaler=32, f_CLK=16 MHz, gemessen RA=200, RB=1200 (Periode). Frequenz?

Lösung

T = (1200−200)·32/16·10⁶ = 1000·2 µs = 2 msf = 500 Hz. (T_step = 2 µs.)

Ü5.10 - Wenn ein Timer nicht reicht Hard

Aufgabe: f_CLK = 32 MHz, 16-Bit-Zähler. Sie wollen eine Periode von 10 s. Geht das mit einem Kanal? Was tun?

Lösung

f_A = 0,1 Hz. Selbst mit Prescaler 1024: RC = 32·10⁶/(1024·0,1) = 312 500 - das ist > 65 536, passt nicht in 16 Bit. → Kaskadierung zweier Zähler oder 32-Bit-Timer. (Grenze: RC ≤ 2^Bitbreite.)

Ü5.11 - Zwei PWM-Ausgänge aus einem Zähler Easy

Aufgabe: Ein Zähler steuert TIOA (über RA) und TIOB (über RB). RC = 1000, RA = 300, RB = 700. Tastverhältnisse?

Lösung

TIOA: RA/RC = 30 %; TIOB: RB/RC = 70 %. Ein Zähler, gemeinsame Frequenz, zwei unabhängige Tastverhältnisse.

Ü5.12 - Periodischer Interrupt (Compare-Mode) Medium

Aufgabe: Ein OS-Scheduler braucht einen 1-ms-Tick. f_CLK = 8 MHz, Prescaler 8. Welcher RC, welcher Modus?

Lösung

Compare-Mode: bei Counter==RC → Interrupt + Reset. T_step = 8/8 MHz = 1 µsRC = 1000.


Thema: Signalverarbeitung

Kap. 7

Ü7.1 - Spektrum → Zeitfunktion Medium

Aufgabe: Spektrum: 50 Hz (A=2), 150 Hz (A=1). (a) f(t)? (b) sin(100π·t) enthalten? sin(300π·t)?

Lösung

(a) f(t) = 2·sin(2π·50·t) + 1·sin(2π·150·t). (b) sin(100π t)→50 Hz → A=2; sin(300π t)→150 Hz → A=1. Merkregel: sin(kπt) → f = k/2.

Ü7.2 - Abtasttheorem & Aliasing Medium

Aufgabe: f_max = 400 Hz. Welche von 700/800/850 Hz ist korrekt? Was bei 700 Hz?

Lösung

f_s > 2·400 = 800 Hz (strikt) → nur 850 Hz. Bei 700 Hz: Alias |700−400| = 300 Hz.

Ü7.3 - ADC-Wortlänge (Thermoelement) Hard

Aufgabe: 0,5 mV/°C, 0-200 °C, Auflösung 0,5 °C. Wortlänge n?

Lösung

U = 200·0,5 mV = 100 mV, Schritt = 0,5·0,5 = 0,25 mV2^n ≥ 100/0,25 = 400n = 9 (2⁹=512).

Ü7.4 - Datenmenge Easy

Aufgabe: f_s = 800 Hz, 16 Bit, 10 s. Wie viele Byte?

Lösung

800·10·2 Byte = 16 000 Byte (16 Bit = 2 Byte).

Ü7.5 - Zähl- vs. Wägeverfahren Easy

Aufgabe: „Zählverfahren ist um Faktor log(N) schneller als Wägeverfahren." Richtig?

Lösung

Falsch. Das Wägeverfahren (sukzessive Approximation, MSB zuerst) ist schneller und braucht konstant n Schritte; das Zählverfahren ist langsam und wertabhängig.

Ü7.6 - Gleitender Mittelwert berechnen Medium

Aufgabe: Messreihe x = 4, 8, 6, 10, 12, 8 (Index 0…5), gleitender Mittelwert der Ordnung n=4. Berechnen Sie die verfügbaren Mittelwerte.

Lösung

Erst ab Index 3 (n−1) berechenbar:

  • m₃ = (4+8+6+10)/4 = 7
  • m₄ = (8+6+10+12)/4 = 9
  • m₅ = (6+10+12+8)/4 = 9

Wirkung: Tiefpass (glättet Rauschen), aber verzögert.

Ü7.7 - Quantisierungsfehler Easy

Aufgabe: 10-Bit-ADC, Bereich 5 V. (a) Auflösung (1 LSB)? (b) maximaler Quantisierungsfehler?

Lösung

(a) ΔU = 5 V/2¹⁰ = 5 V/1024 ≈ 4,88 mV. (b) e_max = ½ LSB ≈ 2,44 mV.

Ü7.8 - DAC / R2R-Netzwerk Medium

Aufgabe: 8-Bit-DAC, Referenz 6 V. (a) Ausgangsänderung pro 1 Bit? (b) Ausgangsspannung für 0xC0?

Lösung

(a) 1 LSB = 6 V/2⁸ = 6 V/256 ≈ 23,4 mV. (b) 0xC0 = 192U = 192/256 · 6 V = 4,5 V.

Ü7.9 - Oversampling & Auflösung Hard

Aufgabe: Um durch Überabtastung + Mittelung 2 zusätzliche Bits zu gewinnen: um welchen Faktor muss man überabtasten?

Lösung

Pro zusätzlichem Bit ist 4×-Oversampling nötig → für 2 Bit: 4² = 16× (allgemein 4^(Δbits)). Nebeneffekte: besserer SNR, einfacherer Anti-Aliasing-Filter.

Ü7.10 - Aliasing mehrfach Hard

Aufgabe: Ein 10-Hz-Signal wird abgetastet mit (a) 12 Hz, (b) 11 Hz, (c) 5 Hz. Welche scheinbare Frequenz jeweils?

Lösung

(a) |12−10| = 2 Hz. (b) |11−10| = 1 Hz. (c) f_s = 5 Hz: Signal faltet auf |10 − 2·5| = 0 HzGleichanteil. Alle verletzen Nyquist.

Ü7.11 - Datenvolumen: HiFi vs. Telefon Medium

Aufgabe: 1 min Audio, mono. (a) HiFi 44,1 kHz/16 Bit, (b) Telefon 8 kHz/8 Bit. Datenmengen und Verhältnis?

Lösung

(a) 60·44100·16 bit = 5 292 000 Byte ≈ 5292 kByte. (b) 60·8000·8 bit = 480 000 Byte = 480 kByte. Verhältnis ≈ 11×.


Thema: Regelung

Kap. 8

Ü8.1 - PID-Anteile Easy

Aufgabe: Ordnen Sie zu: (1) eliminiert bleibende Regelabweichung, (2) reagiert sofort proportional, (3) dämpft, verstärkt aber Rauschen.

Lösung

(1) I (Integral), (2) P (Proportional), (3) D (Differential).

Ü8.2 - Windup Medium

Aufgabe: Was ist Windup, wie begegnet man ihm?

Lösung

Bei Stellglied-Sättigung wächst der I-Anteil weiter, obwohl die Stellgröße nicht steigen kann → langes Nachschwingen. Anti-Windup: I-Anteil begrenzen (Clamping).

Ü8.3 - Zweipunktregler & Hysterese Easy

Aufgabe: Warum braucht ein Zweipunktregler (Thermostat) eine Hysterese?

Lösung

Ohne Hysterese schaltet er am Sollwert sehr schnell ein/aus (Rattern). Mit Hysterese (Schmitt-Trigger): einschalten unter einer unteren, ausschalten über einer oberen Schwelle → ruhiges Schalten.

Ü8.4 - Steuerung vs. Regelung Easy

Aufgabe: Unterschied Steuerung (open loop) vs. Regelung (closed loop)? Welche reagiert auf Störungen?

Lösung

Steuerung: kein Feedback → kann auf Störungen nicht reagieren. Regelung: misst den Istwert und korrigiert die Regeldifferenz → kompensiert Störgrößen (z. B. Praktikums-Fahrzeug).

Ü8.5 - Diskretisierung & Echtzeit Hard

Aufgabe: Warum sollte die Regelschleife per Timer-Interrupt und nicht per Polling laufen, und was passiert bei schwankender Abtastzeit?

Lösung

PID-Diskretisierung nutzt die Abtastzeit T (Integral→Summe·T, Differential→Differenz/T). Ein konstantes T ist Voraussetzung für Stabilität. Polling ist nicht deterministisch → Jitter verfälscht I-/D-Anteil. Daher Timer-Interrupt (fester Takt).


Thema: CRC

Kap. 10 §7

Ü10.1 - Prüfbits berechnen Hard

Aufgabe [Q: ALT 2009]: g(x) = x⁵ + x³ + 1, Nachricht 1 0 0 1 1 1 1 1 0 0 1. Prüfbits?

Lösung

g = 101001 (6 Bit → 5 Prüfbits). Nachricht + 5 Nullen, Modulo-2-Division → Rest 01010. Gesendet: 10011111001 01010.

Ü10.2 - Generatorpolynom binär Hard

Aufgabe [Q: ALT]: CRC-5, g(x)=x⁵+x²+1. (a) Binär? (b) Prüfbits für 111 010 111?

Lösung

(a) 100101. (b) + 5 Nullen, Division → Rest 10100. Gesendet: 111010111 10100.

Ü10.3 - Gültigkeit & HW Medium

Aufgabe: Empfangen 1111 0010 (4 Daten + 4 FCS), CRC-4 10011. Gültig? Welche HW realisiert CRC?

Lösung

11110010 ÷ 10011Rest 0000gültig. HW: LFSR (Schieberegister + EXOR-Gatter).

Ü10.4 - CRC-Division komplett Medium

Aufgabe: g(x) = x³ + x² + 1, Nachricht 1010. Prüfbits Schritt für Schritt und gesendeter Code.

Lösung

g = 1101 (Grad 3 → 3 Prüfbits). Nachricht + 3 Nullen = 1010000. Modulo-2 (XOR):

1010000
1101          (Pos 0)
-------
0111000
 1101         (Pos 1)
 ------
 0001100
    1101      (Pos 3)
    ----
    0000001

Rest = 001 → Prüfbits 001, gesendet 1010001. Kontrolle: 1010001 ÷ 1101 → Rest 000.

Ü10.5 - Hamming-Distanz Medium

Aufgabe: Zwei Code-Wörter 10110 und 11011. (a) Hamming-Distanz? (b) Fehler erkennbar/korrigierbar?

Lösung

(a) XOR: 10110 ⊕ 11011 = 011013 Einsen → d = 3. (b) Erkennen d ≥ e+12 Fehler erkennbar; Korrigieren d ≥ 2e+11 Fehler korrigierbar.

Ü10.6 - CRC vs. Paritätsbit Medium

Aufgabe: Warum ist CRC einem einfachen Paritätsbit (VRC) überlegen?

Lösung

Ein Paritätsbit erkennt nur eine ungerade Anzahl Bitfehler - bei 2 (geraden) Fehlern versagt es. CRC erkennt zusätzlich Bündelfehler bis zum Grad des Polynoms und praktisch alle Mehrfachfehler; Stärke hängt vom Generatorpolynom ab.


Thema: Leitungscodes

Kap. 10

Ü11.1 - NRZ & Manchester Medium

Aufgabe [Q: ALT]: 0 1 0 1 1 0 0 0 1 0 in NRZ und Manchester (IEEE 802.3). Welcher Code ist selbsttaktend?

Lösung
  • NRZ: Pegel = Bit (0=Low, 1=High), pro Bit konstant.
  • Manchester (802.3): Mittenflanke je Bit, 1 = steigend, 0 = fallend.
  • Selbsttaktend = Manchester (Flanke in jedem Bit). NRZ nicht.

Ü11.2 - Baud vs. Bit Easy

Aufgabe: 1 MBit/s im Manchester-Code → Baudrate?

Lösung

Manchester: 1 Bit = 2 Symbole → 2 MBaud.

Ü11.3 - NRZI-S codieren Medium

Aufgabe: Codieren Sie 1 0 1 1 0 0 1 in NRZI-S (Pegelwechsel bei 0, kein Wechsel bei 1). Startpegel Low.

Lösung
Bit1011001
Aktion-toggle--toggletoggle-
PegelLHHHLHH

→ Pegelfolge L, H, H, H, L, H, H.

Ü11.4 - Manchester decodieren Medium

Aufgabe: Manchester (IEEE 802.3), vier Mittenflanken: steigend, steigend, fallend, steigend. Welche Bits?

Lösung

802.3: steigend = 1, fallend = 0 → 1 1 0 1. (Nach G. E. Thomas invertiert: 0 0 1 0.)

Ü11.5 - Grenzen von NRZI-S Hard

Aufgabe: NRZI-S soll das Sync-Problem von NRZ lösen. Bei welcher Bitfolge scheitert es trotzdem?

Lösung

NRZI-S toggelt nur bei 0. Bei einer langen Folge von Einsen gibt es keinen Pegelwechsel → wieder Synchronisationsverlust. (NRZI-M analog mit langen Nullen.) Manchester löst das vollständig (Flanke in jedem Bit).

Ü11.6 - RZ-Code Easy

Aufgabe: Vorteil und zwei Nachteile des RZ-Codes (3 Pegel)?

Lösung

Vorteil: selbsttaktend. Nachteile: doppelte Bandbreite (Baud = 2·Bitrate) und ein Gleichspannungsanteil → erschwert galvanische Trennung.


Thema: Interrupt / SWI

Kap. 6 · Kap. 9

Ü12.1 - Polling vs. Interrupt Easy

Aufgabe: Je zwei Vorteile von Polling und von Interrupts.

Lösung

Polling: einfacher; geringerer HW-Aufwand (Busy Waiting: sofortige Reaktion). Interrupt: CPU frei/Sleep (stromsparend); Ereignis wird immer überwacht, klareres Hauptprogramm.

Ü12.2 - Interrupt-Ablauf Medium

Aufgabe: Reihenfolge: (a) ISR ausführen, (b) IVR lesen, (c) Kontext sichern, (d) IRQ-Anforderung, (e) EOICR schreiben, (f) Kontext restaurieren + Rücksprung.

Lösung

d → c → b → a → e → f. (KL20 Aufg. 7.)

Ü12.3 - SWI-Nummer extrahieren Hard

Aufgabe: Wie ermittelt der ARM7-SWI-Handler die SWI-Nummer?

Lösung

Die Nummer steht im Maschinencode des Befehls. Handler lädt den Befehl an [LR−4] und maskiert die oberen 8 Bit (BIC r0,r0,#0xff000000) → 24-Bit-Nummer.

Ü12.4 - Shared-Data-Problem Medium

Aufgabe: Hauptprogramm und ISR nutzen dieselbe Variable. Was kann schiefgehen und wie schützt man sich?

Lösung

Eine Unterbrechung mitten in einer nicht-atomaren Operation führt zu inkonsistenten Daten (Race Condition). Schutz: kritischen Abschnitt durch kurzes Sperren der Interrupts kapseln; gemeinsame Variablen volatile.

Ü12.5 - AIC vs. NVIC Medium

Aufgabe: Zwei wesentliche Unterschiede zwischen AT91-AIC und Cortex-M-NVIC.

Lösung

NVIC: in den Kern integriert, automatisches Stacking, Tail-Chaining/Late-Arriving/verschachtelt, 16 Prioritäten. AIC: 8 Prioritäten + FIQ, Kontextsicherung/Reentrant explizit zu programmieren, EOICR am Ende.

Ü12.6 - Prioritätsrichtung Hard

Aufgabe: Beim NVIC (Cortex-M): laufender Interrupt hat Prioritätswert 5, ein neuer kommt mit Wert 2. Wird unterbrochen?

Lösung

Ja. Beim NVIC ist 0 = höchste Priorität - kleinerer Wert = höher. Wert 2 > Wert 5 (in Priorität) → der neue Interrupt verdrängt den laufenden. Falle: Beim AT91-AIC ist es umgekehrt (7 = höchste). Immer die Richtung prüfen!

Ü12.7 - Spurious Interrupt Medium

Aufgabe: Was ist ein „Spurious Interrupt" und warum braucht man dafür einen Handler?

Lösung

Ein Geister-Interrupt: die Anforderung verschwindet, bevor die CPU sie verarbeitet (Glitch/spätes Löschen). Der AIC liefert die Adresse aus dem Spurious Vector Register. Ein Handler ist zwingend, sonst Absturz.

Ü12.8 - Software-Interrupt: Zweck Medium

Aufgabe: Wozu dient der Software-Interrupt (SVC/SWI) und welchen Moduswechsel bewirkt er?

Lösung

Synchroner Aufruf, um vom User Mode in den privilegierten (Supervisor/Handler) Mode zu wechseln → kontrollierter Aufruf von Systemdiensten (z. B. putchar). Die Nummer im Befehl wählt den Dienst.


Zusatzaufgaben nach Aufgabentyp

Die folgenden Aufgaben decken die freien Aufgabenformen der Altklausuren ab (Code schreiben/ändern, Zeichnen, Herleiten, Register konfigurieren, Anwendung). Skizzen sind als ASCII-Zeitdiagramme + Beschreibung gelöst. Die verwendeten Registernamen entsprechen der Vorlesungs-Notation (AT91/SAM3X).


Aufgabentyp: Code schreiben

Reines Schreiben von C-Code für die Peripherie.

CS1 - LED-Ausgang initialisieren (PIOA, high-aktiv) Medium

Aufgabe: Schreiben Sie C-Code, der die LED an PA19 (high-aktiv) initialisiert und einschaltet.

Lösung
PMC->PMC_PCER0 = (1u << ID_PIOA);   // 1) Peripherie-Takt für PIOA
PIOA->PIO_PER  = (1u << 19);        // 2) Pin vom PIO-Controller steuern
PIOA->PIO_OER  = (1u << 19);        // 3) als Ausgang
PIOA->PIO_SODR = (1u << 19);        // 4) High -> LED an (high-aktiv)

Reihenfolge merken: Takt -> PER -> OER -> Pegel. Ohne Schritt 1 ist der PIO „tot".

CS2 - Taster einlesen (active low, Pull-Up) Medium

Aufgabe: Ein Taster zieht PA11 bei Betätigung auf Masse. Schreiben Sie die Initialisierung als Eingang mit Pull-Up und eine Abfrage, die 1 liefert, wenn gedrückt.

Lösung
PMC->PMC_PCER0 = (1u << ID_PIOA);
PIOA->PIO_PER  = (1u << 11);        // PIO steuert den Pin
PIOA->PIO_ODR  = (1u << 11);        // Output Disable -> Eingang
PIOA->PIO_PUER = (1u << 11);        // Pull-Up an (Ruhe = High)

// gedrückt = Pin Low (active low):
int gedrueckt = !(PIOA->PIO_PDSR & (1u << 11));

PIO_PDSR liest den tatsächlichen Pin-Pegel. Ohne Pull-Up floatet der offene Eingang.

CS3 - Peripherie-Takte einschalten Easy

Aufgabe: Schreiben Sie eine Zeile, die die Takte für USART1 (PID 18) und TC0 (PID 27) aktiviert.

Lösung
PMC->PMC_PCER0 = (1u << 18) | (1u << 27);   // beide PIDs < 32 -> PCER0

Beide IDs liegen unter 32, also dasselbe Register. Für PID ≥ 32 wäre es PMC_PCER1 mit Bit PID-32.

CS4 - Zeichen per USART senden (Polling) Medium

Aufgabe: Schreiben Sie eine Funktion putc, die ein Byte per USART1 im Polling-Betrieb sendet.

Lösung
void putc(char c) {
    while (!(USART1->US_CSR & US_CSR_TXRDY)) ;  // warten bis Sender frei
    USART1->US_THR = c;                          // Byte ins Holding Register
}

TXRDY im US_CSR zeigt an, dass US_THR beschrieben werden darf. Das Shift-Register (TSR) serialisiert dann.

CS5 - Bit-Makros Easy

Aufgabe: Definieren Sie Makros zum Setzen, Löschen, Toggeln und Testen von Bit n in einem Register r.

Lösung
#define SET_BIT(r,n)    ((r) |=  (1u << (n)))
#define CLR_BIT(r,n)    ((r) &= ~(1u << (n)))   // Maske invertieren!
#define TGL_BIT(r,n)    ((r) ^=  (1u << (n)))
#define TST_BIT(r,n)    (((r) >> (n)) & 1u)

CS6 - Timer-Interrupt aktivieren (CMSIS) Medium

Aufgabe: Aktivieren Sie den Interrupt des Timers TC0 mit Priorität 2 (Cortex-M/NVIC) und geben Sie das Grundgerüst der ISR an.

Lösung
NVIC_SetPriority(TC0_IRQn, 2);   // 0 = höchste Priorität beim NVIC
NVIC_EnableIRQ(TC0_IRQn);

void TC0_Handler(void) {
    uint32_t status = TC0->TC_CHANNEL[0].TC_SR;  // Lesen von TC_SR löscht die Flags
    if (status & TC_SR_CPCS) {
        // RC-Compare aufgetreten -> hier reagieren
    }
}

Wichtig: im Handler TC_SR lesen, sonst bleibt das Interrupt-Flag gesetzt (Dauer-Interrupt).


Aufgabentyp: Code ändern

Gegebenen Init-Code an eine neue Vorgabe anpassen (Klassiker der Altklausuren).

CÄ1 - Symmetrisches 1-kHz-Rechteck Hard

Aufgabe [Q: ALT 2009]: Gegeben (fCLK = 16 MHz): TC_CLKS_MCK32, TC_WAVE, TC_CPCTRG, TC_ACPA_SET_OUTPUT, TC_ACPC_CLEAR_OUTPUT, TC_RA = 100, TC_RC = 1000 (erzeugt 500 Hz, 90 %). Ändern Sie auf ein symmetrisches 1-kHz-Rechteck.

Lösung

T_step = 32/16 MHz = 2 µs. Für 1 kHz: T = 1 ms -> RC = 1 ms / 2 µs = 500. Symmetrie 50 %: RA = RC/2 = 250.

timerbase->TC_RA = 250;   // war 100
timerbase->TC_RC = 500;   // war 1000

Modus/ACPA/ACPC bleiben unverändert (Set@RA, Clear@RC). (Alternativ: TIOA per Toggle an RC und RC = 500 bei halbierter Periodenlogik - siehe RK2.)

CÄ2 - Tastverhältnis ändern Easy

Aufgabe: PWM mit RC = 10000, RA = 2500 (High-Anteil = RA/RC = 25 %). Ändern Sie auf 60 %.

Lösung
timerbase->TC_RA = 6000;   // 0,60 * 10000

RC bleibt (Frequenz unverändert), nur RA steuert das Tastverhältnis.

CÄ3 - Frequenz ändern, Tastverhältnis halten Medium

Aufgabe: Gegeben (fCLK = 16 MHz, Prescaler 8): RC = 40000 (50 Hz), RA = 3000 (7,5 %). Stellen Sie auf 100 Hz um, gleiches Tastverhältnis.

Lösung

RC = fCLK/(Prescaler·f) = 16e6/(8·100) = 20000. Tastverhältnis 7,5 % beibehalten: RA = 0,075·20000 = 1500.

timerbase->TC_RC = 20000;   // war 40000
timerbase->TC_RA = 1500;    // war 3000

Beide halbieren sich (doppelte Frequenz = halbe Periode); das Verhältnis RA/RC bleibt 7,5 %.

CÄ4 - Periode vervierfachen über den Prescaler Medium

Aufgabe: Ein Signal ist mit TC_CLKS_MCK8 zu schnell. Die Periode soll 4× länger werden, ohne RA/RC zu ändern. Was tun?

Lösung

Prescaler von 8 auf 32 (Faktor 4) erhöhen:

// TC_CLKS_MCK8  ->  TC_CLKS_MCK32

T_A = RC·Prescaler/fCLK ist proportional zum Prescaler -> ×4. RA/RC (und damit das Tastverhältnis) bleiben unverändert. (Ein Faktor 2 wäre nicht möglich, da nur 2, 8, 32, 128, 1024 verfügbar sind.)

CÄ5 - Zweiten PWM-Ausgang ergänzen Medium

Aufgabe: Eine PWM läuft auf TIOA (über RA). Ergänzen Sie TIOB mit 50 % aus demselben Zähler.

Lösung
timerbase->TC_RB = timerbase->TC_RC / 2;   // 50 % für TIOB
// im TC_CMR zusätzlich die TIOB-Aktionen setzen:
//   TC_BCPB_CLEAR_OUTPUT | TC_BCPC_SET_OUTPUT

TIOB nutzt die Register RB (Compare) und BCPB/BCPC (Aktionen), analog zu RA/ACPA/ACPC bei TIOA. Frequenz ist für beide gleich (gemeinsamer Zähler, gemeinsames RC).

CÄ6 - High-aktive auf low-aktive 7-Segment-Anzeige Medium

Aufgabe: Code für eine high-aktive Anzeige benutzt SODR zum Einschalten von Segmenten. Passen Sie ihn für eine low-aktive Anzeige an.

Lösung

Bei low-aktiv leuchtet ein Segment, wenn der Pin Low ist. Also SODR und CODR vertauschen:

// high-aktiv:  einschalten = SODR,  ausschalten = CODR
// low-aktiv :  einschalten = CODR,  ausschalten = SODR
PIOA->PIO_CODR = segmentmaske;   // Segmente AN (Pin low)
PIOA->PIO_SODR = ~segmentmaske & alle_segmente;  // Rest AUS (Pin high)

Logik invertiert sich; die Pin-Zuordnung (a…g) bleibt gleich.


Aufgabentyp: Zeichnen / Skizzieren

Signale und Kennlinien skizzieren. Lösungen als ASCII-Zeitdiagramm + Beschreibung.

Z1 - PWM-Signal skizzieren Medium

Aufgabe: Wave-Mode, Set@RC (+Reset), Clear@RA, RC = 1000, RA = 250. Skizzieren Sie TIOA über eine Periode.

Lösung

Nach dem Reset (Counter = 0) ist TIOA High; bei Counter = RA = 250 wird Clear (Low); bei Counter = RC = 1000 wieder Set + Reset. -> 25 % High am Periodenanfang.

        0      250                     1000
TIOA  ┌──────┐                        ┌──────
      │ high │        low             │
   ───┘      └────────────────────────┘
      |<25%>|<-------- 75% ---------->|

Periode = 1000 Schritte; High-Anteil = RA/RC = 25 %.

Z2 - NRZ und Manchester zeichnen Medium

Aufgabe: Zeichnen Sie die Bitfolge 1 0 1 1 0 in NRZ und Manchester (IEEE 802.3).

Lösung

NRZ (Pegel = Bit): H L H H L

      1   0   1   1   0
NRZ ─┐   ┌───┐       ┌
     │ H │ L │ H   H │ L
     └───┘   └───────┘

Manchester 802.3 (Mittenflanke: 1 = steigend, 0 = fallend) - jedes Bit hat zwei Halbschritte:

Bit10110
1. HälfteLHLLH
2. HälfteHLHHL
Mittenflanke

Nur Manchester ist selbsttaktend (Flanke in jedem Bit).

Z3 - Capture-Messung skizzieren Medium

Aufgabe: Skizzieren Sie, wie im Capture-Mode die Periodendauer eines Eingangssignals über RA/RB erfasst wird.

Lösung

Zähler läuft als Sägezahn. Bei der 1. steigenden Flanke wird der Zählerstand in RA geladen, bei der 2. steigenden Flanke in RB.

Eingang ┌────┐    ┌────┐
     ───┘    └────┘    └───
        ^RA        ^RB          (Flanken laden RA, RB)
Zähler   /|   /|   /|
        / |  / |  / |          (Sägezahn)

Periodendauer T = (RB − RA)·Prescaler/fCLK. Mindestmessdauer ≥ 2·T (Worst Case).

Z4 - ADC-Kennlinie (3 Bit) skizzieren Easy

Aufgabe: Skizzieren Sie die Übertragungskennlinie eines 3-Bit-ADC (Eingang 0…U).

Lösung

Treppenfunktion mit 2³ = 8 Stufen, Stufenbreite U/8:

Code
111                        ┌──
110                    ┌───┘
101                ┌───┘
100            ┌───┘
011        ┌───┘
010    ┌───┘
001 ┌──┘
000─┘
    0    U/8  ...        U   -> Eingangsspannung

Jede Stufe entspricht 1 LSB = U/8; der Quantisierungsfehler ist max. ½ LSB.

Z5 - Aliasing skizzieren Medium

Aufgabe: Ein 10-Hz-Sinus wird mit 12 Hz abgetastet. Skizzieren Sie qualitativ, welche scheinbare Schwingung entsteht.

Lösung

Es entsteht ein Alias von 2 Hz (|12 − 10| = 2 Hz). Die Abtastpunkte liegen jeweils etwas später in der 10-Hz-Schwingung und bilden eingehüllt eine langsame 2-Hz-Welle nach.

echte 10 Hz:  ∿∿∿∿∿∿∿∿∿∿   (viele schnelle Perioden)
Abtastpunkte:                      (12 Hz)
scheinbar:    \___/‾‾‾\___/          (langsame 2-Hz-Hüllkurve)

Ursache: Nyquist verletzt (fs = 12 < 2·10 = 20 Hz).

Z6 - Zwei PWM-Ausgänge skizzieren Medium

Aufgabe: Ein Zähler (RC = 1000, Set@RC) steuert TIOA (Clear@RA, RA = 300) und TIOB (Clear@RB, RB = 700). Skizzieren Sie beide.

Lösung

Beide starten bei Counter = 0 High; TIOA fällt bei 300 (30 %), TIOB bei 700 (70 %):

        0    300        700   1000
TIOA  ┌────┐                  ┌───
   ───┘    └──────────────────┘      (30 % High)
TIOB  ┌──────────────┐        ┌───
   ───┘              └────────┘      (70 % High)

Gleiche Frequenz (f = fCLK/(Prescaler·RC)), zwei unabhängige Tastverhältnisse.


Aufgabentyp: Herleitungen

Formeln herleiten / begründen (kein Auswendiglernen).

H1 - Periodendauer T_A herleiten Medium

Aufgabe: Leiten Sie T_A = RC·Prescaler/fCLK her.

Lösung

Der Zähltakt ist fCLK/Prescaler, also dauert ein Zählschritt T_step = Prescaler/fCLK. Der Zähler läuft von 0 bis RC (RC Schritte pro Periode), daher T_A = RC·T_step = RC·Prescaler/fCLK. Umgestellt: f_A = 1/T_A = fCLK/(Prescaler·RC).

H2 - Mindest-Messdauer 2·T_A begründen Hard

Aufgabe: Warum muss die Messdauer im Capture-Mode mindestens 2·T_A betragen, um eine Periode sicher zu erfassen?

Lösung

Die Messung kann zu einem beliebigen Zeitpunkt starten. Im Worst Case beginnt sie direkt nach einer steigenden Flanke - dann liegt die nächste Flanke fast eine ganze Periode entfernt, und die übernächste nochmal eine Periode später. Um zwei Flanken (= eine volle Periode) garantiert einzufangen, muss das Messfenster daher fast zwei Periodendauern breit sein -> Messdauer ≥ 2·T_A.

H3 - ADC-Auflösung und Quantisierungsfehler Medium

Aufgabe: Leiten Sie Auflösung und maximalen Quantisierungsfehler eines n-Bit-ADC (Bereich U) her.

Lösung

n Bit -> 2^n gleich große Stufen über den Bereich U -> 1 LSB = ΔU = U/2^n. Ein analoger Wert wird auf die nächste Stufe gerundet; der Abstand zur Stufenmitte ist höchstens eine halbe Stufe -> max. Fehler = ½·LSB = U/2^(n+1).

H4 - Oversampling: +1 Bit pro Faktor 4 Hard

Aufgabe: Begründen Sie, warum 4-faches Oversampling mit Mittelung 1 zusätzliches Bit Auflösung bringt.

Lösung

Mittelt man N unabhängige Messwerte, sinkt das (unkorrelierte) Rauschen um den Faktor √N in der Amplitude. Für N = 4: √4 = 2, also halbes Rauschen = eine Stufe feiner = +1 Bit effektive Auflösung. Für b zusätzliche Bits braucht man √N = 2^b, also N = 4^b (2 Bit -> 16×). Voraussetzung: genügend Rauschen und unkorrelierte Fehler.

H5 - Nyquist-Kriterium begründen Medium

Aufgabe: Warum muss fs > 2·fmax gelten?

Lösung

Eine Sinusschwingung ist erst dann eindeutig bestimmt, wenn pro Periode mehr als zwei Abtastwerte vorliegen (ein Maximum und ein Minimum reichen gerade nicht, da Phase/Amplitude mehrdeutig werden). Für die höchste Frequenz fmax bedeutet das fs > 2·fmax. Bei fs ≤ 2·fmax fallen höhere Frequenzen als Aliase in den Basisbereich zurück.

H6 - Manchester: Baudrate = 2 × Bitrate Easy

Aufgabe: Zeigen Sie, warum die Baudrate beim Manchester-Code doppelt so hoch ist wie die Bitrate.

Lösung

Manchester codiert jedes Bit durch zwei Halbschritte (zwei Pegelzustände mit Flanke in der Mitte). Ein Symbol = ein Halbschritt -> pro Bit zwei Symbole -> Symbolrate (Baud) = 2 × Bitrate. Preis: doppelte Bandbreite; Vorteil: selbsttaktend, gleichspannungsfrei.


Aufgabentyp: Register-Konfiguration

Welche TC_CMR-Felder für ein gewünschtes Verhalten? (Vorlesungs-Notation)

RK1 - PWM auf TIOA konfigurieren Medium

Aufgabe: PWM auf TIOA, High-Anteil = RA/RC, Takt MCK/8, Reset bei RC. Welche TC_CMR-Felder?

Lösung
timer->TC_CMR = TC_WAVE               // Waveform-Modus
              | TC_CPCTRG             // Counter == RC setzt Zähler zurück
              | TC_CLKS_MCK8          // Prescaler = 8
              | TC_ACPC_SET_OUTPUT    // bei RC: TIOA = High (Set)
              | TC_ACPA_CLEAR_OUTPUT; // bei RA: TIOA = Low  (Clear)

Damit ist TIOA von 0…RA High -> High-Anteil = RA/RC. ACPA/ACPC-Code: 00 = keine, 01 = Set, 10 = Clear, 11 = Toggle.

RK2 - Symmetrisches Rechteck per Toggle Medium

Aufgabe: Wie erzeugt man ein symmetrisches Rechteck ohne RA, nur mit Toggle bei RC? Welche Frequenz ergibt sich?

Lösung
timer->TC_CMR = TC_WAVE | TC_CPCTRG | TC_CLKS_MCKx
              | TC_ACPC_TOGGLE_OUTPUT;   // bei RC: TIOA toggeln

TIOA wechselt bei jedem RC-Ereignis den Pegel -> eine volle Periode dauert 2·RC-Schritte. Daher f = fCLK/(2·Prescaler·RC), Tastverhältnis automatisch 50 %.

RK3 - Capture (Periodenmessung) konfigurieren Hard

Aufgabe: Konfigurieren Sie den Capture-Mode, um die Periodendauer über RA/RB (steigende und fallende Flanke) zu messen und den Zähler beim RB-Laden zu stoppen.

Lösung
timer->TC_CMR = TC_CLKS_MCKx        // (kein TC_WAVE -> Capture-Modus)
              | TC_ABETRG           // externer Trigger über TIOA
              | TC_ETRGEDG_RISING   // Triggerflanke = steigend (Reset)
              | TC_LDRA_RISING      // RA laden bei steigender Flanke
              | TC_LDRB_FALLING     // RB laden bei fallender Flanke
              | TC_LDBSTOP;         // Zähler stoppt, wenn RB geladen -> Messwert sicher

Fehlt TC_WAVE, ist es Capture. Impulsdauer = (RB − RA)·Prescaler/fCLK. Für die Periode (Flanke-zu-Flanke) lädt man RB bei der nächsten steigenden Flanke.

RK4 - Taktquelle wählen (SAM3X) Easy

Aufgabe: Welches TC_CMR-Feld wählt den Prescaler, und welche Teiler gehören zu TIMER_CLOCK1…4 (SAM3X)?

Lösung

Das Feld TCCLKS (TC_CLKS_...): CLOCK1 = MCK/2, CLOCK2 = MCK/8, CLOCK3 = MCK/32, CLOCK4 = MCK/128 (CLOCK5 = SLCK). Beispiel TC_CLKS_MCK8 = TIMER_CLOCK2 = Prescaler 8.

RK5 - Pin an USART-Peripherie übergeben Medium

Aufgabe: Welche PIO-Register braucht es, damit ein Pin die USART-Funktion (Peripherie A) statt normaler I/O übernimmt?

Lösung
PMC->PMC_PCER0 = (1u << ID_USART1);   // Takt fürs USART-Modul
PIOA->PIO_PDR  = pinmaske;            // PIO abschalten -> Peripherie steuert Pin
PIOA->PIO_ABSR &= ~pinmaske;          // Peripherie A wählen ( |= für Peripherie B )

Merke: PIO_PER = PIO steuert, PIO_PDR = Peripherie steuert. ABSR wählt A/B.

RK6 - RC-Compare-Interrupt aktivieren Medium

Aufgabe: Wie aktiviert man den Interrupt bei RC-Compare, und was ist im Handler zwingend zu tun?

Lösung
timer->TC_IER = TC_IER_CPCS;   // Interrupt bei RC-Compare freigeben
NVIC_EnableIRQ(TCx_IRQn);       // im NVIC freischalten

void TCx_Handler(void){
    (void) timer->TC_SR;        // TC_SR LESEN -> löscht das Interrupt-Flag!
    // ... Reaktion ...
}

Ohne das Lesen von TC_SR bleibt das Flag stehen und der Interrupt feuert endlos.


Aufgabentyp: Anwendung / Design

Integrative Aufgaben, die mehrere Konzepte verbinden (wie das Praktikum).

AW1 - Ultraschall-Distanzassistent Hard

Aufgabe: Skizzieren Sie die Mess-Kette eines HC-SR04 (Trigger + Echo) und berechnen Sie die Entfernung bei einer Echodauer von 1,5 ms (340 m/s).

Lösung
  • Trigger: kurzer Impuls (max. 10 µs) -> Timer im Wave-Mode.
  • Echo: Echodauer proportional zur Distanz -> Timer im Capture-Mode (RA/RB an den Flanken des Echo-Pins).
  • Berechnung: s = v·t/2 = 340·1,5·10⁻³ / 2 = 0,510/2 = 0,255 m = 25,5 cm (Faktor ½ wegen hin und zurück).
  • Messperiode typ. 20 ms; Ergebnis als Regelgröße an den PD/PID-Regler.

AW2 - Betriebssystem-Tick (1 ms) + Sekundenzähler Medium

Aufgabe: Erzeugen Sie einen 1-ms-Interrupt (fCLK = 8 MHz, Prescaler 8) und zählen Sie daraus volle Sekunden.

Lösung

T_step = 8/8 MHz = 1 µs -> RC = 1 ms/1 µs = 1000, Compare-Mode (RC-Compare -> Interrupt + Reset).

volatile uint32_t ms = 0, sek = 0;
void TCx_Handler(void){
    (void) timer->TC_SR;      // Flag löschen
    if (++ms >= 1000) { ms = 0; sek++; }   // 1000 Ticks = 1 s
}

AW3 - Drehzahl aus Tacho-Impulsen Medium

Aufgabe: Ein Motor liefert 1 Impuls pro Umdrehung. Der Timer misst (Capture) eine Impuls-Periode von 20 ms. Wie hoch ist die Drehzahl in U/min?

Lösung

f = 1/20 ms = 50 Umdrehungen/s -> 50·60 = 3000 U/min. (Bei k Impulsen/Umdrehung: Drehzahl = f/k.)

AW4 - DC-Motor: Drehmoment & Richtung Medium

Aufgabe: Wie stellt man mit einem Timer Drehmoment und Drehrichtung eines DC-Motors ein?

Lösung
  • Drehmoment: über das Tastverhältnis eines PWM-Signals (Wave-Mode, RA/RC). Höherer High-Anteil -> mehr mittlere Spannung -> mehr Drehmoment (idealerweise linear).
  • Drehrichtung: separater Digitalausgang (Vor/Zurück) -> Umpolung über eine H-Brücke/Relais.
  • Die PWM-Frequenz nicht zu niedrig (Stottern) und nicht zu hoch (mechanische/Schaltgrenzen) wählen.

Aufgabe: Bei 115200 Baud, 8N1: (a) wie viele Zeichen/s maximal? (b) Wie lange dauert 1 KiB (1024 Byte)?

Lösung

Rahmen = 10 Bit/Zeichen. (a) 115200/10 = 11520 Zeichen/s. (b) 1024·10 / 115200 = 10240/115200 ≈ 0,0889 s ≈ 89 ms.

AW6 - LED-Matrix per I²C ansteuern Medium

Aufgabe: Skizzieren Sie die I²C-Sequenz (Master Transmitter), um eine 8×8-LED-Matrix zeilenweise zu beschreiben.

Lösung
  1. Start -> Slave-Adresse (7 Bit) + R/W = 0 (Write) -> auf ACK warten.
  2. Ggf. Registeradresse/Kommando-Byte senden (ACK).
  3. 8 Datenbytes (je 1 Zeile der Matrix) nacheinander, jeweils MSB zuerst, nach jedem Byte ACK.
  4. Stop.

Am SAM3X (TWI): Slave-Adresse in TWI_MMR (MREAD = 0), je Byte auf TXRDY warten, in THR schreiben, beim letzten Byte STOP im TWI_CR, am Ende auf TXCOMP warten. Pull-Ups an SDA/SCL nicht vergessen.


Startseite · → Probeklausur 1 · → Formelsammlung