Prozent zu 8bit

  • einen schönen Ostersonntag,


    hab für einen Kumpel, der Morgen Geburtstag hat ein kleenes Pult programmiert.
    zur Info, der ist Veranstaltungstechniker, und das Pult sollte so ne art Anlehnung an die GrandMa sein.. kleiner Scherz aber halt dass man so en paar Lampen im Zimmer
    dimmen und steuern kann.
    so weit so gut, allderdings hab ich jetzt Anzeigenbedingt alles in Prozent angegeben, sprich in Werten von 0% bis 100%.
    Würde diese dann recht gerne per Array (Tabelle) in 8bit umwandeln, am besten noch mit log. Helligkeitsanpassung fürs Auge ;)
    Leider hab ich noch nix gefunden, würd mich freuen wenn jemand schon mal so en ähliches Problem hatte und mir evtl. weiter helfen könnte.
    Ach ja bei Google etc. bin ich ned fündig geworden. Also bitte nicht schlagen fals dies hier schon zum 1000.. mal diskutiert wurde.


    lg

  • Kannst Du vielleicht ein paar mehr Details zu dem Aufbau des Pultes geben?
    Wenn Du Potis verwendet hast und brauchst logarithmischen Output... Warum nicht logarithmische Potis einsetzen?

  • Aso ja, also des Pult ist eigentlich nicht mel als en kleiner Mega8, aber auch nur weil ich für den noch eine
    Platine rumliegen hatte. Aber bei dem bleibt es jetzt auch, hab so viel Zeit investiert, nur um den code so klein
    zu bekommen damit er drauf passt, jetzt will ich keinen anderen mehr nehmen.
    "die Potis" ist ein Drehencoder mit eingebauten Taster, mit dem man durchs ganze Menü kann inkl.
    der Farb, Helligkeits, und sonst so allen Einstellungen was man so braucht :)


    Und wegen der erleichterten Bedienung für den Benutzer ist alles nur in Prozentwerten angeben, also nicht 0-255
    sondern 0-100. Was ja auch ausreicht. Allerdings dimmt man ja im allgemeinen (DMX, PWM, WS2801......) meist mit
    8bit(0-255). Und wegen log. PWM-Schritte sind ja nicht linear zur Lichtempfindlichkeit fürs Auge.
    Und vieleicht hat ja jemand eine solche "Anpasskurve" wie sie ja schon oft diskutiert wurde auch für 100.Schritte.


    gruß

  • Hmm, also richtig logarithmisch ist das zwar wahrscheinlich nicht, aber es gibt eine nette Kurve wenn ich in SCalc (OpenOffice) die Prozentzahl quadriere, durch 10000 teile und mit 255 multipliziere. Dann einfach runden. Langsame Änderung im unteren Bereich, im oberen Bereich schnell.



    [edit]
    %-Bereich: 0,00...1,00
    Formel: (((10^%)-1)/9)*255

  • Knapp daneben, denn umgekehrt ist es gesucht. Ganzzahlig von 0...100 auf 0...255 statt von ganzzahligen 0...255 auf 0...100.


    Hier mal ein bißchen graphisch aufbereitet:


    % in 0,00...1,00
    Quadratisch: % * % * 255
    Kubisch: % * % * % * 255
    Logarithmisch: ( ( ( 10^% ) - 1) / 9) * 255


    ---
    Gib einem Mann einen Fisch und er wird einen Tag lang satt sein.
    Gib einem Mann eine Angel und lehre ihn fischen, so wird er ein Leben lang satt sein.

  • Logarithmisch: ( ( ( 10^% ) - 1) / 9) * 255

    Na wenn das für Dich logarithmisch ist, kannst Du eigentlich auch gleich (2^%-1)*255 benutzen, das kannst Du dann mit einer Geraden nähern...


    Was ich damit sagen will: Die "-1" verfälscht den exponentiellen Charakter der Funktion doch stark, und zwar umso mehr, je kleiner der Prozentwert und je kleiner die Basis der e-Funktion ist. Will man einen größeren Helligkeitsbereich logarithmisch abbilden, muss man auch größere Basen benutzen.

  • am besten noch mit log. Helligkeitsanpassung fürs Auge. Leider hab ich noch nix gefunden, würd mich freuen wenn jemand schon mal so en ähliches Problem hatte und mir evtl. weiter helfen könnte.

    Ja, ein ähnliches Problem hatten schon viele. Schau mal hier zur Theorie:


    http://www.mikrocontroller.net….-technischer_Hintergrund


    und hier zur Praxis:


    http://www.mikrocontroller.net/articles/LED-Fading

  • Wenn dieser Hintergrundartikel zutrifft und das Auge dem Stevensschen Potenzgesetz mit einem Gamma von ca. 0,5 gehorcht, hätte strenter ja die perfekte Lösung mit seiner Quadratfunktion. Damit bin ich ja auch völlig einverstanden - nur darf mir das keiner als Logarithmus- bzw. Exponentialfunktion verkaufen wollen ;)

  • ich hatte mich ja früher schon mal mit sowas beschäftigt, da erschien mir der Wert von 0,33 (bei der Stevenschen Potenzfunktion) für das Helligkeitsempfinden auch zu niedrig, ich bin dann durch Versuche auch "eher auf ne Quadratfunktion" gekommen, einfach Quadrat nehmen wäre so "zwischen" der µC.net-Tabelle (* und meiner, sollte also schon auch gut funktionieren...


    (interessanter Weise gibt es in meinem gekauften Dimmer auch ne "quadratische Dimmerkurve", aber keine logarithmische...)


    *) der damals dort veröffentlichten, als noch die Rede von "logarithmischem Helligkeitsempfinden" war - k.A., ob sie mittlerweile auch die Tabelle angepasst haben...


    bei mir war die Korrektur etwas "milder" als Quadratfunktion, es war Ausgabe = Eingabe hoch 1,5 (und dann Wertebereich skaliert) - aber gut möglich, dass es mit "hoch 2" auch noch gut passt als Kompromiß...


    ich hatte damals den Wert für die halbe Helligkeit experimentell ermittelt, also Helligkeiten verschieden gedimmter LEDs verglichen, und dann festgesetzt, dass die LED bei 90 (statt 128 unkorrigiert) eben "halb hell" sei - ohne großartiges wissenschaftliches drumrum, also gut möglich, dass ne Quadratfunktion noch besser passt...


    und das könnte man dann direkt rechnen, ohne in ner Tabelle nachsehen zu müssen - in Assembler braucht die Rechnung (bei angepasstem Wertebereich) auch nicht wirklich mehr Takte oder Speicher als das nachsehen in ner Tabelle, aber man spart sich eben diese 256 Bytes im Flash...


    also in der Art Out = In * (In + 1) / 256, da man durch 256 wesentlich leichter teilen kann als durch 255...


    da bleibt dann natürlich am Anfang erst mal der Ausgabewert ein paar Schritte auf Null - was aber auch gar nicht schadet als "Puffer" - ich habe ja auch so billige Fader-Pulte, Fader werden irgendwann schlechter, da kommt's also schon auch mal vor, dass der DMX-Wert zwischen 0 und 1 rumzuppelt wenn der Fader ganz unten ist, und der LED-PAR dann leicht flackert - würde der erst bei 5 oder so überhaupt angehen, wäre dieses Flackern weg, bei nem Fade würde es aber auch nicht groß auffallen, wenn die letzten 5 Schritte unten fehlen...


    EDIT: mal nachgerechnet, ein Ausgabewert von 1 ergibt sich erst bei ner Eingabe von 16, das ist zu viel "unten weggeschnitten" - also doch lieber Tabelle, oder dann höher aufgelöste PWM, wäre eh' besser, weil einen Wertebereich von 0-255 wieder auf einen von 0-255 abzubilden, ergibt zwangsläufig immer irgendwelche Rundungsfehler/grobe Abstufungen...


    und hier konkret, wo 0-100 auf 0-255 umgerechnet werden soll, geht's dann im µC mathematisch eh' nur recht aufwändig, da ist dann die vorher erstellte Tabelle auf jeden Fall besser...

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!