First-flash test checklist for the OpenScope 2C53T custom firmware on real hardware. Designed to verify each major subsystem with minimal equipment.
You have:
- OpenScope 2C53T (the device itself)
- Arduino (any model — Uno, Nano, etc.)
- HiLetgo USB logic analyzer (FX2LP-based, 8ch)
- Scope probes (included with 2C53T)
- Multimeter leads (included with 2C53T)
- USB cable for firmware flashing
- A battery or bench power supply (or just the device's own battery)
Nice to have but not required:
- Known resistors (e.g., 1k, 4.7k, 10k — a basic resistor kit)
- Known capacitor (e.g., 100nF ceramic)
- A diode (1N4148 or any common silicon diode)
- Jumper wires / breadboard
- SWD debugger (ST-Link, J-Link, or Black Magic Probe)
Before flashing custom firmware, capture some reference data with the stock firmware.
- Power on device, note firmware version on splash/about screen
- Take photos of each mode screen (scope, meter, siggen, settings)
- Measure a known voltage (e.g., AA battery ~1.5V) with the multimeter — note reading
- Run the signal generator at 1kHz sine, probe the output with CH1 — screenshot
- Note any bugs or quirks you observe (for comparison later)
Why: This gives you a baseline. If something doesn't work in custom firmware, you can check whether it worked in stock.
First power-on with custom firmware. Nothing connected, just verify the basics.
- Device powers on without hanging
- Splash screen appears ("OpenScope 2C53T")
- Splash clears after ~2 seconds
- Scope screen draws with grid, status bar, info bar
- Uptime counter increments in status bar (shows time ticking)
- MENU cycles: Scope → Meter → SigGen → Settings → Scope
- Each mode screen draws correctly (no garbage pixels, no freezing)
- Status bar updates mode name (SCOPE / METER / SIGGEN / SETTINGS)
- Settings > Display Mode > OK cycles themes
- Verify at least 2 themes render correctly (Dark Blue, Classic Green)
- Return to scope mode — theme persists
- UP/DOWN navigates settings menu (highlight moves)
- OK enters sub-menus (Oscilloscope Settings, Math/Persist, Component Tester, About)
- MENU returns from sub-menus
- About screen shows device info, heap free, pool status
Pass criteria: Device boots, all 4 modes render, navigation works, no crashes.
Simplest real-world measurement — use the built-in DMM to measure a battery.
- Switch to Multimeter mode
- Plug multimeter leads into COM and V/Ω/C jacks
- Measure a fresh AA battery (expect ~1.5V)
- Reading displayed on screen (verify it's in the right ballpark)
- LEFT/RIGHT cycles through sub-modes (all 10 render without crash)
- OK cycles: Full → Chart → Stats → Full
- Chart layout shows strip chart updating
- Stats layout shows min/max/avg values
- AUTO toggles REL indicator (shows "REL" badge)
- TRIGGER toggles HOLD (shows "hold" then "HOLD" when stable)
- SELECT resets min/max/avg
- Switch to Resistance mode (LEFT/RIGHT to sub-mode 6)
- Measure a known resistor (e.g., 4.7kΩ) — verify reading is reasonable
- Touch leads together — should show near 0Ω
- Switch to Continuity mode (sub-mode 7)
- Touch leads together — buzzer should sound AND screen should flash green
- Separate leads — "OPEN" displayed, no flash
- Switch to Diode mode (sub-mode 8)
- Measure a silicon diode forward — expect ~0.6V reading
- Reverse — should show "OL" or very high reading
Pass criteria: DMM reads a battery voltage within ±10% of expected. Resistance, continuity, and diode modes respond to real components.
Use the device's own signal generator to test the scope — no external equipment needed.
- Switch to SigGen mode
- OK to enable output (should show "OUTPUT ON")
- PRM to set frequency to 1kHz
- SELECT to cycle waveforms (sine, square, triangle)
- Connect CH1 probe to signal generator output (BNC or banana depending on hardware)
- Switch to Scope mode
- Should see waveform on screen
- Verify shape matches expected (sine = smooth curve, square = flat tops)
- Verify frequency readout shows ~1kHz in measurement badges
- UP/DOWN adjusts V/div (popup shows value, waveform scales)
- LEFT/RIGHT adjusts timebase (popup shows value, waveform stretches/compresses)
- CH1 cycles coupling (DC → AC → GND — popup confirms)
- OK toggles Run/Stop (waveform freezes when stopped)
- Verify: changing V/div or timebase while stopped redraws the frozen waveform
- Connect CH2 probe to same signal gen output (or use a jumper wire)
- Both CH1 and CH2 traces should be visible
- CH2 button cycles coupling independently
- MOVE cycles trigger edge (Rising/Falling)
- Verify waveform stabilizes differently with each edge
- Trigger status badge shows "Auto" / "Trig'd"
- TRIGGER button cycles cursor mode (Off → Vertical → Horizontal → Both)
- UP/DOWN moves active cursor
- LEFT/RIGHT switches cursor selection
- Readout shows delta-t, frequency, delta-V values
- PRM cycles view: Time → FFT → Split → Waterfall
- FFT view should show a spike at 1kHz (from signal gen)
- PRM returns to Time view
- SAVE button shows "SAVED #1" popup (no crash)
Pass criteria: Signal generator produces visible waveform on scope. Controls adjust display correctly. FFT shows expected frequency peak.
Use an Arduino to generate known signals for more precise testing.
Upload a simple sketch that outputs test signals:
// Arduino test signal generator for OpenScope validation
void setup() {
Serial.begin(9600); // UART at 9600 baud
pinMode(3, OUTPUT); // PWM output (490Hz or 980Hz)
pinMode(13, OUTPUT); // 1Hz blink
analogWrite(3, 128); // 50% duty cycle PWM
}
void loop() {
// 1Hz blink on pin 13
digitalWrite(13, HIGH);
Serial.println("HELLO"); // UART test data
delay(500);
digitalWrite(13, LOW);
Serial.println("WORLD");
delay(500);
}- Connect CH1 to Arduino pin 3
- Scope should show ~490Hz square wave (PWM)
- Adjust timebase until you see clean square wave
- Frequency badge should read ~490Hz
- Duty cycle badge should read ~50%
- Connect CH1 to Arduino pin 13
- Set timebase to slow (200ms/div or similar)
- Should see 1Hz square wave (0.5s high, 0.5s low)
- Connect CH1 to Arduino TX (pin 1)
- If UART decode is active, should show decoded "HELLO" / "WORLD"
- (Skip if decode UI not yet wired to display)
Connect an I2C device (e.g., MPU6050, BMP280, or any I2C sensor) to the Arduino, then probe SDA/SCL:
- CH1 on SCL, CH2 on SDA
- Should see clock and data waveforms
- If I2C decode is active, should show addresses and data
Pass criteria: Arduino-generated signals display correctly with expected frequency and duty cycle.
Use the HiLetgo USB logic analyzer with sigrok/PulseView on your computer to verify the scope's measurements.
- Connect logic analyzer to same Arduino signals (pin 3 PWM, pin 1 TX)
- Open PulseView, set sample rate to 1MHz
- Capture same signals the scope is displaying
- PWM frequency: scope reading vs PulseView measurement (should agree within 1%)
- PWM duty cycle: scope vs PulseView
- UART baud rate: scope vs PulseView (both should detect 9600)
Pass criteria: Scope measurements agree with logic analyzer within reasonable tolerance.
- Press buttons rapidly in all modes for 30 seconds
- No crashes, no freezes, no display corruption
- Watchdog does not trigger (no red fault screen)
- With signal gen output active and CH1 connected
- Rapidly cycle: Scope → FFT → Meter → SigGen → Settings → Scope
- All mode transitions clean, no stale pixels
- Leave scope running with signal gen loopback for 10+ minutes
- Verify no drift, no crashes, uptime counter keeps incrementing
- Check About screen: heap free should be stable (not decreasing)
Pass criteria: No crashes or watchdog resets during stress testing.
- Settings > Component Tester
- Connect a known resistor (e.g., 4.7kΩ)
- Should show measured value with PASS/FAIL
- OK enters Resistor Calculator — UP/DOWN/LEFT/RIGHT navigate color bands
- SELECT to switch to Capacitor mode
- Measure a known capacitor (e.g., 100nF ceramic)
- Should show measured value and ESR
- SELECT to switch to Diode mode
- Measure forward voltage of a silicon diode
- Should show ~0.6V with PASS status
Pass criteria: Component readings are in the right ballpark for known parts.
| Test | Phase | Result | Notes |
|---|---|---|---|
| Boot & splash | 1.1 | ||
| Mode switching | 1.2 | ||
| Theme switching | 1.3 | ||
| Settings navigation | 1.4 | ||
| DC Voltage (battery) | 2.1 | Expected: ~1.5V | |
| Meter layouts | 2.2 | ||
| REL / HOLD | 2.3 | ||
| Resistance | 2.4 | ||
| Continuity | 2.5 | ||
| SigGen output | 3.1 | ||
| Scope loopback | 3.2 | ||
| Scope controls | 3.3 | ||
| Dual channel | 3.4 | ||
| Trigger | 3.5 | ||
| Cursors | 3.6 | ||
| FFT | 3.7 | ||
| Screenshot | 3.8 | ||
| Arduino PWM | 4.2 | Expected: ~490Hz, 50% | |
| Arduino 1Hz | 4.3 | ||
| Logic analyzer compare | 5.2 | ||
| Button stress | 6.1 | ||
| Mode cycling | 6.2 | ||
| Long-duration run | 6.3 | ||
| Component: resistor | 7.1 | ||
| Component: capacitor | 7.2 | ||
| Component: diode | 7.3 |
- Phase 0 (stock firmware baseline) is optional but highly recommended — gives you a reference point.
- Phase 1-3 are the critical tests — if these pass, the firmware is fundamentally working.
- Phase 4-5 provide precision validation against external instruments.
- Phase 6-7 test robustness and secondary features.
- If anything fails, note the exact step, take a screenshot (SAVE button or phone camera), and document what you see vs what you expected.
- SWD debugger connection enables live debugging if anything goes wrong — highly recommended to solder the SWD pads before starting.