wedsamuel1230/embedded-engineering-skills

circuit-debugger

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

查看源码

使用方法

  1. 复制安装命令,在自己的智能体环境安装前先检查源码包。
  2. 从原始文档核对所需工具、凭据和支持的宿主。
  3. 说明输入材料与期望交付物,并对照来源检查输出。
npx skills add https://github.com/wedsamuel1230/embedded-engineering-skills --skill circuit-debugger

开始前需了解

  • 安装不包含模型订阅、API 额度或访问文件的权限。
  • 仓库星数和安装量反映活跃情况,不等于独立质量或安全测试。
仓库原始内容

按源仓库内容呈现,保留标题、案例、代码、表格、链接以及原文引用的演示图片。

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.

按任务相关推荐

来自同一仓库

更多 Skills

全部 Skills
wedsamuel1230
社区

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.

安装量
1
GitHub Stars
26
最近更新
10月15日
wedsamuel1230
社区

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.

安装量
1
GitHub Stars
26
最近更新
10月15日
wedsamuel1230
社区

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.

安装量
1
GitHub Stars
26
最近更新
10月15日
wedsamuel1230
社区

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.

安装量
1
GitHub Stars
26
最近更新
10月15日