---
title: "NORVI X-Q16 – USER GUIDE"
description: "## Overview NORVI X is a next generation modular industrial controller designed to power smart automation and IoT solutions. Built around a CPU module and a range of plug and play expansion modules, the platform scales from a handful of…"
url: "https://norvi.io/docs/norvi-x-q16-user-guide/"
updated: "2026-10-23"
category: "NORVI X / NORVI X-Q16"
---

# NORVI X-Q16 – USER GUIDE

## Overview

NORVI X is a next generation modular industrial controller designed to power smart automation and IoT solutions. Built around a CPU module and a range of plug and play expansion modules, the platform scales from a handful of I/O points up to 200, giving system integrators, OEMs, and industrial engineers a flexible foundation for automation, remote monitoring, and data acquisition projects.

The **NORVI X-Q16** is a **16-channel transistor output expansion module** designed for the NORVI X modular controller platform. It provides sixteen high-side switching outputs for controlling DC loads such as industrial actuators, relays, solenoids, and indicator devices. The Q16 uses **P-channel MOSFET high-side switches** with optocoupler isolation. Each output includes integrated fuse and surge protection, while individual LEDs provide output status indication.

This guide covers everything needed to confidently install, wire, and commission the module, including safety requirements, technical specifications, terminal and address configuration, wiring steps, software setup, diagnostic test code, and troubleshooting.

## Key Features

- 16× high-side transistor (P-channel MOSFET) output channels
- Up to 24V DC switching
- Full optical isolation, dual opto-isolation per channel
- Per-channel resettable PTC fuse + surge protection
- Individual LED status indicators per output
- DIN rail mountable enclosure with push-in terminals (front arrangement)
- CE / EMC compliant (EN 61131-2:2007, EN 61010-1:2010+A1:2019, EN IEC 61010-2-201:2018, 2014/30/EU)

## Safety Information

**Warning:**Disconnect all power sources before installing, wiring, or servicing the NORVI X-Q16. Failure to do so may result in electric shock or damage to the equipment.

- Install and wire this module only if you are a qualified electrician or trained technician familiar with industrial control equipment.
- Confirm the host CPU is running from a regulated 24 V DC supply, since the module draws its power through the expansion port rather than a separate connection.
- Do not connect or disconnect the expansion module while the system is powered. Ensure that the supply voltage does not exceed 24 V DC, the current does not exceed 0.5 A on any individual transistor output, and the total supply current does not exceed 8 A.
- Mount the module on a DIN rail inside a suitably rated enclosure. It carries an IP20 protection rating and is not designed for direct outdoor or wash down exposure.
- Keep the operating environment within minus 40 to plus 85 degrees C and avoid condensing humidity.
- Do not connect or disconnect the module from the expansion bus while the system is powered.
- Follow all local and national electrical codes applicable to industrial control panel wiring.

## Technical Specifications

### Electrical

| Rated Supply Voltage | 24V DC |
| --- | --- |
| Current Consumption | 90mA @ 24V DC |

### Output Specifications

| Number of Outputs | 16 Transistor Output channels |
| --- | --- |
| Transistor Output Current | 0.5A per channel |
| Switching Transistor | P-Channel MOSFET |
| Maximum Supply Voltage | 24V DC |
| Maximum Supply Current | 8A |
| Output Type | High-Side Switch |
| Switching Transistor | P-Channel MOSFET |
| Isolation Type | Optocoupler Isolation |
| Protection (Per Channel) | Per-channel resettable PTC fuse |
| Output Diagnostics | Individual LED indicators |
| Connector Type | Spring terminal |

## Hardware Layout & GPIO Map

The Q16 communicates with the NORVI X CPU through the expansion bus.The transistor output channels are provided through the field terminal block as **TR1 to TR16**.

| Terminal | Function |
| --- | --- |
| TR1 | Transistor Output 1 |
| TR2 | Transistor Output 2 |
| TR3 | Transistor Output 3 |
| TR4 | Transistor Output 4 |
| TR5 | Transistor Output 5 |
| TR6 | Transistor Output 6 |
| TR7 | Transistor Output 7 |
| TR8 | Transistor Output 8 |
| TR9 | Transistor Output 9 |
| TR10 | Transistor Output 10 |
| TR11 | Transistor Output 11 |
| TR12 | Transistor Output 12 |
| TR13 | Transistor Output 13 |
| TR14 | Transistor Output 14 |
| TR15 | Transistor Output 15 |
| TR16 | Transistor Output 16 |
| GND | Ground |

