Hauptdimmer verrechnen

Gast #2492461
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.