Braucht man dafür ein Tutorial?
Software PWM ist doch "nur":
- Pin an
- warten (T_on)
- Pin aus
- warten (T_off)
und alles wieder von vorne.
Wie du dieses warten realisierst, ist dir überlassen, das kannst du mittels timer lösen oder ganz einfach über eine wait schleife.
Mit wait:
fester wait wert z.B. 100µs. Zu beginn, werden alle LEDs eingeschalten, dann wirde alle 100µs eine Variable hochgezählt und mit den PWM werten verglichen, stimmt ein PWM wert überein, wird der entsprechende Pin 0 Gesetzt. Hat die Variable ihren Maximalen Wert erreicht, werden wieder alles LEDs eingeschaltet.
Vorteil:
Recht einfach realisiert
Nachteil:
µC rennt mit 100% Last.
Eleganter geht es mit Timern:
Hier gibt es 2 Möglichkeiten, entweder mit dem Compare-register des Timers arbeiten oder in jedem Timer Durchlauf ein Variable hochzählen ( und dann wie bei der Wait Variante nur ohne der 100% Last).
Mit dem Compare Register:
Die PWM werte werden der Größe nach sortiert und der kleinste PWM wert wird in das Compareregister geladen. Bei einem Timer-Compare interrupt werden alle LEDs, die diesen PWM wert haben, auf 0 gesetzt und der nächst kleinere PWM wert ins Compare-Register geladen...... Bei einem Timer overflow werden dann wieder alle LEDs eingeschaltet.
Vorteil:
CPU Last liegts im einstelligen Prozent Bereich
Nachteil:
Recht komplexe Realisierung durch Sortieralgorithmus und interrupts
Lesezeichen