Durch diese Tabelle sind die LED Schritte allerdings auf 32 Schritte
begrenzt, was bei übergängen zu einem sichtbaren ruckeln führt. Da ich
Timer0 und Timer2 verwende (3 LEDs) kann ich als maximalen Wert nur 256
verwenden. Gibt es eine Möglichkeit diese Schranke zum umgehen?
Hallo,
wenn dir 2 Kanäle reichen, kannst du den Timer1 nehmen, der hätte 2
16Bit Kanäle wo du logarithmische 256 Stufen unterbringst.
Ansonnsten mal nach nem grösseren AVR umschauen, der mehr 16Bit Timer
bzw. 16Bit PWM Ausgänge hat.
Gruss
Marcel Holle schrieb:> Timer0 und Timer2 verwende (3 LEDs) kann ich als maximalen Wert nur 256> verwenden. Gibt es eine Möglichkeit diese Schranke zum umgehen?
Eine 10 Bit Software-PWM ist bei 20Mhz Systemtakt noch so lala drinnen.
Das ergibt dann knapp 76Hz PWM Frequenz. 3 LED sind dann kein Thema. In
~200 Takten in der ISR müsste man so um die 10 bis 20 LED relativ
problemlos unterbringen können, so dass auch nebenher noch etwas
Rechenzeit übrig bleibt.
Wenn das nicht reicht, müsste man Falks 'intelligente Lösung' aus dem
Ärmel zaubern.
Man kann das Hardware PWM Signal noch zusätzlich mit einer Software
Modulation übrelagern. Für einen Wert von z.B: 2,5 also zwischen 2 und
3 als PWM Wert hin und her wechseln. Die Software braucht so nur 4 - 8
Bits zu berechnen. Weil die Software nur für 1 PWM Schritt
verantwortlich ist, fallen auch relativ niedrige Frequenzen noch nicht
so sehr als Flackern auf.
@ Marcel Holle (multiholle)
>uint16_t pwmtable[32] PROGMEM = {0, 1, 2, 2, 2, 3, 3, 4, 5, 6, 7, 8, 10,
Da du ja anscheinend den Artikel LED-Fading schon kennst, warum
nutzt du nicht Timer 1 mit 16 Bit? Damit kannst du zwei LEDs butterweich
dimmen. Und mit dem richtigen AVR hast du zwei 16 Bit Timer und 4 PWM
Kanäle. Problem gelöst. Alternativ Soft-PWM und 10 Bit Auflösung,
das könnte schon reichen.
MFG
Falk
Mir wird wohl nur Soft-PWM übrig bleiben, da ich bei meinem Atmega168
bleiben möchte. Timer1 reicht ja nicht für 3 Kanäle aus. Ich werde mal
testen, wie das dann aussieht.