Kann ich den Widerstand für die LED´s dann ganz normal berechnen oder muss ich irgendwas beachten?
Du musst wegen der Darlingtonschaltung in den ULNs mit etwa 0.8V weniger Spannung als Vcc rechnen (hat aber nichts mit dem Basiswiderstand zu tun). Bei 5V Eingang sind es am 'Ausgang' des ULN dann entsprechend nur noch 4.2V.
Versteh ich das nicht richtig, dass durch SERIN das Signal kommt, wann der Schieberegister arbeiten soll und wie?
Jain. Die 5 Schieberegister hintereinander verhalten sich quasi wie ein großes Schieberegister. Der Trick ist, dass die Schieberegister 'gelatched' sind, also das 'schieben' zunächst mal unabhängig von momentan 'angezeigten' Zustand ist. Erst wenn man den Schieberegistern 'sagt': Jetzt übernehmen (low-Strobe an RCLK) wird das 'durchgeschobene' Bitmuster auch angezeigt.
...PB2 ist der SCK Pin... Kann ich diese Leitung als Taktgeber verstehen?
Ja. Genau das. Bei der Standard-Einstellung eines ATTiny (1MHz CPU clock) und der Standard SPI clock (= 1/4 CPU clock) sind das immerhin 250kHz...
Jetzt wird das hoffentlich verständlich:
Weil wenn ich ja dann alle 5 aneinander hänge bekommen die 3 Schieberegister für das Knight-Rider Licht ja das selbe Signal wie die beiden Schieberegister für die jeweils 16 äußeren LED´s?
Nein. Wir haben 5 Bytes (oder 40 Bits) die mit irgendeinem 'Muster' bestückt werden und dann angezeigt werden. Ob die 3 Schieberegister für das Knight-Rider Lauflicht vor oder nach den 2 Schieberegister für die seitlichen Lauflichter kommen ist eigentlich egal. Das ist nur eine Frage der Software.
Wenn ich so drüber nachdenke, dann wäre es zur Vereinfachung der Software sogar besser anders rum...
Also zuerst die 3 Schieberegister für das Knight-Rider Lauflicht und dann die 2 Schieberegister für die seitlichen Lauflichter. In Deinem (alten) Plan der Anschluss PB0 an SERIN von IC10 und SEROUT von IC6 an SERIN von IC2.
In diesem Fall wird zunächst das Bitmuster (16 Bit Variable) für die seitlichen Lauflichter gesendet (die dafür vorgesehenen Schieberegister sind ja am Ende der Kette) und dann das Bitmuster für das Knight-Rider Lauflicht (24Bit von denen 4 nicht genutzt werden). Beim ersten Schieberegister (vom ATTiny aus gesehen - also 'Dein' IC10) bleiben dann die 4 höherwertigen Anschlüsse frei.
In der Software verwenden wir dann eine 16Bit Variable für die seitlichen Lauflichter die zunächst auf 1 initialisiert wird und dann bei der Aktualisierung (z.B. jede halbe Sekunde - das kann man aber per Poti einstellen) um ein Bit nach links geschoben wird und dann wieder eine 1 dazu gezählt wird. Wenn die Variable = &HFFFF ist (alle Bits gesetzt), dann wird nur noch nach links geschoben (ohne wieder 1 dazu zu zählen) bis die Variable = 0 ist, dann wieder mit 1 initialiseren...
Für den Knight-Rider nehmen wir eine 32Bit Variable (von der wir nur 24 Bits an die Schieberegister ausgeben) und insgesamt nur 20 Bits verwenden. Die Variable wird einmal mit 1 initialisiert und dann wird diese 1 einfach 19 Mal nach rechts und dann wieder 19 Mal nach links geschoben.