Live demo — data resets daily at 03:00 UTC. Nothing you enter is saved. Server UI →

ESH10000540 - Fixture Electronics Sparrow Module

Overview

The ESH10000540 is a comprehensive fixture interface module for Sparrow test systems, providing multi-function analog/digital I/O, power management, audio measurement, communication interfaces, and intelligent connector identification through LED color coding.

Description

The Fixture Electronics Sparrow module serves as a sophisticated interface between Sparrow test systems and custom test fixtures. It integrates multiple AD5593R and ADS7828 ADC devices, configurable power supplies, audio measurement capabilities, latch testing, ground switching loads, RS485 differential measurement, and visual connector identification through an RGB LED system.

Key Features:

  • 12 Multi-Purpose I/O Channels (FE_MPIO00-11): Bidirectional analog/digital I/O

    • AD5593R-based (dual chips)
    • 12-bit ADC/DAC resolution
    • Analog and pseudo-digital modes
    • 0-5V range (double ADC/DAC mode)
  • Configurable Power Supplies: Fixture power management

    • 5× External power rails (12V, 3.3V, 1.8V, VADJ, VIO)
    • Individual enable control per rail
    • Power-good status monitoring per rail
    • Fault detection (VIO_FAULTn)
    • Programmable voltage outputs (VIO_SET, VADJ_SET)
    • Voltage and current monitoring for all rails
  • Audio Measurement: Differential microphone inputs

    • 4× Pseudo-differential channels (Left/Right, Positive/Negative)
    • Mic bias load control (L/R channels)
    • Phantom power load control (L/R channels)
    • High sample averaging (50 samples per measurement)
  • Ground Switching Loads: 4-channel ground switch testing

    • Programmable ground switches (GND_SW0-3)
    • Voltage measurement per switch (GND_SW0-3_VMEAS)
    • Load characterization capability
  • Latch Testing: Dual latch interface

    • Polarity control (LATCH0_POL, LATCH1_POL)
    • Reset control (LATCH0_RESETn, LATCH1_RESETn)
    • Value readback (LATCH0_VALUE, LATCH1_VALUE)
    • Pull configuration (LATCH0_PULL, LATCH1_PULL)
  • RS485 Interface: Differential measurement

    • TX/RX differential voltage measurement
    • Pseudo-differential calculation (p - n)
    • Communication enable control
  • Connector Identification: Visual LED coding system

    • 6× IDC connectors (A-F) with individual RGB LEDs
    • Configurable colors per connector
    • 2× Status LEDs for system indication
    • LP5024 RGB LED driver
  • GPIO Control: 40-pin GPIO expander

    • Audio control signals
    • Load switching
    • Latch control
    • Power enable/monitoring
    • I²C/RS485 control
    • User GPIO (4 channels)
  • High-Speed Acquisition: Numeric result support

    • Multi-channel synchronized sampling
    • Target any analog input channel
    • Base64-encoded data transfer
  • Calibration Support: Per-channel gain and offset

    • Persistent calibration storage
    • Automatic application on reset

Hardware Details

Multi-Function ADCs (AD5593R):

  • ADC1:

    • Chip: Analog Devices AD5593R
    • I²C Address: 0x11
    • Channels: 8 (FE_MPIO00-07)
    • Resolution: 12-bit ADC/DAC
    • Bidirectional: IN/OUT configurable per channel
    • Modes: Analog and pseudo-digital
  • ADC2:

    • Chip: Analog Devices AD5593R
    • I²C Address: 0x10
    • Channels: 8 total
      • FE_MPIO08-11 (4 bidirectional I/O)
      • VIO_SET (DAC output, gain=2, default 3.3V)
      • VADJ_SET (DAC output, gain=2, default 1.8V)
      • VMON_VIO (ADC input, gain=1)
      • VMON_VADJ (ADC input, gain=2)
    • Resolution: 12-bit ADC/DAC

Configuration: Both AD5593R devices use:

  • DoubleAdcRange: true (extends to 2× VREF, ~0-5V)
  • DoubleDacRange: true (extends to 2× VREF, ~0-5V)
  • ReadTemperature: false

