So ganz sehe ich noch nicht, was die Bustreiber bei einer C-Messung helfen sollen. C-Messung wollt ihr über t-Messung machen. t ergibt sich duch die exponentielle (Ent)ladekurve bis U einen bestimmten Wert über/unterschreitet. Das verwendet man am µC für einen Input-Capture (IC).

"Von Hand" auf die Ports zu schauen wird zu langsam/ungenau sein für diese Größenordnungen, auch wenn man in Assembler arbeitet. IC-Kanäl hat man auf AVR aber maximal 2 (oder so). Man muss also alle 8 LEDs einer Zeile nacheinander durchmessen. Ven der Geschwindigkeit her ist das kein Problem, für ne Messung vergehen eh nur ne handvoll µC-Takte.

Die Bustreiber sind IMHO sehr störend für die Messung. Deren Kapazitäten addieren sich zu Werten, unter denen der zu messende C-Hub locker verschwindet, vor allem wenn man noch die Streuung der steilflankigen Treiber bedenkt.

Ich würd sowas versuchen, zunächst mal mit einer LED pro µC-Port. Wenn das funzt, kann man immer noch schauen, ob MUX zu machen ist. Das Problem ist nicht der MUX an sich, sondern die Parasitären C. Und von denen hat man um so mehr, je mehr Komponenten man verbaut.

Code:
(A)---|>|--o---R1---µC
           |
           |
           R2
           |
           |
          (0)
R1 ist ein normaler Vorwiderstand für die LED wenn diese leuchten soll (A=HIGH, µC=LOW).

Zum Messen wird der µC-Port auf HIGH gelegt, A auf LOW und die D über R1 geladen. Dann aktiviert man den IC und lässt den Port los (high-Z) die D entlädt sich über R2. Den IC macht man zB bei VCC/2. Die IC-Zeit ist ein Maß für C. Danach kommt die nächste LED dran.

Dazu bräuchte man in der Version einen µC pro Zeile, vorausgesetzt ein µC hat
-- mindestend einen IC mit einen Input-MUX 8:1 davor
-- Ports die den LED-Strom versenken können

Vom Platz her ist das nicht mehr bzw. weniger als mit Bustreibern zu MUXen.

R1 im Bereich von ein paar 100 Ohm (Abhängig von LED), R2 im Bereich von MΩ.