I2C-8574

Fork project on GitHub

I2C PCF8474-based IO Expander with 4x IOB daughterboard connections

I2C-8574-Graphic
I2C-8574-Graphic

 

Download I2C-8574 -
Download PCF8574.pdf - Documentation
Download PCF8574A.pdf - Documentation

 

I2C-8574 Version 3.0

First built: 2017-10

Not tested or validated

  • 4x IOB daughterboard connections * 3.17” Tyco rail size

Schematic
Schematic
Bot Silk
Bot Silk
Board
Board
Top Silk
Top Silk

Download I2C-8574 - CHMT Component and feeder definitions
Download I2C-8574.gerbers.zip - Gerber Fabrication files
Download I2C-8574.parts - Parts List (spreadsheet data)

 

I2C-8574.bom

Parts Value Package Quantity Library Type/Feeder
C1, C2, C3, C4 0.1uF 0805-CAP 4x SPCoast-minimal NONE
R16, R17 1K-0010060P1 0805-RES 2x SPCoast-minimal NONE
R18 2K2 0805-RES 1x SPCoast-minimal 7
R19, R20 4k7 0805-RES 2x SPCoast 9
BOARD1   BOARD-DINRAIL-3.17IN-NOHOLES 1x SPCoast PTH
VR1   TO-252 1x SPCoast NONE
J5, J8 CONNECTOR-GROVE-4P-2.0-3470130P1 4P-2.0 2x SPCoast PTH
J1, J2 CONNECTOR-I2CLEFT I2C-L 2x SPCoast PTH
FID1, FID2, FID3, FID-U1, FID-U2 FIDUCIAL FIDUCIAL_1MM 5x SPCoast NONE
LED16, LED17, LED18 G - 0330010P1 0603-LED 3x SPCoast NONE
U$2, U$3, U$4, U$5 IO4-IOBBARE IO4-IOB 4x SPCoast PTH
A1, A2, A3 jumper 1X03 3x SPCoast-minimal PTH
U$1 OSHW-LOGOL OSHW-LOGO-L 1x SparkFun PTH
U2 PCF8574ADW SO-16DW 1x SPCoast-minimal NONE
U1 PCF8574DW SO-16DW 1x SPCoast-minimal NONE
SDA SCL 1X02_LOCK 1x SPCoast-minimal PTH
SCL SDA 1X02_LOCK 1x SPCoast-minimal PTH

I2C-8574 Version 2.4

First built: 2014-04, 2014-07, 2014-10, 2016-10, 2017-11

  • 4x IO4 connections * RJ12 or 0.100 pin termination on each IO4 location * per-IO4-port 12v/5v selection * 3.17” Tyco rail size

Schematic
Schematic
Bot Silk
Bot Silk
Board
Board
Top Silk
Top Silk

Download I2C-8574 - CHMT Component and feeder definitions
Download I2C-8574.gerbers.zip - Gerber Fabrication files
Download I2C-8574.parts - Parts List (spreadsheet data)

 

I2C-8574.bom

Parts Value Package Quantity Library Type/Feeder
C1, C2, C3, C4 0.1uF 0805-CAP 4x SPCoast NONE
R16, R17 1K-0010060P1 0805-RES 2x SPCoast NONE
R15 2K0 0805-RES 1x SPCoast 7
R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R18 2K2 0805-RES 16x SPCoast 7
R19, R20 4k7 0805-RES 2x SPCoast 9
POWER 7-12vDC POWER_USAGE 1x SPCoast-minimal PTH
C5 150uF 0810-CAP 1x SPCoast NONE
J10   DCJ0202 1x SPCoast PTH
Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, Q10, Q11, Q12, Q13, Q14, Q15   SOT23 16x SPCoast NONE
VR1   TO-252 1x SPCoast NONE
JP1, JP4, JP5, JP6 .100x1x6 1X06_LOCK 4x SPCoast PTH
BOARD1 BOARD80X100-NOHOLES BOARD-DINRAIL-3.17IN-NOHOLES 1x SPCoast PTH
J5, J8 CONNECTOR-GROVE-4P-2.0-3470130P1 4P-2.0 2x SPCoast PTH
J1, J2 CONNECTOR-I2CLEFT I2C-L 2x SPCoast PTH
LED16, LED17, LED18 G - 0330010P1 0603-LED 3x SPCoast NONE
A1, A2, A3, VIO1, VIO2, VIO3, VIO4 jumper 1X03 7x SPCoast PTH
U$1 OSHW-LOGOL OSHW-LOGO-L 1x SparkFun PTH
U2 PCF8574ADW SO-16DW 1x SPCoast NONE
U1 PCF8574DW SO-16DW 1x SPCoast NONE
J6, J7, J9, J11 RJ12/6 RJ25-PANEL 4x SPCoast PTH
SDA SCL 1X02_LOCK 1x SPCoast PTH
SCL SDA 1X02_LOCK 1x SPCoast PTH
LED0, LED1, LED2, LED3, LED4, LED5, LED6, LED7, LED8, LED9, LED10, LED11, LED12, LED13, LED14, LED15 Y-0330050P1 0603-LED 16x SPCoast NONE

Documentation

Introduction

This board was originally produced to help me build control panels for my model railroad - I needed to connect many different buttons, switches and lights to an Arduino, and also connect the Arduino to a communications bus (Ethernet, CAN or Loconet), and I couldn't find anything that had both high IO point density AND visual feedback.

I started with a simple Arduino ShowMeShield with Active-Low monitoring LEDs on each pin. I quickly iterated (understatement) through at least a dozen designs, trying to discern what worked well and what didn't. I'll spare you the details… I was aiming to support up to the max I2C devices that can be used together; for the PCF8474 series, that would be 8x devices of each type, for a total of 16x8, or 128 i/o points.

(Active-LOW means that the LOGICAL “ON” state is when the PHYSICAL state is low. In this case, the indication LED is on when the desired pin is grounded; when programming, writing a "1" to an Active Low port will cause it to ground).

Cautions

With several hundred IO loads, and up to 32 external breakout devices, a suitable power supply needs to be used.

In practice, a 2A 9-12VDC supply a good choice.

This supply needs to power the Arduino, its direct IO loads, the I2C expander chain AND provide ~100mA to each IO4 device. Instead of relying on the Arduino's onboard regulated supply (which is only good for about 100mA itself), each board has its own regulator, and there is a common supply feed that can handle about 2.5A @ 12v. If more power is needed, the daisy chained power feed thru can be replaced with a per-board independent supply.

Specifications

This IO board is based on the 8574 I2C 8-bit IO Expander, with a buffered LED driver (discrete P-FETs) connected to a bank of LEDs that show the status of the I/O lines in real time.

Each board provides a latched set of 16x IO points, with each point being software selectable to be either an input or an output. The individual points are reasonably protected from the environment, and can easily drive or sink 10 mA each. By using active low inputs and outputs, the effects of environmental noise are reduced - remote sensors only need to ground an I/O point to register activity.

Communication Protocol

Simple I2C Reads and Writes:
int I2Cextender::read8(int i2caddr) {
    int _data = -1;
    Wire.requestFrom(i2caddr, 1);
    if(Wire.available()) {
      _data = Wire.receive();
    }
    return _data;
}

void I2Cextender::write8(int i2caddr, int data)
{ 
    Wire.beginTransmission(i2caddr);
    Wire.send(0xff & data);
    Wire.endTransmission();  
}

See I2Cexpander for a more complete interface library.

This technical documentation is licensed under the CERN Open Hardware Licence v1.2

Tags: eagle SPCoast IOB