Ich habe auch mal etwas gerechnet, da ich es sehr interessant fände, das
Projekt mit nur einem Controller zu realisieren:
Ich rechne mit einem 16MHz-Takt (62.5ns Zykluszeit), da ich hierfür
schon eine geeignete WS2811-Ansteuerung hätte...
Irq-Frequenz: 15000 Irqs/Sekunde => alle 66,67us ein Irq => rund 1000
Befehle pro Irq abarbeitbar.
Die Ansteuerung der WS-Chips sollte in einem Rutsch geschehen. 24 Bits
pro WS-Chip, 9 Chips => 216 Bits mit jeweils 1,25us Bitzeit => 270us
Übertragungszeit für alle WS-Daten.
Daraus folgt: Eine vollständige Übertragung alles WS-Daten bringt den
Interrupt aus dem Takt. Es gehen Irqs verloren.
Möglichkeit 1: Man überträgt pro Irq nur ein WS-Datum (24 Bits). Im
nächsten Irq dann das nächste WS-Datum und so weiter. Könnte klappen,
man muss nur aufpassen, das die Pausen zwischen den Übertragungen nicht
zu lang wird, da sonst der WS-Chip eine 50us-Pause erkennt und einen
Reset macht. Das ließe sich durch erhöhen der Irq-Frequenz realisieren
(auf z.B. 30000 Irqs pro Sekunde). Wenn alle WS-Daten übertragen sind,
übertragt man ein paar Irqs lang nichts und hat automatisch seine
50us-Pause für einen Reset.
Möglichkeit 2: (Wurde schon erwähnt) Auslagerung des IRMP auf einen
extra Controller. Beide Controller würde ich dann seriell verbinden und
die Fernbedienungscodes dann seriell weiterreichen. Dieses läßt sich
wohl am schnellsten realisieren.
Möglichkeit 3: Man schreibt sich eine eigene Erkennung für die
Fernbedienung. Die Interruptroutine wird auf sagen wir 1000 Irqs pro
Sekunde gesetzt. In jedem Irq werden alle WS-Chips bedient und andere
Irqs blockiert. Zusätzlich wird der IR-Empänger so angeschlossen, dass
er einen Irq auslösen kann (Pin-Change-Interrupt). Sobald jetzt ein Irq
vom IR-Empänger auftritt werden die WS-Chips nicht mehr versorgt und es
erfolgt nachdem die WS-Übertragung beendet ist, eine Prüfung auf das
Startbit (Pulsbreite) der IR-Übertragung (mit zeitlicher Latenz von bis
zu ca. 270us). Wenn kein Startbit erkannt wird, werden die WS-Chips
wieder mit Daten versorgt. Wird ein Startbit erkannt (9ms-Puls,
4,5ms-Pause), erfolgt eine genaue Untersuchung und Auswertung der
folgenden IR-Pulse, ohne das die WS-Chips mit Daten versorgt werden und
den IR-Empfang und Auswertung des Signals stören.
Gruß,
Thomas