Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
elektronik:software-pwm [08.12.2024 21:53] – angelegt Martin Fitzel | elektronik:software-pwm [Unbekanntes Datum] (aktuell) – Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== Software PWM ====== | ||
+ | Oft macht es Sinn, dass man LEDs über softwareseitige PWM-Befehle dimmt. Dazu gibt es z.B. das Code-Beispiel [[elektronik: | ||
+ | |||
+ | ===== Erklärung ===== | ||
+ | |||
+ | Eine PWM bedeutet, dass sich das Puls-Pausen-Verhältnis ändert. Die Summe Pulszeit (high) + Pausenzeit (low) ist immer gleich. Sie können aber natürlich unterschiedlich lang sein. Ist der Puls lang, dann ist die Pause entsprechend kurz. Und umgekeht genauso. Langer Puls = lange Einschaltdauer, | ||
+ | |||
+ | Genau das passiert hier | ||
+ | |||
+ | <code freebasic> | ||
+ | 'Soft PWM | ||
+ | ' | ||
+ | If h > Z Then led=1 Else led=0 | ||
+ | If z<10 then incr z else z=0 | ||
+ | </ | ||
+ | |||
+ | Hier wird in einer durch interrupt schnell aufgerufener isr der Zähler von 0 bis 10 durchgezählt. Wird h=5 gesetzt, dann leuchtet die Led bei Z=0..4 und bei z=5..10 ist sie aus. 5 Zeiteinheiten an, 6 Zeiteinheiten aus. Im Mittel also bisschen weniger als halbe Helligkeit. Bei h=11 wäre die Led immer an, bei h=0 immer aus. | ||
+ | |||
+ | |||
+ | |||
+ | Software-PWM heißt, du musst die PWM von Hand machen. | ||
+ | Also den Zähler nachbilden mittels Variable und eine 2. Variable als Vergleichs-Wert vorhalten. | ||
+ | |||
+ | Dann nimmst du einen Timer und lässt dir einen Interrupt generieren mit z.B. 1000 Hz. | ||
+ | In der ISR inkrementierst du dann die Zähler-Variable. Ist die Variable 1 Byte groß würde die Überlaufen nach 255 und wieder 0 sein. | ||
+ | |||
+ | Dann vergleichst du die Zähler-Variable mit dem Vergleichswert. Ist das Gleich z.B. Pin setzen. | ||
+ | Ist der Wert 0 dann Pin löschen. Oder auch umgedreht. | ||
+ | |||
+ | So hättest du eine Soft-PWM mit 256 Werten (8-Bit). PWM-Frequenz wäre in dem Fall ISR-Frequenz / 256 = 1000Hz / 256 = 3,9Hz | ||
+ | |||
+ | So funktioniert SoftPWM. | ||
+ | |||
+ | Wenn du den Kitt nachmachen willst brauchst du pro LED ein Variable (Match), und natürlich eine Zähler-Variable. | ||
+ | |||
+ | Übrigens muss man nicht bis 256 zählen will, man kann die Zählervariable auch bei >100 auf 0 setzen als Beispiel. | ||
+ | Das wäre dann eine PWM, die Werte von 0 bis 100 als Werte zulässt. | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | Software-PWM heißt, du musst die PWM von Hand machen. | ||
+ | Also den Zähler nachbilden mittels Variabler und eine 2. Variable als Vergleichs-Wert vorhalten. | ||
+ | |||
+ | Dann nimmst du einen Timer und lässt dir einen Interrupt generieren mit z.B. 1000 Hz. | ||
+ | In der ISR inkrementierst du dann die Zähler-Variable. Ist die Variable 1 Byte groß würde die Überlaufen nach 255 und wieder 0 sein. | ||
+ | |||
+ | Dann vergleichst du die Zähler-Variable mit dem Vergleichswert. Ist das Gleich z.B. Pin setzen. | ||
+ | Ist der Wert 0 dann Pin löschen. Oder auch umgedreht. | ||
+ | |||
+ | So hättest du eine Soft-PWM mit 256 Werten (8-Bit). PWM-Frequenz wäre in dem Fall ISR-Frequenz / 256 = 1000Hz / 256 = 3,9Hz | ||
+ | |||
+ | So funktioniert SoftPWM. | ||
+ | |||
+ | Wenn du den [[elektronik: | ||
+ | |||
+ | Übrigens muss man nicht bis 256 zählen will, man kann die Zählervariable auch bei >100 auf 0 setzen als Beispiel. | ||
+ | Das wäre dann eine PWM, die Werte von 0 bis 100 als Werte zulässt. |