Die Ansteuerung der FETs sieht mir komisch aus.
Es sind P-Channel FETs, d.h. die muss man zum Durchsteuern auf Masse ziehen, zum Sperren aber möglichst auf Drain Potential anheben. D.h. bei Deiner Beschaltung werden die nur gerade eben so sperren, wenn überhaupt (Die steuern lt. DB schon bei Vgs= -2.bisslewas V fast voll durch!). Hier würde ich zur Sicherheit noch eine Treiberstufe zwischenhängen, was in Anbetracht der angestrebten Schaltgeschwindigkeit vermutlich eh nicht verkehrt wäre.
Und bitte erklär uns nochmal genau wie die Spaltenansteuerung funktionieren soll. Mir erschliesst sich nicht so recht, wer da nun wann die 74HC164 steuert/taktet: der µC oder der 4020N?
Und was soll in die 74HC164 geschoben werden? Eine 1 die durchwandert oder eine 0 die durchwandert?
Und zu den 500Hz: Du brauchst pro TLC 192Bit an Daten, macht bei Dir dann 192Bit x 12 = 2304 Bit pro Spalte. Davon hast Du 16 Stück, macht also 36864Bit pro Frame.
Das reicht bei 16MHz rechnerisch grad mal für 434 FPS, aber der Wert ist auch noch viel zu hoch weil das SPI-Interface vom Mega8 nicht mit vollem sondern maximal halben CPU-Takt läuft. Dazu kommt noch, dass man noch ein paar Zyklen zum Laden des neuen Werts in die Register braucht und schon bleibt von den 434Hz nicht mehr wirklich viel übrig, selbst wenn Du Interrupts verwendest.
Und wir reden hier nur von der Datenübertragung! Da ist noch kein Bild/Grafikeffekt/Uhrzeit berechnet...
Mit effizienter Programmierung müsste das Ganze noch zu bewerkstelligen sein, aber es ist schon ziemlich eng.
Ich denke, man kann unterm Strich eine für's menschliche Auge flimmerfreie Anzeige hinbekommen, rein von den grundsätzlichen Möglichkeiten der Hardware gesehen.