### I2C Address Selection

![I2C Address Selection](https://norvi.io/wp-content/uploads/2026/09/NORVI-X-I2C.jpg)

| Address Selection |  |  |  |  |
| --- | --- | --- | --- | --- |
| DIP 1 | DIP 2 | DIP 3 | DIP 4 | Address |
| OFF | OFF | OFF |  | 0x27 |
| ON | OFF | OFF |  | 0x26 |
| OFF | ON | OFF |  | 0x25 |
| ON | ON | OFF |  | 0x24 |
| OFF | OFF | ON |  | 0x23 |
| ON | OFF | ON |  | 0x22 |
| OFF | ON | ON |  | 0x21 |
| ON | ON | ON |  | 0x20 |

### PCA9555 register map

| Register address | Register name | Purpose | Power-on value |
| --- | --- | --- | --- |
| 0x00 | Input Port 0 | Read port 0 pin states | External pin levels |
| 0x01 | Input Port 1 | Read port 1 pin states | External pin levels |
| 0x02 | Output Port 0 | Set port 0 output states | 0xFF |
| 0x03 | Output Port 1 | Set port 1 output states | 0xFF |
| 0x04 | Polarity Inversion 0 | Invert input readings | 0x00 |
| 0x05 | Polarity Inversion 1 | Invert input readings | 0x00 |
| 0x06 | Configuration 0 | Set port 0 direction | 0xFF |
| 0x07 | Configuration 1 | Set port 1 direction | 0xFF |

### Output Polarity

| State of Expander | Output Behaviour |
| --- | --- |
| High | Turns on |
| Low | Turns off |

## Wiring Guide

GPIO pin assignments for every output are listed in the Hardware Layout and GPIO Map section above; this section covers how to physically wire the module, not the pin numbers themselves.

### Power Connection

The module draws its 24 V DC supply through the expansion port itself, shared with the CPU, so there is a separate power terminal to wire on the X-16.

### Transistor Output Wiring

- Each output channel switches through an internal opto-isolated MOSFET between its TRx terminal and the POWER block's 24V rail. Connect one lead of the load (relay coil, solenoid, actuator, or indicator) to the corresponding TRx terminal, and connect the other lead of the load to GND.
- The module's outputs are powered from the dedicated POWER terminal block (24V, 24V, GND, GND, GND) - not from the expansion bus. Wire an external 24 V DC supply to a POWER "24V" terminal (through a switch or fuse if desired) and its return to a POWER "GND" terminal before wiring any loads.
- When a channel is switched ON, its TRx terminal is internally connected to the POWER block's 24 V rail, sourcing 24 V DC to the load; when OFF, the terminal is left floating (high impedance).
- The output block's GND terminal and the POWER block's GND terminals share a common ground reference - connect load returns to either.
- Since all sixteen outputs share the same POWER supply and GND reference, use consistent wiring across all sixteen channels.
- For inductive loads such as relay coils or solenoids, keep the load within the per-channel fuse and switching limits; the integrated PTC fuse and Zener gate clamp protect the channel from overcurrent and transient spikes.

![Figure 1: NORVI X-Q16 Transistor Output Terminal Wiring](https://norvi.io/wp-content/uploads/2026/09/NORVI-X-Q16-Terminal-Wiring.jpg)
Figure 1: NORVI X-Q16 Transistor Output Terminal Wiring

### Connecting the Module to the CPU

1. Power off the system.
2. Mount the X-Q16 on the DIN rail next to the CPU module or an adjacent expansion module.
3. Seat it firmly onto the expansion bus connector until it locks into place.
4. If daisy-chaining multiple I2C-addressable modules, set the DIP switches first (see Section 5) so each has a unique address.
5. Wire your loads to the TR1–TR16 terminals, confirming each stays within the 0.5A per-channel / 24V DC rating.
6. Power the system back on.
7. Upload the module's test sketch from the [NORVI GitHub repository](https://github.com/NORVIControllers/NORVI-X-Version-02/blob/main/expansion%20modules/NORVI-X-Q16/examples/arduino/NORVI_X-Q16_Test_Code/NORVI_X-Q16_Test_Code.ino) to confirm each channel reads correctly before wiring it into your final control logic.

![Figure 2: NORVI CPU Controller with NORVI X-Q16 Expansion Module](https://norvi.io/wp-content/uploads/2026/09/NORVI-X-Q16-WITH-X3-scaled.jpg)
Figure 2: NORVI CPU Controller with NORVI X-Q16 Expansion Module

### Expansion Port (50 pin)

The X-Q16 connects to the CPU through the shared 50 pin expansion bus. The pins actually used by this module are SCL, SDA, GND, 24V, and 5V. The rest pass through for other modules on the same bus.

| PIN INDEX | Purpose | GPIO | SOURCE |
| --- | --- | --- | --- |
| 1 | MOSI | IO11 | ESP32-S3 |
| 2 | MISO | IO13 |  |
| 3 | SCLK | IO12 |  |
| 4 | GND | ---- |  |
| 5 | SCL | IO9 |  |
| 6 | SDA | IO8 |  |
| 7 | GND | ---- |  |
| 8 | RX1 | IO18 |  |
| 9 | TX1 | IO17 |  |
| 10 | GND | ---- |  |
| 11 | D+ | ---- |  |
| 12 | D- | ---- |  |
| 13 | GND | ---- |  |
| 14 | CS1 | P1_0 | PCA9539 I2C Address 0x75 |
| 15 | CS2 | P0_7 |  |
| 16 | CS3 | P0_6 |  |
| 17 | CS4 | P0_5 |  |
| 18 | IO1 | IO1 | ESP32-S3 |
| 19 | IO2 | IO2 |  |
| 20 | IO4 | IO4 |  |
| 21 | IO5 | IO5 |  |
| 22 | IO6 | IO6 |  |
| 23 | IO7 | IO7 |  |
| 24 | IO10 | IO10 |  |
| 25 | IO11 | IO35 |  |
| 26 | IO12 | IO41 |  |
| 27 | IO13 | IO37 |  |
| 28 | IO14 | IO14 |  |
| 29 | RS485_TX | IO15 |  |
| 30 | GND | ---- |  |
| 31 | GND | ---- |  |
| 32 | RS485_RX | IO16 |  |
| 33 | P1_1 | P1_1 | PCA9539 I2C Address 0x75 |
| 34 | P1_2 | P1_2 |  |
| 35 | IO21 | IO21 | ESP32-S3 |
| 36 | GND | ---- |  |
| 37 | GND | ---- |  |
| 38 | P1_3 | P1_3 | PCA9539 I2C Address 0x75 |
| 39 | P1_4 | P1_4 |  |
| 40 | P1_5 | P1_5 |  |
| 41 | IO39 | IO39 | ESP32-S3 |
| 42 | IO40 | IO40 |  |
| 43 | NC | ---- |  |
| 44 | NC | ---- |  |
| 45 | NC | ---- |  |
| 46 | GND | ---- |  |
| 47 | 5V | 5V |  |
| 48 | GND | GND |  |
| 49 | 24V | 24V |  |
| 50 | 24V | 24V |  |

## Software Setup (Arduino IDE)

The NORVI X-Q16 is driven through the host CPU using the Arduino IDE with the ESP32 board package. Firmware examples and required libraries are maintained in the NORVI GitHub repository.

### Board Configuration

1. Install Arduino IDE
   Install the Arduino IDE and add ESP32 board support:
   **Tools → Board → Boards Manager → ESP32**
2. Connect the Controller
   Connect the **NORVI X CPU** to your computer using the USB interface.
3. Select Board and Port
   Configure the board and communication port:
   - **Tools → Board → ESP32 Arduino → ESP32S3 Dev Module**
   - **Tools → Port → Select the corresponding COM/serial port**

![Figure 3: Arduino IDE Board and Tools Menu Configuration](https://norvi.io/wp-content/uploads/2026/08/Arduino-IDE-Board-and-Tools-Menu-Configuration.png)
Figure 3: Arduino IDE Board and Tools Menu Configuration

![Figure 4: Upload Settings under the Tools Menu](https://norvi.io/wp-content/uploads/2026/08/Upload-Setting-Under-the-Tools-Menu.png)
Figure 4: Upload Settings under the Tools Menu

1. Configure Board Settings
   Under the **Tools** menu, configure the following settings:

| Setting | Selection |
| --- | --- |
| USB CDC On Boot | Enabled |
| Flash Size | 16MB (128Mb) |
| PSRAM | QSPI PSRAM |

## Test Code Examples

### Required Libraries

Install these via Arduino IDE → Sketch → Include Library → Manage Libraries before compiling any of the examples below:

- Wire
- SPI
- PCA9539
- PCA9536D
- CST816S
- RTClib
- WiFi
- Ethernet
- EthernetUDP
- SD
- LovyanGFX

The previous version utilized the TFT_eSPI library for TFT display control. In the updated version, LovyanGFX has replaced TFT_eSPI as the TFT display library.

### Install the Required Library

Install the **Wire** library through:

**Sketch → Include Library → Manage Libraries**

Search for **Wire** and install it if required.

![Figure 5: Opening the Arduino IDE Library Manager](https://norvi.io/wp-content/uploads/2026/08/Opening-the-Arduino-IDE-Library-Manager.png)
Figure 5: Opening the Arduino IDE Library Manager

The Libraries are available in the [NORVI-X-Version-02 GitHub repository](https://github.com/NORVIControllers/NORVI-X-Version-02/tree/main/libraries).

### Open and Upload the Test Sketch

1. Open the **X-Q16 test sketch** from the [NORVI GitHub repository.](https://github.com/NORVIControllers/NORVI-X-Version-02/blob/main/expansion%20modules/NORVI-X-Q16/examples/arduino/NORVI_X-Q16_Test_Code/NORVI_X-Q16_Test_Code.ino)
2. Verify the **board** and **port** selections.
3. Click **Upload** to upload the test sketch to the NORVI X CPU.

### Initialization

The test sketch starts Serial communication at 115200 baud, initializes the I2C bus using SDA = IO8 and SCL = IO9, scans the I2C bus, and initializes the CPU-side PCA9539 interface. The sketch uses PCA9539 at address 0x75.

```
#include <Wire.h>
#include "PCA9539.h"
#define SDA 8
#define SCL 9

PCA9539 ioport(0x75);
```

The sketch then configures the required output channels as outputs and sets the output states during the test.

### Transistor Output Test

The test routine first switches the output channels OFF and then switches them ON one after another, with short delays between channels. This allows the operator to observe the corresponding output LED and connected load.

```
// Turn off outputs
  digitalWrite(OUTPUT5, LOW);
  digitalWrite(OUTPUT6, LOW);
  ...

 // Turn on outputs sequentially
  digitalWrite(OUTPUT5, HIGH);
  delay(100);
  digitalWrite(OUTPUT6, HIGH);
  delay(100);
  ...
```

The current repository test sketch maps the CPU-side output resources used by the test across direct ESP32-S3 GPIOs and PCA9539-controlled lines. Therefore, the exact CPU-side GPIO mapping should be kept aligned with the current NORVI-X-Version-02 sketch rather than treating TR1–TR16 as ESP32 GPIO numbers.

### Validating the Full Test Sketch

Open the Serial Monitor at **115200 baud** and confirm that the I²C scan detects the expected devices. Observe the Q16 output LEDs while the test routine is running and verify that each connected load responds correctly when its corresponding output is activated. After testing, confirm that all outputs return to their intended safe state. **Do not connect loads that exceed the specified per-channel or total current limits.**

## Troubleshooting

| Symptom | Suggested Action |
| --- | --- |
| Output stays off | Check wiring polarity and confirm GND is properly connected to the load's return path. |
| LED stays off despite command | Confirm I2C communication with the PCA9539 (0x75) is succeeding - check SDA/SCL wiring and pull-ups. |
| Output stays on / won't turn off | Check for a shorted or overloaded channel that may have tripped the PTC fuse; power-cycle to reset. |
| Module not detected by the CPU | Power down, reseat the module on the expansion bus, and confirm no address conflict with other daisy-chained modules.. |
| Inconsistent switching on multiple modules | Confirm each daisy-chained module has a unique I2C address per the DIP switch table. |
| TFT display blank or not working | Check three settings under Tools: USB CDC On Boot set to Enabled, Flash Size set to 16MB (128Mb), and PSRAM set to QSPI PSRAM. |

## Support & Resources

 **Product documentation & datasheets:** [https://norvi.io/docs/norvi-x-q16-datasheet/](https://norvi.io/docs/norvi-x-q16-datasheet/) **Product page:** [https://norvi.io/](https://norvi.io/) **Firmware examples & libraries:** [https://github.com/NORVIControllers/NORVI-X-Version-02/tree/main](https://github.com/NORVIControllers/NORVI-X-Version-02/tree/main) **Technical support:** support@norvi.io

## REVISION HISTORY

| Rev. | Date | Change Description | Board Revision |
| --- | --- | --- | --- |
| 1.0 | 07/09/2026 | Initial release | V4 |
