wedsamuel1230/embedded-engineering-skills

circuit-debugger

Systematic hardware debugging guide for Arduino/ESP32/RP2040 circuits.

Quelltext ansehen

Verwendung

  1. Installationsbefehl kopieren und das Quellpaket vor der Installation in der eigenen Agentenumgebung prüfen.
  2. Benötigte Werkzeuge, Zugangsdaten und Hosts im Original prüfen.
  3. Eingabe und gewünschtes Ergebnis beschreiben und die Ausgabe mit den Quellen abgleichen.
npx skills add https://github.com/wedsamuel1230/embedded-engineering-skills --skill circuit-debugger

Vor dem Start

  • Die Installation umfasst weder Modellabo noch API-Kontingent oder Dateizugriffsrechte.
  • Sterne und Installationen zeigen Aktivität, keine unabhängige Qualitäts- oder Sicherheitsprüfung.
Originales Skill-Dokument

Aus dem Quell-Repository gerendert; Überschriften, Beispiele, Code, Tabellen, Links und Bilder bleiben erhalten.

Circuit Debugger

Systematic approach to diagnosing hardware issues in maker projects.

Resources

This skill includes bundled tools and references:

  • scripts/generate_debug_sketch.py - Arduino sketch generator for I2C scanner, GPIO tester, ADC checker, PWM tester
  • references/measurement-procedures.md - Comprehensive multimeter and oscilloscope guide

Quick Start

Generate I2C scanner:

bash
uv run --no-project scripts/generate_debug_sketch.py --i2c --output i2c_scanner.ino

Generate GPIO tester:

bash
uv run --no-project scripts/generate_debug_sketch.py --gpio --pins 2,3,4,5 --output gpio_test.ino

Generate all debug sketches:

bash
uv run --no-project scripts/generate_debug_sketch.py --all

Interactive mode:

bash
uv run --no-project scripts/generate_debug_sketch.py --interactive

Trigger Phrases

  • "My circuit doesn't work"
  • "Component is getting hot"
  • "No power to the board"
  • "Sensor not responding"
  • "Intermittent/random failures"
  • "Works sometimes, not others"

Debugging Protocol

Phase 1: Power System Check (Do First!)

Visual Inspection (30 seconds)

□ Check for smoke, burn marks, or melted plastic
□ Verify power LED on microcontroller is lit
□ Look for loose wires or cold solder joints
□ Confirm correct polarity on polarized components (LEDs, caps, diodes)

Multimeter Tests (Set to DC Voltage)

Test Point              | Expected Value  | If Wrong
------------------------|-----------------|------------------
VCC to GND on MCU       | 3.3V or 5V      | Check regulator, power source
Sensor VCC pin          | Match datasheet | Check wiring, broken trace
Motor driver VCC        | Logic + Motor V | Separate supplies needed?
Battery terminals       | Rated voltage   | Dead/discharged battery

Common Power Issues:

SymptomLikely CauseFix
No voltage anywhereDisconnected power, blown fuseCheck continuity from source
Low voltage (< 4V when expecting 5V)Overloaded supply, bad regulatorReduce load, check current draw
Voltage drops under loadUndersized power supplyCalculate total current, upgrade PSU
Reverse polaritySwapped wiresCheck all connections, may have damaged components

Phase 2: Ground Continuity

Check the design: Non-isolated logic normally needs a shared reference. Preserve intentional isolation; do not bond isolated/high-voltage domains just to satisfy a continuity test. Power down before continuity/resistance tests.

Multimeter: Set to CONTINUITY (beep mode)

Test these pairs - ALL should beep:
□ Arduino GND ↔ Sensor GND
□ Arduino GND ↔ Motor driver GND  
□ Arduino GND ↔ Display GND
□ Arduino GND ↔ Power supply negative
□ All breadboard GND rails connected

Ground Problems Cause:

  • Erratic sensor readings
  • I2C/SPI communication failures
  • Motors behaving randomly
  • Displays showing garbage

Phase 3: Signal Verification

Digital Signals (Set multimeter to DC Voltage)

cpp
// Add this debug code to verify pin states
void debugPins() {
    Serial.println("=== Pin States ===");
    Serial.print("D2: "); Serial.println(digitalRead(2) ? "HIGH" : "LOW");
    Serial.print("D3: "); Serial.println(digitalRead(3) ? "HIGH" : "LOW");
    // Add more pins as needed
}

Expected Readings:

Signal TypeHIGHLOWFloating (Bad!)
5V Logic4.5-5.5V0-0.5V1-3V unstable
3.3V Logic2.8-3.6V0-0.3V0.8-2V unstable

I2C Troubleshooting:

cpp
// Run this I2C scanner first
#include <Wire.h>

