Zitat Zitat von Besserwessi Beitrag anzeigen
Die Widerstände sind so, das eigentlich immer nur eine LED pro Zeile gleichzeitig Leuchten sollte. Das passt auch zum langsamen Schieden des Schieberegisters. Der Bildaufbau erfolgt also Spalte für Spalte. Wegen der relativ schwachen Treiber der 4094 (wohl 74HC4094) wird es aber mit mehr als 1 LED Gleichzeitig schon schwer.

Besser wäre es aber gewesen die Widerständen an die 4094 zu machen (halt 2 mehr) und dann Zeilenweise das Bild aufzubauen - die Treiber des AVRs sind meist etwas kräftiger als beim 4094. Dann wäre auch eine Ansteuerung per SPI Hardware besser.

Der C Code wird ggf. noch etwas schneller wenn man wenn möglich lokale Variablen in der ISR nutzt.
Es sollten auch etwa 120 Hz Widerhohlfrequenz ausreichen - die nötige Rechenzeit für die Darstellung reduziert sich damit auf etwa 1/3.
Generell ist die Schaltung ein bisschen Fragwürdig.

Wenn das Teil wirklich dafür vorgesehen ist, wie eine normale Matrix betrieben zu werden gibt es einiges zu Bemängeln.
Schaltet man Beispielsweise Spalte für Spalte, so dass die LED eigentlich immer nur kurz an und ab geht, das allerdings so schnell das ein Bild für das Menschliche Auge ersichtlich wird, so weiss ich nicht wie gut das dem ATMega tut. Denn Pulsbetrieb bedeutet auch Pulsströme und bei 12 Spalten nimmt der Strom dann auch erheblich zu.

Am schlausten wäre es die ganze high-side geschichte nicht direkt an den uC zu hängen sondern das ganze zu überarbeiten und da eine Treiberstufe dazwischen zu schalten. Einfache Transistoren würden schon reichen und man könnte auch Problemlos mehrere LED's gleichzeitig leuchten lassen.