Nein es geht dabei nicht um Fehler.Geht es dabei darum mögliche Fehler, die durch gleiche Werte bei der PWM entstehen weitestgehend zu minimieren weil der µC ja nicht Multitaskingfähig ist?
Ein Timer erzeugt einen Timer Overflow Interrupt wenn der Zählerstand von 255 auf 0 wechselt - der Timer also überläuft.
Da ich wegen der 12 Kanäle das nicht mit einem Comparematch Register realisieren würde, muss ein "externer Zäher", also ein Register oder RAM Speicherplatz in der Interruproutine hochgezählt und mit den gewünschten Comparematch Werten verglichen werden.
Da eine Auflösung von 8 Bit also 256 Stufen gewünscht ist braucht auch dieser externe Zähler nochmal 256 Overflow Interruptroutinen für seine Funktion.
Eine Beschleunigung dieses Prozesses wäre durch Laden des TCNT Registers mit einem Preload Wert (z.B. 127) während des Interrupts möglich, oder durch eine Verringerung der Auflösung.
Der Preload Wert darf aber nicht zu hoch werden, sonst kann der Interrupt bis zum Auftreten des nächsten Interrupts nicht vollständig abgearbeitet werden und der Controller wird dadurch Interrupts verschlucken.
Ausserdem muss zur Abarbeitung der SPI Kommandos auch noch etwas Prozessorleistung zur Verfügung stehen.
@hanni
Ich glaub ich versteh schon wie Du das gemacht hast.
Ich hatte auch so eine ähnliche Idee.
Das Problem dabei ist nur, das wenn viele Werte nah beieinander liegen, aber nicht gleich sind, die Abarbeitungszeit während des Interrupts zu kurz werden könnte, und auch da Interrupts verloren werden könnten.
Aus diesem Grund hab ich diese Idee wieder verworfen.
Lesezeichen