Ich habe mich in den letzten Tagen mit diesem Thema befasst, da ich das gleiche Problem habe. Ich habe versucht, LEDs mit PWM sichtbar linear zu dimmen, aber ich möchte eine volle Auflösung von 256 Schritten. Es ist keine leichte Aufgabe, 256 Zahlen zu erraten, um manuell eine Kurve zu erstellen!
Ich bin kein erfahrener Mathematiker, aber ich weiß genug, um einige grundlegende Kurven durch Kombinieren einiger Funktionen und Formeln zu erzeugen, ohne wirklich zu wissen, wie sie funktionieren. Ich finde, dass Sie mit einer Tabelle (ich habe Excel verwendet) mit einer Reihe von Zahlen von 0 bis 255 herumspielen, ein paar Formeln in die nächste Zelle einfügen und sie grafisch darstellen können.
Ich verwende pic assembler, um das Ausblenden zu erledigen, und Sie können sogar die Tabelle dazu bringen, den Assembler-Code mit einer Formel ( ="retlw 0x" & DEC2HEX(A2)
) zu generieren . Dies macht es sehr schnell und einfach, eine neue Kurve auszuprobieren.
Nachdem ich ein bisschen mit den LOG- und SIN-Funktionen, dem Durchschnitt der beiden und ein paar anderen Dingen herumgespielt hatte, konnte ich nicht wirklich die richtige Kurve finden. Was passiert ist, dass der mittlere Teil der Überblendung langsamer war als die unteren und oberen Ebenen. Wenn auf ein Abblenden sofort ein Abblenden folgt, war ein scharfer, wahrnehmbarer Anstieg der Intensität zu verzeichnen. Was (meiner Meinung nach) benötigt wird, ist eine S-Kurve.
Eine schnelle Suche in Wikipedia ergab die Formel für eine S-Kurve. Ich habe dies in meine Tabelle eingefügt und einige Anpassungen vorgenommen, um es über meinen Wertebereich zu multiplizieren.
Ich habe es auf meinem Rig getestet und es hat wunderbar funktioniert.
Die von mir verwendete Excel-Formel lautete wie folgt:
=1/(1+EXP(((A2/21)-6)*-1))*255
Dabei ist A2 der erste Wert in Spalte A, der A3, A4, ..., A256 für jeden Wert erhöht.
Ich habe keine Ahnung, ob dies mathematisch korrekt ist oder nicht, aber es liefert die gewünschten Ergebnisse.
Hier ist der vollständige Satz von 256 Levels, die ich verwendet habe:
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05,
0x05, 0x06, 0x06, 0x06, 0x07, 0x07, 0x07, 0x08, 0x08, 0x08, 0x09, 0x09, 0x0A, 0x0A, 0x0B, 0x0B,
0x0C, 0x0C, 0x0D, 0x0D, 0x0E, 0x0F, 0x0F, 0x10, 0x11, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1F, 0x20, 0x21, 0x23, 0x24, 0x26, 0x27, 0x29, 0x2B, 0x2C,
0x2E, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3A, 0x3C, 0x3E, 0x40, 0x43, 0x45, 0x47, 0x4A, 0x4C, 0x4F,
0x51, 0x54, 0x57, 0x59, 0x5C, 0x5F, 0x62, 0x64, 0x67, 0x6A, 0x6D, 0x70, 0x73, 0x76, 0x79, 0x7C,
0x7F, 0x82, 0x85, 0x88, 0x8B, 0x8E, 0x91, 0x94, 0x97, 0x9A, 0x9C, 0x9F, 0xA2, 0xA5, 0xA7, 0xAA,
0xAD, 0xAF, 0xB2, 0xB4, 0xB7, 0xB9, 0xBB, 0xBE, 0xC0, 0xC2, 0xC4, 0xC6, 0xC8, 0xCA, 0xCC, 0xCE,
0xD0, 0xD2, 0xD3, 0xD5, 0xD7, 0xD8, 0xDA, 0xDB, 0xDD, 0xDE, 0xDF, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5,
0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xED, 0xEE, 0xEF, 0xEF, 0xF0, 0xF1, 0xF1, 0xF2,
0xF2, 0xF3, 0xF3, 0xF4, 0xF4, 0xF5, 0xF5, 0xF6, 0xF6, 0xF6, 0xF7, 0xF7, 0xF7, 0xF8, 0xF8, 0xF8,
0xF9, 0xF9, 0xF9, 0xF9, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFC,
0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD,
0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF