Systematische Fehlersuche
Easy · 20 min · Kostenlos
Ziel & Lerninhalt
Lerne die Vorgehensweise professioneller Ingenieure bei der Fehleranalyse.
- Das Prinzip 'Teile und Herrsche' (Divide and Conqür) anwenden.
- Systematisch Kontakte, Stromversorgung und Signale prüfen.
- Aussagekräftige Log-Ausgaben im Code platzieren.
Erklärung & Wissen
Basic
Wenn ein selbstgebautes Projekt nicht funktioniert, gerät man leicht in Panik. Der Schlüssel zum Erfolg ist die systematische Fehlersuche! Statt wild Kabel umzustecken, prüfen wir Schritt für Schritt: Ist Strom auf dem Board? Sitzen alle Steckverbindungen fest? Sendet der Sensor überhaupt Signale? So finden wir den Fehler garantiert.
Medium
Wir teilen das Problem auf (Divide and Conqür). Funktioniert die Hardware? Das testen wir mit einem simplen Beispielcode (z. B. 'Blink'). Funktioniert die Software? Das prüfen wir über Log-Ausgaben im Seriellen Monitor. Mit einem Multimeter messen wir an kritischen Punkten die Spannung, um Wackelkontakte oder Kurzschlüsse sofort zu entlarven.
Expert
Professionelles Hardware-Debugging nutzt systematische Signalverfolgung. Wir prüfen die Versorgungsspannung auf Einbrüche (Rauschen, Ripple) mittels Oszilloskop. Bei Digitalsignalen (z. B. I2C, SPI) spüren wir Bus-Konflikte mit einem Logic Analyzer auf. In der Software setzen wir Hardware-Breakpoints über JTAG-Debugger, um Registerinhalte und Speicherbereiche zur Laufzeit zu inspizieren, anstatt den Ablauf durch langsame serielle Ausgaben zu stören.
Fun Fact
Der Begriff 'Bug' (Käfer) für einen Computerfehler entstand 1947, als die berühmte Informatikerin Grace Hopper eine echte, tote Motte entdeckte, die ein Relais im Riesencomputer Mark II blockierte. Sie klebte die Motte ins Logbuch mit dem Vermerk: 'First actual case of bug being found.'
- Divide and Conqür
- Das wichtigste Debugging-Prinzip: Das Problem in der Mitte halbieren und testen — so findet man den Fehler in log₂(n) Schritten statt n. Funktioniert nicht: Sensor → Kabel → Mikrocontroller → Code → Ausgabe. Halbieren: Funktioniert der Mikrocontroller? → Simples 'Blink'-Programm läuft → Fehler liegt vor dem Controller. Funktioniert der Sensor? → Direkt mit Multimeter messen → Wert ok → Fehler liegt im Kabel oder Anschluss. Jedes Mal wird die mögliche Fehlerzone halbiert.
- Serieller Monitor
- Das wichtigste Debugging-Werkzeug für Arduino-Code — zeigt Werte und Zustände in Echtzeit im PC. `Serial.begin(9600)` in setup(), dann `Serial.println(wert)` in loop(). So kann man jede Variable in Echtzeit sehen. Wichtige Faustregel: Wenn etwas nicht funktioniert, immer zuerst `Serial.print()` einbauen und schauen was das Programm tatsächlich macht vs. was man erwartet. Baudrate im Monitor mit dem Code übereinstimmen — Mismatch → Zeichensalat.
- Spannungsmessung mit Multimeter
- Das erste Hardware-Debugging-Tool: Spannung an den richtigen Punkten messen — Strom vorhanden? Signal da? Debugging-Sequenz: (1) Ist 5V auf dem VCC-Pin? (2) Ist GND wirklich GND (0V)? (3) Was ist die Spannung am Sensor-Ausgang? (4) Kommt das Signal am Mikrocontroller-Pin an? Häufige Fehler: GND nicht verbunden (floatender Pin = zufällige Werte), falscher Pin gewählt, Stecker nur scheinbar verbunden (wackelt).
- Floating (schwebender) Pin
- Ein nicht verbundener Eingang des Mikrocontrollers nimmt zufällige Werte an — häufige Fehlerursache bei digitalen Eingängen. CMOS-Eingänge haben extrem hohe Impedanz. Ohne definierte Beschaltung schwimmt das Eingangssignal zwischen High und Low — oft genug, um zufällige Auslesungen zu erzeugen. Lösung: Pull-Up-Widerstand (10 kΩ gegen VCC) oder `INPUT_PULLUP` im Arduino-Code. Symptom: Digitaler Eingang reagiert auf Annähern der Hand oder ist immer abwechselnd 0 und 1 ohne ersichtlichen Grund.
Praktischer Aufbau: Debugging-Challenge
Wir bauen absichtlich einen Fehler in eine Schaltung ein und spüren ihn systematisch auf.
- ProtoPeaks Mainboard
- Eine LED mit Vorwiderstand
- Jumperkabel
Schaltung verkabeln
Verbinde eine LED mit Vorwiderstand an Pin 13 und GND des Mainboards. Stecke das Kabel absichtlich auf den falschen Pin daneben.
Tipp: Messe nun mit dem Multimeter die Spannung am Ausgangs-Pin, um zu sehen, ob der Controller schaltet.
Stecke die Anode (langes Bein) der LED an einen digitalen Pin, die Kathode an den Vorwiderstand und diesen an GND. Simuliere einen Fehler durch Umstecken der Kathode auf einen ungenutzten Pin.
// ProtoPeaks - Debugging Challenge
const int ledPin = 13;
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
}
void loop() {
Serial.println("LED einschalten...");
digitalWrite(ledPin, HIGH);
delay(1000);
Serial.println("LED ausschalten...");
digitalWrite(ledPin, LOW);
delay(1000);
}- Der serielle Monitor zeigt 'LED einschalten', aber die LED bleibt aus — Der Fehler liegt in der Hardware. Kontrolliere die Steckrichtung der LED (Polung) und den festen Sitz der Kabel im Breadboard.
Kurzzusammenfassung
Fehler sind keine Rückschläge, sondern die besten Gelegenheiten, das System in seiner Tiefe vollkommen zu verstehen.