I'm trying to use a MCP23016 I/O expander with a 16F628 running at 20 MHz using I2C. No luck making it work but a Maxim LED driver sharing the I2C lines works great.
I'm using Porta.0 and Porta.1 for the I2C interface. Each line has a 4.7k pullup resistor. All three address lines on the MCP23016 are tied low.
I've got a DEFINE OSC 20 at the start of the program.
My commands are as follow:
First, I initialize the MCP23016 to make all pins outs:
I2CWRITE porta.0,porta.1,%01000000,$06,[%00000000, %00000000] 'all outputs
Then I try to cycle the outputs high and low:
I2CWRITE porta.0,porta.1,%01000000,$00,[%11111111, %11111111] 'RELAYS ON
PAUSE 5000
I2CWRITE porta.0,porta.1,%01000000,$00,[%00000000, %00000000] 'RELAYS off
pause 5000
Looping through the on/off commands causes no changes on any of the outputs.
The MCP23016 data sheet isn't entirely clear to me but I believe I just need to write data to the GP0 and GP1 registers without needing to do anything with the latch registers.
Any ideas? Thanks!
Jon
Bookmarks