![]() |
| 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.

how to control the pins by a c - code
ReplyDeleteHi. 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