Zitat von
wkrug
Kannst Du mal das Verarbeitungsschema posten ?
Jesses, na da hab ich mich ja auch etwas eingelassen .
Naja, ich werde trotzdem einmal versuchen es anhand eines Beispiels mit 4 Kanälen zu erklären. Nehmen wir weiter an, diese Kanäle sind alle an einem Port an den Pins 0-3.
Datenaufbereitung
Die jeweiligen Helligkeitwerte der einzelnen Kanäle kommen seriell Kanal für Kanal über die serielle Schnittstelle in den Mikrocontroller.
Also Kanal 1, Kanal 2, Kanal 3, Kanal 4.
Diese Daten werden im RAM zwischengespeichert.
Wurde der letzte Kanal empfangen wird erst einmal überprüft ob es sich tatsächlich um neue Werte handelt oder ob diese mit den alten indentisch sind.
Sind es neue Daten wird ein Backup dieser gefahren (zu Vergleichszwecken). Sind es keine neue Daten wird solange gewartet bis wieder ein paar Daten im Speicher stehen.
Anschließend wird der Jeweiligen Helligkeit ein Kanal in Form eines Bitmusters zugeordnet.
Das sieht dann im Speicher wie folgt aus:
Kanal 1 = 83,
Kanal 2 = 43,
Kanal 3 = 154,
Kanal 4 = 3
Code:
83, 0b00000001
43, 0b00000010
154, 0b00000100
3, 0b00001000
Anschließend werden diese Daten nach dem Helligkeitwert sortiert.
Das Ergebniss sieht im Speicher wie folgt aus.
Code:
3, 0b00001000
43, 0b00000010
83, 0b00000001
154, 0b00000100
Nun wird, fals nicht vorhanden eine Helligkeit 0 hinzugefügt und die bei dieser Helligkeit aktiven LED's berechnet.
das sieht dann so aus:
Code:
0, 0b00001111
3, 0b00001000
43, 0b00000010
83, 0b00000001
154, 0b00000100
Diese Daten werden anschließend gepackt, also die Kanäle mit gleicher Helligkeit zusammengefasst.
Zum Schluss werden diese Daten in einen Ausgabepuffer geschrieben und stehen damit der PWM Erzeugung zur Verfügung.
PWM Erzeugung
In einer Timer Interrupt Routine, welche alle 125 Takte aufgerufen wird passiert das folgende:
1. wird ein vorhandener Zählerwert mit der nächsten Helligkeit verglichen. Stimmen diese überein wird die jeweilige Kanalmatrix aus dem Speicher geholt und ausgegeben, sowie die nächste Helligkeit als Vergleichswert geladen.
2. der Zähler wird um eins erhöht.
3. ist der Zählerwert = 255 so wird der Zähler Resetet und der Vergleichswert auf 0 gesetzt.
----------------------------------------------------------------------------
So .. ich hoffe das war jetzt so halbwegs verständlich erklärt.
Grüße,
Hanni
Lesezeichen