Thursday, January 10, 2013

I2C 16bit IO extender

The PCA9555 is a 16 bit IO chip which interfaces with I2C. Each of the 16 bits can be individually configured as a digital input or digital output.

PCA9555 demo board. GPIO pins are on the top.


I will be using this to control a bank of relays from my Raspberry Pi. If you are not familiar with I2C on the RPI you might want to look at my posts about the PCA8591.

This time I bought the chip mounted to a board from ebay. I had to solder the header pins to the board so I could connect all the inputs & outputs.

jnewbigin@raspberrypi:~$ i2cdetect 1
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-1.
I will probe address range 0x03-0x77.
Continue? [Y/n]
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: 20 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --          

As expected, the chip shows up at address 0x20. The PCA9555 is programmed by a set of registers. The registers are split up into ports or banks which operate on 8 bits at a time. The registers are:

  • 0x00 Select Input values for bank 0
  • 0x01 Select Input values for bank 1
  • 0x02 Select Output values for bank 0
  • 0x03 Select Output values for bank 1
  • 0x04 Select Polarity Inversion for bank 0
  • 0x05 Select Polarity Inversion for bank 1
  • 0x06 Select IO Configuration for bank 0
    (set/1 = input (default), clear/0 = output)
  • 0x07 Select IO Configuration for bank 1
    (set/1 = input (default), clear/0 = output)

To read the first 8 inputs
i2cset -y 1 0x20 0x00
i2cget -y 1 0x20


To read the next 8 inputs
i2cset -y 1 0x20 0x01
i2cget -y 1 0x20

To set the first 8 bits to be outputs
i2cset -y 1 0x20 0x06 0x00
And to turn all the outputs on
i2cset -y 1 0x20 0x02 0xff

My next job is to hook up the relay boards but that requires setting up a more permanent power supply which can run the Raspberry Pi, drive the relays and power the relay devices. Hopefully photos to come soon.

13 comments:

  1. how to control the pins by a c - code

    ReplyDelete
  2. Hi. I have some sample code which I am almost ready to post. I got a bit distracted with hardware things but I am back on track now.

    ReplyDelete
  3. Hello ,I'm working on this IC PCA9555 with esp8266 for i/o expander but I found one issue like one port as inputs and other one as output whereas in one input apply socket with switch
    My problem is when plug in and plug out from socket in that case pca9555 is reset again and again.
    we are set the value of register through code but still have problem .

    Please resolve my problem......

    ReplyDelete
  4. It is necessary to read more such messages. Tina

    ReplyDelete
  5. Thanks for the helpful information you shared with us.
    scary maze game

    ReplyDelete
  6. Thanks for the valuable information and insights you have so provided here. bloxorz

    ReplyDelete
  7. Indonesian single ladies are a delight to be around because of their positive natures and bubbly personalities. The typical Indonesian woman has tanned skin, dark hair, and even darker eyes. The modern Indonesian woman looks especially indonesian brides feminine with her petite body usually adorned with in fashionable wardrobe. She wears make up and her hair is usually carefully arranged. Perfect looks go along with a lovely character.

    ReplyDelete
  8. You have a great blog here! would you like to make some invite posts on my blog?

    Bikepacking.quebect
    Information
    Click Here
    Visit Web

    ReplyDelete
  9. I think this is among the most vital info for me. And i’m glad
    reading your article. But should remark on few general things, The
    web site style is wonderful, the articles is really great.
    온라인섯다

    ReplyDelete
  10. Hey, I just hopped over to your site via StumbleUpon. Not something
    I would normally read, but I liked your thoughts none the less.
    Thanks for making something worth reading.
    안전놀이터

    ReplyDelete
  11. This comment has been removed by the author.

    ReplyDelete
  12. Use the i2cdetect command to scan for strands I2C devices connected to your Raspberry Pi.

    ReplyDelete