I'm designing a 19x19 led matrix (for an interactive go board) and am considering how to drive it.
My first thought was to use 3 MCP23017, one and a half for rows, one and a half for columns. I've used them before and and will already be ordering some for another project. Because of the current limitation I would need to do half row scanning. What I'm not sure about is speed. How do I calculate how fast the MCPs would be able to scan the matrix? Is it fast enough to avoid noticeable blinking? What about brightness?
Is there a better way? Possibly with shift registers or some type of dedicated chip?
You could split it up in smaller blocks and use a couple matrix driver IC's:
MAX7219: 8x8, i.e. 64 leds, it is easy to chain multiple ICs
HT16K33: 8x16, i.e. 128 leds, cannot be chained, you need output pins for each.
TM1638: 8x10, i.e. 80 leds, can be chained, but need a CS pin for each chip.
All these chips has constant current driver for the leds, i.e. the leds do not need any series resistor.
to be precise: HT16K33 uses I2C bus.
A HT16K33 can be individually adressed, one adress out of 8 different adresses. In other words - you need two I2C pins for a maximum of eight HT16K33.
Consider using LED strips (like WS8212) that will allow you to manage all the LEDS with just 1 pin and power.