void setup() {
    Serial.begin(115200);
    Wire.begin();
    
    Serial.println("I2C Scanner");
    for (uint8_t addr = 1; addr < 127; addr++) {
        Wire.beginTransmission(addr);
        if (Wire.endTransmission() == 0) {
            Serial.print("Found device at 0x");
            Serial.println(addr, HEX);
        }
    }
}
void loop() {}
I2C ProblemCheck
No devices foundSDA/SCL swapped? Pull-ups present? Correct address?
Address conflictTwo devices same address? Check AD0/AD1 pins
IntermittentWeak pull-ups (try 4.7kΩ), long wires, noise

Phase 4: Component Isolation

The Divide-and-Conquer Method:

1. Disconnect ALL external components
2. Verify MCU works alone (blink LED)
3. Add ONE component at a time
4. Test after EACH addition
5. When failure occurs, problem is last added component

Component-Specific Tests:

LEDs:

□ Correct polarity? (long leg = anode = positive)
□ Current limiting resistor present? (330Ω-1kΩ typical)
□ Test LED alone with battery + resistor
□ PWM pin? Try digitalWrite first

Motors/Servos:

□ Never connect directly to MCU pin (use driver!)
□ Separate power supply for motors
□ Flyback diode on DC motors
□ Check stall current vs driver rating

Sensors:

□ Correct operating voltage (3.3V vs 5V!)
□ Level shifter needed for mixed voltage?
□ Decoupling capacitor (100nF) near VCC pin
□ Pull-up resistors for I2C (4.7kΩ typical)

Phase 5: Software vs Hardware

Quick Software Test:

cpp
// Minimal test - does the MCU even run?
void setup() {
    pinMode(LED_BUILTIN, OUTPUT);
    Serial.begin(115200);
    Serial.println("MCU is alive!");
}

void loop() {
    digitalWrite(LED_BUILTIN, HIGH);
    delay(500);
    digitalWrite(LED_BUILTIN, LOW);
    delay(500);
    Serial.println("heartbeat");
}
If This WorksIf This Fails
Hardware likely OK, check your codeCheck USB cable, bootloader, board selection

Quick Reference: Common Failures

SymptomFirst CheckSecond CheckThird Check
Nothing worksPower supplyUSB cableBoard selection in IDE
Gets hotShort circuitReversed polarityOvercurrent
Works then stopsPower brownoutOverheatingMemory leak
Erratic behaviorFloating inputsMissing groundsNoise/interference
I2C failsPull-upsAddressWire length
Motor jerkyPower supplyPWM frequencyDriver current

Multimeter Quick Guide

Measurement    | Setting      | Probes
---------------|--------------|------------------
DC Voltage     | V⎓ (20V)     | Red=signal, Black=GND
Continuity     | ))) or Ω     | Either direction
Resistance     | Ω            | Component out of circuit!
Current        | A or mA      | IN SERIES (break circuit)

When to Ask for Help

If after this protocol you still can't find the issue:

  1. Take clear photos of your wiring
  2. Draw a schematic (even hand-drawn)
  3. List exact components with part numbers
  4. Share your complete code
  5. Describe what you expected vs what happened

References

Shared Output Contract

Use the shared Arduino skill contract: state assumptions, required tools and versions, implementation steps, tests/evidence by proof stage, known limitations, and recovery/security notes.

Verwandte Aufgaben

aus demselben Repository

Weitere Skills

Alle Skills
wedsamuel1230
Community

arduino-code-generator

Generate Arduino and embedded C++ snippets for sensors, actuators, buses, state machines, timing, data logging, and hardware abstraction. Use when a user requests implementation code and provide the exact board, framework, toolchain, pins, voltage, memory, and library versions first. Bundled templates target UNO, ESP32, and RP2040; document unsupported board or vendor-framework behavior instead of guessing.

Installationen
1
GitHub Stars
26
Aktualisiert
15. Okt.
wedsamuel1230
Community

arduino-workflow-router

Route Arduino and embedded-system requests across Arduino IDE, Arduino CLI, PlatformIO, and vendor-specific tools. Use when a request combines firmware, board constraints, electronics, power, networking, calibration, enclosure, upload, debugging, OTA, or maintenance, or when the exact board or toolchain is not yet clear.

Installationen
1
GitHub Stars
26
Aktualisiert
15. Okt.
wedsamuel1230
Community

datasheet-interpreter

Extracts key specifications from component datasheet PDFs for maker projects. Use when user shares a datasheet PDF URL, asks about component specs, needs pin assignments, I2C addresses, timing requirements, or register maps. Downloads and parses PDF to extract essentials. Complements datasheet-parser for quick lookups.

Installationen
1
GitHub Stars
26
Aktualisiert
15. Okt.
wedsamuel1230
Community

error-message-explainer

Explain Arduino and embedded compiler, upload, boot, power, and runtime errors in plain English. Use when a user shares an error or failure from Arduino IDE, Arduino CLI, PlatformIO, or a vendor-specific tool. Separate build, upload, hardware, and system evidence and give a board-specific recovery path without assuming UNO, ESP32, or RP2040 behavior.

Installationen
1
GitHub Stars
26
Aktualisiert
15. Okt.