Creative Commons images are CC BY-NC-SA 3.0

11.95

added to your
shopping cart

quantity
In stock 37 in stock
11.95 1+ units
10.76 10+ units
9.56 100+ units

Description: Have you run out of I/O pins? This great IC allows the user to expand up to 16 I/O using only two I/O for control! The PCF8575C is controlled through an I2C interface and features 16-bits of quasi-bidirectional input/output pins. Checkout the datasheet for more info!

Features:

  • 16 individually addressable pins
  • Each pin configurable for input or output
  • Interrupt output pin

Documents:

Dimensions: 1x1"

Comments 22 comments

  • Pin connections:
    SDA to pin 4 on the analog header
    SCL to pin 5 on the analog header
    VCC to 5v
    GND to GND
    I/O pins need pull up resistors to VCC.
    Board has A0-A2 with solder pads like (|). connect middle to left (power) for a 1, or right (gnd) for a 0. (see picture shown above)
    setting the pins:
    Wire.beginTransmission(d);
    Wire.send(b); // byte for pins 0-7
    Wire.send(b); // byte for pins 8-15
    Wire.endTransmission(); // stop transmitting
    The board supports id 0-7. Add 32 (0x20) to the id and pass that to beginTransmission. My device id was 0 and I passed 32 to beginTransmission
    you have to send an even # of bytes. first is the lower 8 I/O pins. second is for the higher 8 I/O pins.
    read is similar. here’s quick code
    Wire.requestFrom(32, 2); // 2 bytes from device 0
    while(Wire.available())
    {
    char c = Wire.receive();
    Serial.print(c, HEX); // print the character
    Serial.print(“, ”);
    }
    you need to first write 1 to pins you would interested in reading from.

    1. You should really do a blank board or one with the non C suffix (5v only v.s. 2.5-5.5 Vcc).
    2. I notice 3 unpopulated resistors - what are they for? I don’t see a schematic pdf link. Address selection?
  • Does this expander also increase the distance that I2c data will transmit reliably?

  • It would be nice if more of these breakout boards were designed to mount directly to breadboards just by adding a few header strips. These boards were perpendicular pinouts make for more difficult development.

  • I am using the PCF8575 breakoutboard to connect 4 mpr121 boards. Without the PCF8575, the mpr121 code worked perfect. (http://code.bildr.org/download/1010.zip) However, I am having trouble to alter my arduino code to read the data when connected to the PCF8575. I guess the problem lies in the part of the code where the pins are adressed. In the original code I used Wire.requestFrom(0x5A,2); However with the PCF8575 board I need to alter the addressing within the code. I had a look at the sample AVR code, but this is rather complicated. Can anyone help me with the adressing of the pins?

  • Hello!

    My only PCF8575 provides between 1.6 and 2.6 volts in output. The power supply is 5 V and have resistors of 10 K between sda / scl and VCC. Any suggestions to solve the problem being?

    Best regards.

  • Wouldn’t a simple DIP atmega8 with internal clock do the same job, for $2?

  • How many analog i/os are there?

  • Whoa!!! Where did this come from? I thought I would need a mux, and when I could
    Save pins? This is going to be useful.

  • Could you please do a 3.3V version?

  • I would like to note that the PCA9555N mentioned above has internal pull-up resistors. This chip and the PCA9535 appear to require external pull-up resistors.

  • Found an alternative
    The PCA9555N is a 24 DIP (0.6 wide) - and there are other packages available, and this is a superset of the 8575.

    • As DBLEONARD says below- You have pull-up resistors built in with the PCA9555.

      What that translates into if you are trying to make a x16 pushbutton keyboard is that all you need to connect all those x16 SPST switches is one side connected to ground and the other side connected to one of the PCA9555 I01_1 Through IO_7, or IO2_1 through IO2_7 lines.

      This save you from having to make a 4 by 4 grid and having the Arduino Poll each of the x16 Switches and adding all those pull-up resistors. The PCA9555 handles all the de-bouncing, and sends an INT to your Arduino. That way the Arduino can be doing something more important than Polling Switches. NXP has a great example how this works in their LED dimmer demoboard on PG 5 Figure 2 >> http://www.nxp.com/documents/application_note/AN10315.pdf. COOL THING IT’S 5 V I/O tolerant.

    • I would like to point out IMO that NXP does a better job explaining how the PCA9555 (16-bit I2C-bus and SMBus I/O port with interrupt) works then does TI their version >> http://www.nxp.com/documents/data_sheet/PCA9555.pdf

  • One detail on the spec. sheet for the inexperienced to be aware of: the maximum GND and Vcc currents are 100mA.
    To spell it out, this means that although each pin can deliver 25mA, if you really need this much current, you will only be able to run 4 outputs at a time. I got round this limitation with a bit of multiplexing.
    Very nice little breakout and very easy to use.
    Thank you very much, Tabouli. Your example code was very useful.

    • Similar chips, like MCP23017, have also a limited total current allowed (125 mA into VDD for microchip version).
      If you really need that current then you can use trts or mosfets.

  • so everyone else knows, unfortunately the 0-7 side does not quite line up with the holes on a protoboard. :( shame if you ask me…

    • Time for a revison to fix the alignment and descrease the width by one column on a prototype board.

    • Not only that, but even if they did line up, the board is too wide to allow you to actually connect anything on one side of the breadboard. Makes it pretty much useless for breadboarding, which is kind of the point. This thing needs a new layout.

  • You could add in the features that up to 8 boards can be connected to the same bus thanks to the solder jumpers on the right of the board (ADDR mark).
    Note for Arduino users : the pinning of power and I2C signals is compatible with an Arduino board, thus you can plug this breakout board right in the 4 last analog pins of your board without any shield
    (
    as ‘Tod’ did with its BlinkM’s package, a wonderful idea)

  • The AVR code example is much more complicated for such a simple device. In modern days, most every AVR developer uses code library for I2C communication, thus a simpler code using AVRlib C lib or Arduino Wire code would be better.
    I could write some examples if I had one this breakout board :)


Related Products