Monitoring ADCs (ADS7828):

  • ADC3 (External Rail Monitoring):

    • Chip: TI ADS7828 12-bit ADC
    • I²C Address: 0x4A
    • Channels: 8
      • VMON_EXT_12V (gain=5.3)
      • VMON_EXT_3V3 (gain=2)
      • VMON_EXT_1V8 (gain=1)
      • IMON_EXT_12V (gain=1/IMON_GAIN, measures current in A)
      • IMON_EXT_3V3 (gain=1/IMON_GAIN, measures current in A)
      • IMON_EXT_1V8 (gain=1/IMON_GAIN, measures current in A)
      • IMON_EXT_VADJ (gain=1/IMON_GAIN, measures current in A)
      • IMON_EXT_VIO (gain=1/IMON_GAIN, measures current in A)
    • IMON_GAIN constant: 6650 × 0.000182 ≈ 1.2103
  • ADC4 (Load & RS485 Monitoring):

    • Chip: TI ADS7828 12-bit ADC
    • I²C Address: 0x49
    • Channels: 8 (4 single-ended + 4 differential pairs)
      • GND_SW0-3_VMEAS (gain=2, ground switch voltage)
      • RS485_RX_VMEASp/n (gain=1, differential pair)
      • RS485_TX_VMEASp/n (gain=1, differential pair)
    • NumberOfSamples: 50 (averaging for stable readings)
    • Pseudo-differential channels:
      • RS485_RX_VMEAS (calculated: VMEASp - VMEASn)
      • RS485_TX_VMEAS (calculated: VMEASp - VMEASn)
  • ADC5 (Audio Monitoring):

    • Chip: TI ADS7828 12-bit ADC
    • I²C Address: 0x48
    • Channels: 8 (4 differential pairs)
      • MIC_IN_R_NEGp/n (Right channel negative)
      • MIC_IN_R_POSp/n (Right channel positive)
      • MIC_IN_L_NEGp/n (Left channel negative)
      • MIC_IN_L_POSp/n (Left channel positive)
    • NumberOfSamples: 50 (high averaging for audio)
    • Pseudo-differential channels:
      • MIC_IN_R_NEG (calculated: NEGp - NEGn)
      • MIC_IN_R_POS (calculated: POSp - POSn)
      • MIC_IN_L_NEG (calculated: NEGp - NEGn)
      • MIC_IN_L_POS (calculated: POSp - POSn)

GPIO Expander:

  • Chip: NXP PCA950x (compatible with PI4IOE5V6416)
  • I²C Address: 0x20
  • Channels: 40 digital I/O (5 banks × 8 pins)
  • DeviceName: "U1"
  • Communication: I²C bus

LED Driver:

  • Chip: TI LP5024 RGB LED driver
  • I²C Address: 0x28
  • Channels: 24 (8 LEDs × 3 RGB)
  • LEDs:
    • 6× Connector LEDs (CONN_A through CONN_F)
    • 2× Status LEDs (STATUS1, STATUS2)
  • Default Luminance: 0.7 (70% brightness)
  • Color Temperature Compensation:
    • Red: 1.0 × luminance
    • Green: 1.0 × luminance
    • Blue: 0.56 × luminance
  • Communication: I²C bus

Channel Naming Convention

All channels follow the naming pattern: {ModuleIndex}.ESH10000540.{ChannelName}

Where:

  • {ModuleIndex} is the position of the module in the system
  • ESH10000540 is the module type identifier
  • {ChannelName} is the specific channel name from the tables below

Example: Module at position 0, MPIO channel 5 would be: 0.ESH10000540.FE_MPIO05

User-Accessible Channels

Multi-Purpose I/O Channels (12 total):

