A bench test instrument for the 1991 GM R/V (square body) electronic instrument cluster. Built as part of a drivetrain swap into a 1985 C10 pickup — the cluster is being adapted from a 1991 R10 Suburban to replace the original cable-driven mechanical cluster.
The 1990–1991 full-size GM R/V Suburban, K5 Blazer, and Jimmy were the last of the square body platform and the first to use a fully electronic instrument cluster. The speedometer receives a 2,000 pulse-per-mile DC square wave signal from an external DRAC (Digital Ratio Adapter Controller) module rather than a mechanical cable. This makes the cluster compatible with modern electronic transmissions when paired with a signal adapter.
This tester was built to:
- Verify the cluster is functional before installation
- Roll the mechanical odometer forward to match the truck's actual mileage
- Provide a reusable bench tool for future cluster servicing
- Donor cluster: 1991 R10 Suburban electronic cluster (speedometer, tachometer, oil pressure, water temp, fuel, voltmeter, all indicators)
- Destination vehicle: 1985 Chevrolet C10 pickup
- Transmission: 4L65E or 4L80E with electronic VSS (40-tooth reluctor)
- DRAC replacement: Dakota Digital SGI-100BT, calibrated for axle ratio and tire size
- Tachometer: Custom build — OEM air-core motor, Intellitronix replacement PCB (CS289-based), repainted fuel gauge face with custom tach decal
- Connector adapter: Inline re-pin adapter translating the 18-pin 1985 C10 cluster connector to the 1991 Suburban pin assignments
| Subsystem | Key Components |
|---|---|
| Microcontroller | Raspberry Pi Pico 2 (RP2350) |
| Display | SSD1306 128×64 OLED, I2C |
| User input | EC11 rotary encoder with push button |
| Tach output | Logic-level MOSFET + resistive/inductive load → Intellitronix PCB |
| Speedo output | Logic-level MOSFET + 4.7 kΩ pull-up to +12 V → Cluster pin 18 (Circuit 824) |
| Gauge simulation | 3× MCP41010 SPI digital potentiometer (oil, temp, fuel) |
| Indicator outputs | 2× ULN2003A Darlington driver array |
| Soft shutdown | RC circuit (22 kΩ + 2200 µF, 2N2222 emitter follower) — tach needle returns to zero on power-off |
| Power | 12 V input → buck module → 5 V (Pico VSYS); polarity protection diode; 1 A fuse |
See bom/Cluster_Tester_BOM.ods for the full bill of materials and feature checklist.
The OEM DRAC output is an open-collector DC square wave. The cluster provides an internal 10 kΩ pull-up to approximately 10–12 V. The tester replicates this exactly:
Signal: 0 V / ~12 V square wave (open-collector, NPN MOSFET to GND)
Rate: 2,000 pulses per mile
Formula: Hz = MPH × 2000 / 3600
Example: 60 MPH → 33.3 Hz
The signal voltage is not 5 V logic. Feeding a raw 3.3 V or 5 V signal directly from a microcontroller will not reliably drive the speedometer.
Signal: Square wave, same principle as ignition coil negative terminal
Formula: Hz = (RPM × cylinders) / 120
Example: 3000 RPM, 8-cyl → 200 Hz
The Intellitronix CS289-based PCB has no internal voltage regulator — drive current is proportional to supply voltage, which is what makes the soft shutdown RC circuit effective.
Resistance-to-ground signals. All three gauges use the same OEM sender range:
| Gauge | Confirmed Range | Notes |
|---|---|---|
| Fuel | 0–90 Ω (empty→full) | Standard GM range; matches 1985 C10 sender |
| Oil pressure | TBD — measure from donor | Verify before finalising digital pot selection |
| Water temp | TBD — measure from donor | Verify before finalising digital pot selection |
Modes cycle with a short press of the encoder button. Values adjust by rotating the encoder. Long press enters settings for the active mode.
| Mode | Function |
|---|---|
| Tach: Direct | Encoder sets RPM directly, 0–8,100 RPM |
| Tach: Sweep | Ramps between configured start/end RPM at set rate; bounce or one-shot |
| Speedo | Encoder sets simulated MPH; display shows Hz and seconds-per-mile for odometer rolling |
| Gauge Test | Steps through oil, temp, and fuel gauges; sweeps resistance across full range |
| Indicator Test | Cycles each indicator lamp on/off in sequence |
The 1991 R10 Suburban cluster uses an 18-pin connector. The tester wires to this directly.
| Pin | Circuit | Function | Signal Type |
|---|---|---|---|
| 1 | 11 | High beam indicator | +12 V to illuminate |
| 2 | 150 | Ground | GND |
| 3 | 31 | Oil pressure gauge | Resistance to GND |
| 4 | 39 | +12 V ignition (temp, oil, volt) | Switched +12 V |
| 5 | 25 | Battery indicator | Switched GND to illuminate |
| 6 | 592 | DRL — Canada only | N/C |
| 7 | 69 | Low coolant indicator | +12 V to illuminate |
| 8 | 35 | Water temp gauge | Resistance to GND |
| 9 | 8 | Panel lights | +12 V |
| 10 | 14 | Left turn indicator | +12 V, ~1 Hz blink |
| 11 | 15 | Right turn indicator | +12 V, ~1 Hz blink |
| 12 | 419 | 4×4 indicator | +12 V to illuminate |
| 13 | 237 | Seatbelt indicator | +12 V to illuminate |
| 14 | 30 | Fuel gauge | Resistance to GND |
| 15 | 33 | Parking brake indicator | +12 V to illuminate |
| 16 | 419 | SES / Check Engine | GND to illuminate |
| 17 | 39 | +12 V ignition (fuel, speedo, indicators) | Switched +12 V |
| 18 | 824 | VSS speedometer signal | 0–12 V square wave, 2,000 PPM |
The voltmeter reads directly off the cluster's own supply (Pins 4 and 2) — no separate sender. Vary bench supply voltage to exercise this gauge.
cluster-tester/
├── firmware/ # RP2350 source (MicroPython or Arduino/C++)
├── hardware/
│ ├── kicad/ # KiCad 9 schematic and PCB project
│ └── bom/ # Cluster_Tester_BOM.ods
├── docs/
│ ├── Instrument_Cluster_Wiring.pdf # Connector pinout reference
│ └── Gauge_Calculations.pdf # Frequency and RC circuit workings
└── README.md
- Signal specifications confirmed (2,000 PPM, 12 V open-collector)
- Cluster connector pinout documented and verified
- Inline connector re-pin adapter built
- Tachometer PCB (Intellitronix) tested with original Arduino sketch
- BOM complete
- KiCad schematic
- PCB layout
- RP2350 firmware
- Populated board bring-up
- Cluster bench test
- Truck installation
- Dakota Digital SGI-100BT — DRAC replacement used in the truck
- Earle Philhower RP2040 Arduino Core — Recommended Arduino core for RP2350
- U8g2 Display Library — OLED driver, supports SSD1306 on RP2350