Here is a simple circuit using a 4-bit binary adder (74HC283 for example), that takes an input address on 4 bits and add 1 to it:
- 4-bit “A” input is connected to previous neighbor
- 4-bit “B” input is tied to ground (“0”)
- Input carry (Cin) is set to 1 to add 1
- Output carry is not used
- the 4-but “Q” output is then equal to A+1 and sent to the next neighbor in the chain
- by having pull-up resistors on the “A” input, it sets it value to binary “1111” when this node is the first in the chain (no previous neighbor)
This simple circuits containing a single 16-pin chip, its decoupling capacitor and either 4 independent resistors or a single quad-resistor array can be used to generate an automatic I2C device address for up to 16 chained I2C nodes.