Channel Name Type Direction Device Usage Description
FE_MPIO00-07 Analog / Pseudo-Digital IN/OUT ADC1 UserAllocatable Multi-purpose I/O 00-07 (AD5593R #1, 0-5V)
FE_MPIO08-11 Analog / Pseudo-Digital IN/OUT ADC2 UserAllocatable Multi-purpose I/O 08-11 (AD5593R #2, 0-5V)

Power Supply Control & Monitoring (18 channels):

Channel Name Type Direction Device Usage Description
VIO_SET Analog OUT ADC2 UserAllocatable VIO voltage setpoint (DAC, gain=2, default 3.3V)
VADJ_SET Analog OUT ADC2 UserAllocatable VADJ voltage setpoint (DAC, gain=2, default 1.8V)
VMON_VIO Analog IN ADC2 UserAllocatable VIO voltage monitor (ADC, gain=1)
VMON_VADJ Analog IN ADC2 UserAllocatable VADJ voltage monitor (ADC, gain=2)
VMON_EXT_12V Analog IN ADC3 UserAllocatable External 12V rail voltage (gain=5.3)
VMON_EXT_3V3 Analog IN ADC3 UserAllocatable External 3.3V rail voltage (gain=2)
VMON_EXT_1V8 Analog IN ADC3 UserAllocatable External 1.8V rail voltage (gain=1)
IMON_EXT_12V Analog IN ADC3 UserAllocatable External 12V rail current (A, gain compensated)
IMON_EXT_3V3 Analog IN ADC3 UserAllocatable External 3.3V rail current (A, gain compensated)
IMON_EXT_1V8 Analog IN ADC3 UserAllocatable External 1.8V rail current (A, gain compensated)
IMON_EXT_VADJ Analog IN ADC3 UserAllocatable External VADJ rail current (A, gain compensated)
IMON_EXT_VIO Analog IN ADC3 UserAllocatable External VIO rail current (A, gain compensated)
EXT_12V_EN Digital OUT U1 UserAllocatable Enable external 12V rail (true=enabled)
EXT_3V3_EN Digital OUT U1 UserAllocatable Enable external 3.3V rail (true=enabled)
EXT_1V8_EN Digital OUT U1 UserAllocatable Enable external 1.8V rail (true=enabled)
EXT_VADJ_EN Digital OUT U1 UserAllocatable Enable external VADJ rail (true=enabled)
EXT_VIO_EN Digital OUT U1 UserAllocatable Enable external VIO rail (true=enabled)
EXT_12V_PG Digital IN U1 UserAllocatable External 12V power-good status (true=good)
EXT_3V3_PG Digital IN U1 UserAllocatable External 3.3V power-good status (true=good)
EXT_1V8_PG Digital IN U1 UserAllocatable External 1.8V power-good status (true=good)
EXT_VADJ_PG Digital IN U1 UserAllocatable External VADJ power-good status (true=good)
EXT_VIO_PG Digital IN U1 UserAllocatable External VIO power-good status (true=good)
EXT_VIO_FAULTn Digital IN U1 UserAllocatable External VIO fault indicator (active-low, false=fault)

Audio Measurement Channels (12 channels):

Channel Name Type Direction Device Usage Description
MIC_IN_R_NEG Analog IN ADC5 UserAllocatable Right mic negative (pseudo-diff: NEGp - NEGn)
MIC_IN_R_POS Analog IN ADC5 UserAllocatable Right mic positive (pseudo-diff: POSp - POSn)
MIC_IN_L_NEG Analog IN ADC5 UserAllocatable Left mic negative (pseudo-diff: NEGp - NEGn)
MIC_IN_L_POS Analog IN ADC5 UserAllocatable Left mic positive (pseudo-diff: POSp - POSn)
MIC_BIAS_LOAD_L Digital OUT U1 UserAllocatable Left channel mic bias load enable
MIC_BIAS_LOAD_R Digital OUT U1 UserAllocatable Right channel mic bias load enable
PHANTOM_LOAD_L Digital OUT U1 UserAllocatable Left channel phantom power load enable
PHANTOM_LOAD_R Digital OUT U1 UserAllocatable Right channel phantom power load enable

Ground Switch & Load Channels (8 channels):

Channel Name Type Direction Device Usage Description
GND_SW0 Digital OUT U1 UserAllocatable Ground switch 0 control
GND_SW1 Digital OUT U1 UserAllocatable Ground switch 1 control
GND_SW2 Digital OUT U1 UserAllocatable Ground switch 2 control
GND_SW3 Digital OUT U1 UserAllocatable Ground switch 3 control
GND_SW0_VMEAS Analog IN ADC4 UserAllocatable Ground switch 0 voltage measurement (gain=2)
GND_SW1_VMEAS Analog IN ADC4 UserAllocatable Ground switch 1 voltage measurement (gain=2)
GND_SW2_VMEAS Analog IN ADC4 UserAllocatable Ground switch 2 voltage measurement (gain=2)
GND_SW3_VMEAS Analog IN ADC4 UserAllocatable Ground switch 3 voltage measurement (gain=2)

Latch Testing Channels (8 channels):

Channel Name Type Direction Device Usage Description
LATCH0_POL Digital OUT U1 UserAllocatable Latch 0 polarity control
LATCH1_POL Digital OUT U1 UserAllocatable Latch 1 polarity control
LATCH0_RESETn Digital OUT U1 UserAllocatable Latch 0 reset (active-low)
LATCH1_RESETn Digital OUT U1 UserAllocatable Latch 1 reset (active-low)
LATCH0_VALUE Digital IN U1 UserAllocatable Latch 0 value readback
LATCH1_VALUE Digital IN U1 UserAllocatable Latch 1 value readback
LATCH0_PULL Digital IN U1 UserAllocatable Latch 0 pull status (with pull-up)
LATCH1_PULL Digital IN U1 UserAllocatable Latch 1 pull status (with pull-up)

RS485 & Communication Channels (5 channels):

Channel Name Type Direction Device Usage Description
RS485_RX_VMEAS Analog IN ADC4 UserAllocatable RS485 RX differential voltage (VMEASp - VMEASn)
RS485_TX_VMEAS Analog IN ADC4 UserAllocatable RS485 TX differential voltage (VMEASp - VMEASn)
RS485_EN Digital OUT U1 UserAllocatable RS485 transceiver enable
I2C_V_SEL Digital OUT U1 UserAllocatable I²C voltage level select
I2C_EN Digital OUT U1 UserAllocatable I²C transceiver enable

User GPIO & Miscellaneous (6 channels):

Channel Name Type Direction Device Usage Description
USR_GPIO1 Digital IN U1 UserAllocatable User GPIO 1 (with pull-up)
USR_GPIO2 Digital IN U1 UserAllocatable User GPIO 2 (with pull-up)
USR_GPIO3 Digital IN U1 UserAllocatable User GPIO 3 (with pull-up)
USR_GPIO4 Digital IN U1 UserAllocatable User GPIO 4 (with pull-up)
LSHM_PRESENCEn Digital IN U1 UserAllocatable LSHM presence detect (active-low)

Connector LED Control (7 channels):

Channel Name Type Direction Usage Description
CONN_A Register OUT UserAllocatable Connector A LED color (accepts color names or #RRGGBB hex)
CONN_B Register OUT UserAllocatable Connector B LED color (accepts color names or #RRGGBB hex)
CONN_C Register OUT UserAllocatable Connector C LED color (accepts color names or #RRGGBB hex)
CONN_D Register OUT UserAllocatable Connector D LED color (accepts color names or #RRGGBB hex)
CONN_E Register OUT UserAllocatable Connector E LED color (accepts color names or #RRGGBB hex)
CONN_F Register OUT UserAllocatable Connector F LED color (accepts color names or #RRGGBB hex)
LUMINANCE Ratiometric OUT UserAllocatable LED intensity control (0.0-1.0, default: 0.7)

Data Acquisition & Calibration (2 channels):

Channel Name Type Direction Usage Description
NumericResult NumericResult IN UserAllocatable Multi-channel high-speed analog acquisition
CALIBRATION Calibration N/A UserAllocatable Module calibration table (gain/offset for all channels)

Total User Channels: 108 (12 MPIO + 23 power + 8 audio + 8 ground switch + 8 latch + 5 RS485/I2C + 5 user GPIO + 7 connector LEDs + 2 special)

Internal Channels (Not User-Accessible)

The following channels are used for internal system control and are hidden from users:

  • AD5593_RESETn (U1, HiddenSystemControl): AD5593R reset control (active-low)
  • Connector RGB Channels (all HiddenSystemControl):
    • CONN=A_R, CONN=A_G, CONN=A_B (Connector A RGB)
    • CONN=B_R, CONN=B_G, CONN=B_B (Connector B RGB)
    • CONN=C_R, CONN=C_G, CONN=C_B (Connector C RGB)
    • CONN=D_R, CONN=D_G, CONN=D_B (Connector D RGB)
    • CONN=E_R, CONN=E_G, CONN=E_B (Connector E RGB)
    • CONN=F_R, CONN=F_G, CONN=F_B (Connector F RGB)
  • Status RGB Channels (all HiddenSystemControl):
    • STATUS1_R, STATUS1_G, STATUS1_B (Status LED 1)
    • STATUS2_R, STATUS2_G, STATUS2_B (Status LED 2)
  • GPIO Placeholders (U1, HiddenSystemControl): 4 unused GPIO pins

Default Connector Color Coding

The module initializes with predefined connector colors for signal type identification:

Connector Default Color Signal Type
CONN_A Blue Analog measurements
CONN_B Cyan Mixed MPIO/tacho/PWM/latch
CONN_C Magenta Audio channels
CONN_D Green On-board MPIO
CONN_E Red Power connector
CONN_F Yellow Communication connector

Channel Configuration

Multi-Purpose I/O Analog Mode

Configure FE_MPIO channels as analog inputs or outputs:

ConfigureChannels(new[] {
    new AnalogChannel {
        NetName = "0.ESH10000540.FE_MPIO00",
        Enabled = true,
        Direction = DirectionTypes.IN,
        Gain = 1.0,
        Offset = 0.0,
        Resolution = 12
    }
});

// Read analog input
string[] voltage = GetValues(new[] { "0.ESH10000540.FE_MPIO00" });
Console.WriteLine($"FE_MPIO00: {voltage[0]}V");

Multi-Purpose I/O Pseudo-Digital Mode

Configure FE_MPIO channels as pseudo-digital I/O:

ConfigureChannels(new[] {
    new PseudoDigitalChannel {
        NetName = "0.ESH10000540.FE_MPIO01",
        Enabled = true,
        Direction = DirectionTypes.IN,
        VL = 0.8,      // Logic LOW threshold
        VH = 2.0,      // Logic HIGH threshold
        MinIoVoltage = 0.0,
        MaxIoVoltage = 5.0
    }
});

// Read pseudo-digital state
string[] state = GetValues(new[] { "0.ESH10000540.FE_MPIO01" });
// state[0] = "true" or "false"

Power Supply Configuration

Enable power rails and set programmable voltages:

// Set VIO to 3.3V and VADJ to 1.8V
SetValues(
    new[] {
        "0.ESH10000540.VIO_SET",
        "0.ESH10000540.VADJ_SET"
    },
    new[] {
        "3.3",  // VIO = 3.3V (gain=2, so DAC gets 1.65V)
        "1.8"   // VADJ = 1.8V (gain=2, so DAC gets 0.9V)
    }
);

// Enable external power rails
SetValues(
    new[] {
        "0.ESH10000540.EXT_12V_EN",
        "0.ESH10000540.EXT_3V3_EN",
        "0.ESH10000540.EXT_VIO_EN"
    },
    new[] { "true", "true", "true" }
);

// Check power-good status
string[] powerGood = GetValues(new[] {
    "0.ESH10000540.EXT_12V_PG",
    "0.ESH10000540.EXT_3V3_PG",
    "0.ESH10000540.EXT_VIO_PG"
});
bool allGood = powerGood.All(p => bool.Parse(p) == true);
Console.WriteLine($"Power rails OK: {allGood}");

Programming Interface

Configure and Read MPIO Channels:

// Configure FE_MPIO as outputs
ConfigureChannels(new[] {
    new AnalogChannel {
        NetName = "0.ESH10000540.FE_MPIO00",
        Enabled = true,
        Direction = DirectionTypes.OUT,
        Value = 2.5  // Output 2.5V
    }
});

// Read MPIO inputs
string[] mpioValues = GetValues(new[] {
    "0.ESH10000540.FE_MPIO08",
    "0.ESH10000540.FE_MPIO09"
});

Monitor Power Rails:

// Read all power rail voltages and currents
string[] powerMetrics = GetValues(new[] {
    "0.ESH10000540.VMON_EXT_12V",
    "0.ESH10000540.IMON_EXT_12V",
    "0.ESH10000540.VMON_EXT_3V3",
    "0.ESH10000540.IMON_EXT_3V3",
    "0.ESH10000540.VMON_VIO",
    "0.ESH10000540.IMON_EXT_VIO"
});

Console.WriteLine($"12V Rail: {powerMetrics[0]}V @ {powerMetrics[1]}A");
Console.WriteLine($"3.3V Rail: {powerMetrics[2]}V @ {powerMetrics[3]}A");
Console.WriteLine($"VIO Rail: {powerMetrics[4]}V @ {powerMetrics[5]}A");

Audio Measurement:

// Enable mic bias loads
SetValues(
    new[] {
        "0.ESH10000540.MIC_BIAS_LOAD_L",
        "0.ESH10000540.MIC_BIAS_LOAD_R"
    },
    new[] { "true", "true" }
);

// Read differential audio inputs
string[] audio = GetValues(new[] {
    "0.ESH10000540.MIC_IN_L_POS",
    "0.ESH10000540.MIC_IN_L_NEG",
    "0.ESH10000540.MIC_IN_R_POS",
    "0.ESH10000540.MIC_IN_R_NEG"
});

Console.WriteLine($"Left Audio: Pos={audio[0]}V, Neg={audio[1]}V");
Console.WriteLine($"Right Audio: Pos={audio[2]}V, Neg={audio[3]}V");

Ground Switch Control:

// Enable ground switch and measure voltage
SetValues(
    new[] { "0.ESH10000540.GND_SW0" },
    new[] { "true" }
);

Thread.Sleep(100);  // Allow settling

string[] voltage = GetValues(new[] { "0.ESH10000540.GND_SW0_VMEAS" });
Console.WriteLine($"GND_SW0 voltage: {voltage[0]}V");

Latch Testing:

// Reset latch 0
SetValues(
    new[] { "0.ESH10000540.LATCH0_RESETn" },
    new[] { "false" }  // Active-low reset
);
Thread.Sleep(10);
SetValues(
    new[] { "0.ESH10000540.LATCH0_RESETn" },
    new[] { "true" }  // Release reset
);

// Set polarity and read value
SetValues(
    new[] { "0.ESH10000540.LATCH0_POL" },
    new[] { "true" }
);

string[] latchData = GetValues(new[] {
    "0.ESH10000540.LATCH0_VALUE",
    "0.ESH10000540.LATCH0_PULL"
});
Console.WriteLine($"Latch 0 Value: {latchData[0]}, Pull: {latchData[1]}");

RS485 Differential Measurement:

// Enable RS485
SetValues(
    new[] { "0.ESH10000540.RS485_EN" },
    new[] { "true" }
);

// Read differential voltages
string[] rs485 = GetValues(new[] {
    "0.ESH10000540.RS485_RX_VMEAS",
    "0.ESH10000540.RS485_TX_VMEAS"
});
Console.WriteLine($"RS485 RX differential: {rs485[0]}V");
Console.WriteLine($"RS485 TX differential: {rs485[1]}V");

Connector LED Color Control:

// Set connector colors
SetValues(
    new[] {
        "0.ESH10000540.CONN_A",
        "0.ESH10000540.CONN_B",
        "0.ESH10000540.CONN_C",
        "0.ESH10000540.LUMINANCE"
    },
    new[] {
        "Red",     // Connector A: Red
        "Green",   // Connector B: Green
        "#FF5733", // Connector C: Custom hex color
        "0.5"      // 50% brightness
    }
);

Pseudo-Differential Calculation

The module performs automatic pseudo-differential calculations for certain channels:

RS485 Channels:

// Internally calculated:
RS485_RX_VMEAS = RS485_RX_VMEASp - RS485_RX_VMEASn
RS485_TX_VMEAS = RS485_TX_VMEASp - RS485_TX_VMEASn

Audio Channels:

// Internally calculated:
MIC_IN_R_NEG = MIC_IN_R_NEGp - MIC_IN_R_NEGn
MIC_IN_R_POS = MIC_IN_R_POSp - MIC_IN_R_POSn
MIC_IN_L_NEG = MIC_IN_L_NEGp - MIC_IN_L_NEGn
MIC_IN_L_POS = MIC_IN_L_POSp - MIC_IN_L_POSn

This provides true differential measurement by subtracting the negative input from the positive input.

Error Handling

The module validates operations and provides error messages:

  • Invalid NetName: Throws exception if channel does not exist
  • Invalid Color Name: Throws exception for unrecognized color names or malformed hex values
  • Invalid VL/VH: Validates voltage thresholds are within MinIoVoltage/MaxIoVoltage range
  • Invalid VH <= VL: Ensures high threshold exceeds low threshold
  • Direction Mismatch: Prevents output operations on input channels and vice versa
  • Device Communication Errors: I²C errors logged and propagated to caller

Best Practices

  1. Power sequencing: Set VIO_SET and VADJ_SET before enabling power rails
  2. Check power-good: Verify all _PG signals after enabling power supplies
  3. Monitor fault signals: Check EXT_VIO_FAULTn for power supply faults
  4. Audio averaging: ADS7828 uses 50 samples for stable audio measurements
  5. Differential measurements: Use pseudo-differential channels for noise immunity
  6. Connector color coding: Use standard colors for easy visual identification
  7. Batch operations: Use multi-channel SetValues/GetValues for better performance
  8. MPIO direction: Always configure direction (IN/OUT) before use
  9. Latch reset timing: Allow adequate time between reset assertion and release
  10. I²C/RS485 enable: Enable transceivers before attempting communication

Module Initialization Sequence

On Reset(), the module performs:

  1. Clear existing channel list
  2. Setup GPIO expander (PCA950x at 0x20):
    • Create 40 digital channels across 5 banks:
      • Bank 1: Audio loads (MIC_BIAS, PHANTOM), ground switches (GND_SW0-3)
      • Bank 2: Latch control (POL, RESETn, VALUE, PULL for LATCH0/1)
      • Bank 3: Power enables (EXT_12V/3V3/1V8/VADJ/VIO_EN), power-good (12V/3V3/1V8_PG)
      • Bank 4: Power-good continued (VADJ/VIO_PG), VIO fault, I2C/RS485 control, LSHM presence, AD5593_RESETn
      • Bank 5: User GPIO (USR_GPIO1-4), 4 hidden placeholders
    • Reset and update GPIO expander
  3. Add LED luminance channel (default: 0.7)
  4. Setup LED driver (LP5024 at 0x28):
    • Create 6 connector color register channels (CONN_A-F)
    • Create 18 hidden RGB ratiometric channels (6 connectors × 3 RGB)
    • Create 6 hidden RGB ratiometric channels (2 status LEDs × 3 RGB)
    • Reset and update LED controller
  5. Setup ADC1 (AD5593R at 0x11):
    • Create 8 analog/pseudo-digital channels (FE_MPIO00-07)
    • Enable double ADC/DAC range
    • Reset and update ADC
  6. Setup ADC2 (AD5593R at 0x10):
    • Create 4 analog/pseudo-digital channels (FE_MPIO08-11)
    • Create VIO_SET (DAC OUT, gain=2, default 3.3V)
    • Create VADJ_SET (DAC OUT, gain=2, default 1.8V)
    • Create VMON_VIO (ADC IN, gain=1)
    • Create VMON_VADJ (ADC IN, gain=2)
    • Enable double ADC/DAC range
    • Reset and update ADC
  7. Setup ADC3 (ADS7828 at 0x4A):
    • Create 8 power monitoring channels (VMON/IMON for EXT_12V/3V3/1V8/VADJ/VIO)
    • Apply gain factors for voltage scaling and current measurement
    • Reset and update ADC
  8. Setup ADC4 (ADS7828 at 0x49):
    • Create 4 ground switch voltage measurement channels (GND_SW0-3_VMEAS, gain=2)
    • Create 4 RS485 differential pair channels (RX/TX VMEASp/n, gain=1)
    • Create 2 pseudo-differential channels (RS485_RX_VMEAS, RS485_TX_VMEAS)
    • NumberOfSamples: 50
    • Reset and update ADC
  9. Setup ADC5 (ADS7828 at 0x48):
    • Create 8 audio differential pair channels (MIC L/R POS/NEG p/n)
    • Create 4 pseudo-differential channels (MIC_IN_L/R_POS/NEG)
    • NumberOfSamples: 50
    • Reset and update ADC
  10. Add NumericResult channel with analog targets populated
  11. Set default connector colors:
    • CONN_A: Blue (analog)
    • CONN_B: Cyan (mixed)
    • CONN_C: Magenta (audio)
    • CONN_D: Green (on-board MPIO)
    • CONN_E: Red (power)
    • CONN_F: Yellow (communication)
    • Update LED hardware
  12. Load and apply calibration from persistent storage
  13. Add CALIBRATION channel for user access

Typical Use Cases

1. Power Supply Sequencing Test:

// Configure voltage outputs
SetValues(
    new[] { "0.ESH10000540.VIO_SET", "0.ESH10000540.VADJ_SET" },
    new[] { "3.3", "1.8" }
);

// Enable rails in sequence with delay
var rails = new[] {
    "EXT_12V_EN", "EXT_3V3_EN", "EXT_1V8_EN", "EXT_VADJ_EN", "EXT_VIO_EN"
};

foreach (var rail in rails)
{
    SetValues(new[] { $"0.ESH10000540.{rail}" }, new[] { "true" });
    Thread.Sleep(100);  // 100ms delay between rails
}

// Verify all power-good
var pgSignals = rails.Select(r => r.Replace("_EN", "_PG")).ToArray();
string[] pgStatus = GetValues(pgSignals.Select(p => $"0.ESH10000540.{p}").ToArray());

for (int i = 0; i < pgSignals.Length; i++)
{
    Console.WriteLine($"{rails[i]}: {(bool.Parse(pgStatus[i]) ? "GOOD" : "FAULT")}");
}

2. Audio Interface Characterization:

// Enable mic bias for both channels
SetValues(
    new[] {
        "0.ESH10000540.MIC_BIAS_LOAD_L",
        "0.ESH10000540.MIC_BIAS_LOAD_R"
    },
    new[] { "true", "true" }
);

// Acquire audio data
for (int i = 0; i < 10; i++)
{
    string[] audio = GetValues(new[] {
        "0.ESH10000540.MIC_IN_L_POS",
        "0.ESH10000540.MIC_IN_L_NEG",
        "0.ESH10000540.MIC_IN_R_POS",
        "0.ESH10000540.MIC_IN_R_NEG"
    });

    double leftDiff = double.Parse(audio[0]) - double.Parse(audio[1]);
    double rightDiff = double.Parse(audio[2]) - double.Parse(audio[3]);

    Console.WriteLine($"Sample {i}: Left={leftDiff:F4}V, Right={rightDiff:F4}V");
    Thread.Sleep(100);
}

3. Multi-Channel Data Acquisition:

// Configure numeric result for high-speed acquisition
ConfigureChannels(new[] {
    new NumericResultChannel {
        NetName = "0.ESH10000540.NumericResult",
        Enabled = true,
        NumberOfSamples = 1000,
        SampleRate = 1000,  // 1 kHz
        TargetNetName = "0.ESH10000540.FE_MPIO00,0.ESH10000540.FE_MPIO01",
        ReducedSet = true,
        MultiChannel = true
    }
});

// Acquire data
string[] result = GetValues(new[] { "0.ESH10000540.NumericResult" });
List<NumericResult> data = NumericResult.FromBase64(result[0]);

foreach (var channel in data)
{
    Console.WriteLine($"{channel.NetName}: Min={channel.Min:F3}V, Max={channel.Max:F3}V, Avg={channel.Average:F3}V");
}

4. Ground Switch Load Test:

// Test all ground switches sequentially
for (int i = 0; i < 4; i++)
{
    string swChannel = $"0.ESH10000540.GND_SW{i}";
    string measChannel = $"0.ESH10000540.GND_SW{i}_VMEAS";

    // Enable switch
    SetValues(new[] { swChannel }, new[] { "true" });
    Thread.Sleep(50);

    // Measure voltage
    string[] voltage = GetValues(new[] { measChannel });
    Console.WriteLine($"GND_SW{i}: {voltage[0]}V");

    // Disable switch
    SetValues(new[] { swChannel }, new[] { "false" });
    Thread.Sleep(50);
}

5. Fixture Identification Display:

// Update connector LEDs based on fixture type
void IdentifyFixture(string fixtureType)
{
    Dictionary<string, string> colorMap = fixtureType switch
    {
        "AUDIO" => new() {
            ["CONN_A"] = "Black",
            ["CONN_B"] = "Black",
            ["CONN_C"] = "Magenta",
            ["CONN_D"] = "Black",
            ["CONN_E"] = "Red",
            ["CONN_F"] = "Yellow"
        },
        "POWER" => new() {
            ["CONN_A"] = "Black",
            ["CONN_B"] = "Black",
            ["CONN_C"] = "Black",
            ["CONN_D"] = "Green",
            ["CONN_E"] = "Red",
            ["CONN_F"] = "Yellow"
        },
        _ => new() {
            ["CONN_A"] = "Blue",
            ["CONN_B"] = "Cyan",
            ["CONN_C"] = "Magenta",
            ["CONN_D"] = "Green",
            ["CONN_E"] = "Red",
            ["CONN_F"] = "Yellow"
        }
    };

    var channels = colorMap.Keys.Select(k => $"0.ESH10000540.{k}").ToArray();
    var colors = colorMap.Values.ToArray();

    SetValues(channels, colors);
    Console.WriteLine($"Fixture identified as: {fixtureType}");
}

IdentifyFixture("AUDIO");

Debugging and Troubleshooting

Problem: MPIO channels not responding

  • Check: AD5593_RESETn signal is released (should be true/high)
  • Check: I²C communication with AD5593R devices (0x10, 0x11)
  • Check: Direction is correctly configured (IN/OUT)
  • Action: Reset module to reinitialize AD5593R devices

Problem: Power rails not enabling

  • Check: Enable signals (EXT_*_EN) are set to true
  • Check: Power-good signals (EXT_*_PG) after enabling
  • Check: VIO_FAULTn is not indicating fault (should be true)
  • Action: Check external power supply connections

Problem: Audio measurements unstable

  • Check: Mic bias loads are enabled if needed
  • Check: ADS7828 NumberOfSamples is 50 (default for averaging)
  • Action: Increase sample averaging or reduce noise sources
  • Verify: Differential inputs are properly connected

Problem: Connector LEDs not updating

  • Check: LP5024 I²C communication at address 0x28
  • Check: Luminance is > 0.0
  • Check: Color values are valid (named colors or hex)
  • Action: Call UpdateConnectorColors() manually if needed

Problem: Pseudo-differential channels returning unexpected values

  • Check: Both p and n channels are correctly connected
  • Check: Calculation is correct (VMEASp - VMEASn)
  • Verify: Individual p and n channels read expected voltages
  • Note: Calculation performed automatically in GetValues()

Problem: Ground switch measurements incorrect

  • Check: Ground switch is actually enabled (GND_SW = true)
  • Check: Gain factor (2) is correct for voltage divider
  • Action: Verify switch is conducting and load is present

Problem: Latch testing not working

  • Check: Reset sequence is correct (assert low, then release high)
  • Check: Polarity setting matches expected behavior
  • Check: Pull configuration for VALUE readback
  • Verify: Latch hardware is functional

Comparison with Standard Fixture Interface Modules

Feature ESH10000540 (Sparrow Fixture) Generic Interface Module
MPIO Channels 12 (dual AD5593R) Varies
Power Rails 5 programmable + monitoring Typically separate
Audio Inputs 4 pseudo-differential Typically none
Ground Switches 4 with voltage monitoring Typically none
Latch Testing Dual latch with control Typically none
RS485 Measurement Differential voltage Typically none
LED Indicators 6 connector + 2 status RGB Typically simple
Total Channels 108 user-accessible Typically < 50
Integration Level Highly integrated Modular
Form Factor Sparrow module Varies

Revision History

  • ESH10000540: Current production version
    • 12 MPIO channels (dual AD5593R, I²C 0x10/0x11)
    • 5 external power rails with enable and monitoring
    • 3 ADS7828 ADCs for power/audio/load monitoring (I²C 0x48/0x49/0x4A)
    • 4 pseudo-differential audio channels
    • 4 ground switch loads with voltage monitoring
    • Dual latch testing interface
    • RS485 differential measurement
    • 40-pin GPIO expander (PCA950x, I²C 0x20)
    • 6 connector RGB LEDs + 2 status LEDs (LP5024, I²C 0x28)
    • Numeric result acquisition support
    • Calibration support (persistent storage)
An unhandled error has occurred. Reload 🗙

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.