MCP23008 as Input Errors

34 views
Skip to first unread message

Stefan Stefan

unread,
Jan 26, 2016, 12:51:26 PM1/26/16
to Pi4J
Hi there,

I have configured a MCP23008 expander as Digital Input and i have the following errors.

java.io.IOException: Error reading from /dev/i2c-1 at address 0x21 to address 0x7. Got -30001.
    at com.pi4j.io.i2c.impl.I2CDeviceImpl.read(I2CDeviceImpl.java:221)
    at com.pi4j.gpio.extension.mcp.MCP23008GpioProvider$GpioStateMonitor.run(MCP23008GpioProvider.java:314)
java.io.IOException: Error reading from /dev/i2c-1 at address 0x21 to address 0x7. Got -30001.
    at com.pi4j.io.i2c.impl.I2CDeviceImpl.read(I2CDeviceImpl.java:221)
    at com.pi4j.gpio.extension.mcp.MCP23008GpioProvider$GpioStateMonitor.run(MCP23008GpioProvider.java:314)
java.io.IOException: Error reading from /dev/i2c-1 at address 0x21 to address 0x9. Got -20001.
    at com.pi4j.io.i2c.impl.I2CDeviceImpl.read(I2CDeviceImpl.java:221)
    at com.pi4j.gpio.extension.mcp.MCP23008GpioProvider$GpioStateMonitor.run(MCP23008GpioProvider.java:319)
java.io.IOException: Error reading from /dev/i2c-1 at address 0x21 to address 0x7. Got -30001.
    at com.pi4j.io.i2c.impl.I2CDeviceImpl.read(I2CDeviceImpl.java:221)
    at com.pi4j.gpio.extension.mcp.MCP23008GpioProvider$GpioStateMonitor.run(MCP23008GpioProvider.java:314)
java.io.IOException: Error reading from /dev/i2c-1 at address 0x21 to address 0x7. Got -20001.
    at com.pi4j.io.i2c.impl.I2CDeviceImpl.read(I2CDeviceImpl.java:221)
    at com.pi4j.gpio.extension.mcp.MCP23008GpioProvider$GpioStateMonitor.run(MCP23008GpioProvider.java:314)
java.io.IOException: Error reading from /dev/i2c-1 at address 0x21 to address 0x7. Got -30001.
    at com.pi4j.io.i2c.impl.I2CDeviceImpl.read(I2CDeviceImpl.java:221)
    at com.pi4j.gpio.extension.mcp.MCP23008GpioProvider$GpioStateMonitor.run(MCP23008GpioProvider.java:314)
java.io.IOException: Error reading from /dev/i2c-1 at address 0x21 to address 0x7. Got -20001.
    at com.pi4j.io.i2c.impl.I2CDeviceImpl.read(I2CDeviceImpl.java:221)
    at com.pi4j.gpio.extension.mcp.MCP23008GpioProvider$GpioStateMonitor.run(MCP23008GpioProvider.java:314)
java.io.IOException: Error reading from /dev/i2c-1 at address 0x21 to address 0x7. Got -30001.
    at com.pi4j.io.i2c.impl.I2CDeviceImpl.read(I2CDeviceImpl.java:221)
    at com.pi4j.gpio.extension.mcp.MCP23008GpioProvider$GpioStateMonitor.run(MCP23008GpioProvider.java:314)
java.io.IOException: Error reading from /dev/i2c-1 at address 0x21 to address 0x7. Got -20001.
    at com.pi4j.io.i2c.impl.I2CDeviceImpl.read(I2CDeviceImpl.java:221)
    at com.pi4j.gpio.extension.mcp.MCP23008GpioProvider$GpioStateMonitor.run(MCP23008GpioProvider.java:314)
java.io.IOException: Error reading from /dev/i2c-1 at address 0x21 to address 0x7. Got -30001.
    at com.pi4j.io.i2c.impl.I2CDeviceImpl.read(I2CDeviceImpl.java:221)
    at com.pi4j.gpio.extension.mcp.MCP23008GpioProvider$GpioStateMonitor.run(MCP23008GpioProvider.java:314)

MCP23008 has RESET pin tied to VCC, A0 pin tied to VCC and A1 and A2 pin tied to GND.

My code is the following :

public static void testMCP23008WithotGPIOController(I2CBus bus) throws IOException, InterruptedException {

int addressInput = 0x21;

MCP23008GpioProvider mcpInput = new MCP23008GpioProvider(bus,addressInput);

for (Pin pin : MCP23008Pin.ALL){
System.out.println(mcpInput.getMode(pin).getValue());
Thread.sleep(500);
}

}

And it's acting strange ! The procedure ends, it's reading the pins but the main method doesn't end, it's throwing the exceptions from above.

And the strangest part is that if i add something else before reading input pins, it is also throwing exceptions.

Example:

public static void testMCP23008WithotGPIOController(I2CBus bus) throws IOException, InterruptedException {

int addressRelays = 0x20;
int addressInput = 0x21;

MCP23008GpioProvider mcpRelays = new MCP23008GpioProvider(bus,addressRelays);
MCP23008GpioProvider mcpInput = new MCP23008GpioProvider(bus,addressInput);

for (Pin pin : MCP23008Pin.ALL){
mcpRelays.setMode(pin, PinMode.DIGITAL_OUTPUT);
}

for (Pin pin : MCP23008Pin.ALL){
mcpInput.setMode(pin, PinMode.DIGITAL_INPUT);
}

for (Pin pin : MCP23008Pin.ALL){
mcpRelays.setState(pin, PinState.HIGH);
Thread.sleep(500);
}

for (Pin pin : MCP23008Pin.ALL){
mcpRelays.setState(pin, PinState.LOW);
Thread.sleep(500);
}

for (Pin pin : MCP23008Pin.ALL){
System.out.println(mcpInput.getMode(pin).getValue());
Thread.sleep(500);
}

}

Even if the procedure is at 3rd or 4th for, it's showing me the same error for device 0x21 but i am not working with it yet.

Can someone help me with this ?

Reply all
Reply to author
Forward
0 new messages