If you draw a charlieplexed matrix in a more conventional column and row format and study the signal paths you may realize you can use column driver transistors to light multiple LEDs in a column at one time. This increases the duty cycle (and brightness) on the 20 LED matrix below from 1/20th (5%) to 4/20th (20%).
Once you add a driver IC to your design, there's no longer any advantage using Charlieplexing. You might as well use conventional multiplexing for a full brightness display. The same five pins you used for a Charlieplexed matrix of 20 LEDs can be used to drive a conventional matrix of 32 LEDs (below) or more to full brightness with PWM brightness control.
Regards, Mike
-------------------------------------------------------
Mike-K8LH
The design I posted was inspired by your diagram you posted a while back. I still can scan one row at a time (20% duty cycle). My diagram looks a lot more complicated than it actually is. It is expansion on your charlieplexing of 5 ports. I added 5 transistor to the rows, 5 resistors to the columns (keeping current in check), and the latch simply aids 683 in crunching the "Z" by blocking out the unwanted "sinking" lines on the rows. Please note adding the chip does not affect the duty cycle. The previous LED remains on until the next LED comes on. The Latching and strobing of the clock is extremely fast that LEDs won't even see it or feel it.
This is the chain of commands coming from PIC: 11111 (Reset Latch), 00000 (Latches ready for data), select anchor row to go high and the rest low (00001, GP0 for example). A split second later because of the built-in propogation delay, the clock is strobed "High" with sum of 1+0+0+0+0 = 1. Now we latched all the data and blocked all inputs. (0,0,0,0,1). Transistor Row1 is on sinking the row to ground ready for column. This remains on until all the latches are "reseted". And second 5 bits from PIC come in. Say we want to turn LED17 on. Pic will push out 10000 to turn column transistor from GP5 on. Hold the bit for as long as you want. LED17 comes on and remains on until instructed otherwise. The next complete set of command will reset the latches, zero them out to receive data and then sets clock high again to latch it. Your on time of the LED is so much larger than time for reset, data, and latch.
Your thoughts....