Hallo Alle,

seit einiger Zeit sitze ich über einer PingPongPlatine und will die (Benutzer-)Oberfläche des Originals in C nachbauen. Geht ja unheimlich langsam, zumal ich das erste Mal Schieberegister bedienen musste.

Einiges verstehe ich an der Schaltung nicht, ich will aber nicht gleich den Autor anschreiben und nachfragen (zu schüchtern - aber wenns nicht anders ginge . . .). Vielleicht hat jemand von euch schon darüber nachgedacht und kann mir das beantworten. Ich verstehe zu wenig von Schaltungstechnik um mir das zu erklären.
A) Warum sind die LEDs in einer Zeile angeordnet? Zur Schaltung.
B) Warum ist hier das zeitraubende Füttern der Schieberegister nicht mit der schnellen Variante über die SPI-Hardware realisiert worden?

Zu A) Wenn ich mehrere LEDs in einer Reihe anknippse, dann sinkt natürlich die Helligkeit, weil der Controllerport nicht unbegrenzt Strom liefern kann. Das sehe ich auch am Pegel im Oskar. Ginge das nicht anders zu lösen?
Habe ich da vielleicht einen Denkfehler und müsste ich die LEDs in einer Zeile EINZELN takten? Derzeit knippse ich die LEDs zeilenweise an oder aus - je nachdem, ob sie gebraucht werden oder nicht. Aber wenn ich die LEDs wirklich nur Stück für Stück schalte, wird der ganze Ablauf NOCH langsamer - siehe B). Derzeit habe ich eine Taktzeit von rund 2,5 ms für einen kompletten Durchlauf. Dabei bleibt mir zwischen den LED-Anknipps-ISRs genug Zeit für mein Hauptprogramm - ca. 50 % der CPU-Zeit.

Zu B) Im RNWissen steht die Variante "Füllen des Portexpanders" über SPI-Hardware als DIE schnelle Lösung. Und ich muss das Ganze mühselig mit Clock-high/Clock-low hineinhacken. Fazit: die CPU-Zeit für das "restliche" Programm ist nicht so pfiffig hoch.

Danke schon jetzt für eure Antworten.