Skip to content

ULN2803A

Eight-channel Darlington sink driver: each output pulls LOW while its input is HIGH.

Live catalog

Prefer labwired_describe with the catalog id over guessing pins or addresses.

Status at a glance

Aspect Status
Catalog id uln2803
Bus GPIO (logic_gate)
Address —
Source configs/devices/uln2803.yaml (declarative, no Rust model)
Datasheet Toshiba ULN2803APG/AFWG (2010-12-03) schematic and electrical characteristics; TI ULN2803C SLRS076B Table 4-1 for pin names
Tier smoke-proven (pad-level tests on a NUCLEO-L476RG bus: crates/core/tests/everyday_sensor_set.rs)

Pins / attachment

Pin / net Role
IN1..IN8 (1B..8B / I1..I8) Inputs — MCU outputs, keys in1_pin..in8_pin
OUT1..OUT8 (1C..8C / O1..O8) Outputs, keys out1_pin..out8_pin
COM, GND Not modelled

Every role must be bound in a placement.

Support matrix

Behavior Status Notes
OUTn = !INn, eight independent channels ✅
Propagation delay ⚠️ One delay, 200 ns (tOFF); tON is 100 ns on silicon
Open collector ⚠️ An OFF output is driven HIGH, standing in for the load or pull-up
Output current, VCE(sat), COM clamp diodes ❌
Input threshold (VIN(ON) ≥ 3.5 V recommended) ❌ Any logic-high pad turns the channel on

Stimulus

The input pads themselves; there are no host channels.

How to run

  1. Place the part and an MCU in Playground, or add it to a system YAML:
    external_devices:
      - id: "driver"
        type: "uln2803"
        connection: "gpio"
        config:
          in1_pin: "PC0"
          out1_pin: "PB0"
          # … in2_pin/out2_pin through in8_pin/out8_pin
    
  2. Agent: labwired_list → labwired_describe id=uln2803 → wire → labwired_validate → labwired_run / labwired_verify.
  3. Pad-level smoke: cargo test -p labwired-core --test everyday_sensor_set — all-off, all-on, both checkerboards and a walking one, read back through the GPIO input registers. The negative control proves the check fails against outputs stuck low, stuck high, or following the inputs; uln2803_tracks_stimulus walks the 200 ns delay cycle by cycle.

Limitations

  • A channel with nothing connected floats on a bench. Here it reads high.

See the YAML header for the full datasheet trace and every named approximation.