Hallo, ich habe mich an eine ganz einfach Aufgabe gemacht. Drei LED's werden über eine PWM gedimmt, die Werte kommen von einem sog. DMX-Bus. Jetzt will ich einen weiteren Kanal als als Hauptdimmer hinzufügen. Wie gehe ich am besten und effektivsten vor? Meine Idee war, die Hauptdimmerwerte mit den Einzelkanlwerten zu Multiplizieren. Allerdings muss ich dann ja auch eine Division durchführen und ich weiß nicht, wie effektiv bzw. sinnvoll meine Idee ist. Gedacht habe ich es mir so: Byte 1 -> Maindimmer Byte 2-4 ->Einzeldimmer Wenn jetzt der Maindimmer auf Wert 128 steht und die Einzeldimmer auf 255, dann ist die Gesamthelligkeit ja trotzdem nur 128. Also würde meine Rechnung so aussehen: Byte1 / 255 = x Byte 2neu = x * Byte2 Byte 3neu = x * Byte3 Byte 4neu = x * Byte4 Ist das sinnvoll? Division in Assembler ist ja meistens nicht so schön. Gibt es andere Wege, dass ganze zu lösen?
Arnold schrieb: > > Byte1 / 255 = x > Byte 2neu = x * Byte2 > Byte 3neu = x * Byte3 > Byte 4neu = x * Byte4 > > Ist das sinnvoll? Division in Assembler ist ja meistens nicht so schön. Division in Assembler ist ein Klacks, wenn du durch eine 2-er Potenz dividieren musst. Denn dann ist das einfach nur recht schieben. Bei einer Division durch 256 ist es noch einfacher. Das Low-Byte wird einfach weggelassen und das High-Byte zum neuen Low-Byte erklärt.
1 | Byte1 = Kanalwert * EinzelDimmer * GesamtDimer / 256 / 256; |
musst du eben eine 24 Bit Multiplikation machen. Dividieren willst du so spät wie möglich. Mathematisch gesehen also die Division so weit nach rechts schieben, wies geht. Daher ist es nicht besonders sinnvoll, wenn du dir den Wert GesammtDimmer/256 im Voraus berechnest. Allenfalls könnte man noch EinzelDimmer*GesamtDimmer/256 als Verstärkungsfaktor berechnen, mit dem dann der Kanalwert multipliziert wird um danach nochmal durch 256 zu dividieren. Mathematisch also
1 | Byte1 = (Einzel * Gesamt) / 256 * Kanalwert / 256 |
Dann braucht man nur 16 Bit Multiplikationen
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.