Pull-up resistors are tricky to understand at first. They seemed counterintuitive to me but now they’re just a regular part of hardware programming.
The first thing to understand is that if you don’t do something to bring a pin to ground or voltage it just “floats.” Bringing a pin to HIGH or LOW is called biasing. Floating does not produce reliable results. You can solder a resistor in place for each pin and the resistor will hold it HIGH or LOW so you always know what to expect when you read that pin. That would be troublesome so inputs come equipped with the ability to hold themselves HIGH with a pull-up resistor.
For example, if you set all of your inputs to use the pull-up resistors but didn’t connect any switches you would always read a HIGH state on those pins. This is good because now you have a reliable way to check that there is nothing happening on that pin. However, it’s a little confusing because, if you’re like me, you expect there to be a HIGH value when something is happening on the pin. To make that pin go LOW you install and close a switch between that pin and GROUND. The path to ground overpowers the resistor and the pin will read zero volts.
Pull-down resistors are not built into the chips I’ve worked with but you can easily install them yourself by putting a high value resistor between the pin you’re working with and ground. Then you close a switch between the pin and a voltage the chip can accept and it goes HIGH when you press the switch. Pull-down resistors work the way most people expect a switch to work because you get a HIGH value when the switch is closed. In this case a high value resistor would be 20KΩ to 11MΩ.
More examples of code written with the standard Arduino Wires library were studied to see how others have approached the communication between an Arduino and the MCP2308 chips. It seems that there does need to be a command to the MCP23008 which designates the pins as inputs. There may need to be a second call which designates the pins should have their internal pull-up resistors activated. According to the datasheet this is done through the GPPU (0x06) register.
The code currently repeats the data from the chip but doesn’t specify if the data is new. This means that there is no definitive proof there is continued communication.
• Establish communication with MCP23008
• Follow programming agenda