Forum: Mikrocontroller und Digitale Elektronik Hohe PWM Auflösung bei HardwarePWM


von Marcel H. (multiholle)


Lesenswert?

Ich nutze zur Helligkeitssteuerung meiner LEDs HardwarePWM auf meinem 
Atmega168. Die Helligkeitswerte für die LEDs lese ich aus dieser 
Tabelle:
1
uint16_t pwmtable[32] PROGMEM = {0, 1, 2, 2, 2, 3, 3, 4, 5, 6, 7, 8, 10, 11, 13,
2
    16, 19, 23, 27, 32, 38, 45, 54, 64, 76, 91, 108, 128, 152, 181, 215, 255};

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?

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Solch ein ähnlicher Thread war gerade...

Beitrag "30 PWM-Kanäle mit ATmega48 machbar?"

Hier dazu meine Empfehlung:
Beitrag "Re: 30 PWM-Kanäle mit ATmega48 machbar?"

Aber Falk bekommt das sicher per Software hin.

von Christoph S. (mixer) Benutzerseite


Lesenswert?

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

von Andreas K. (derandi)


Lesenswert?

Linearen Helligkeitswert verwenden und den auf logarythmisch umrechnen?
Also die Tabelle durch eine Berechnung ersetzen?

von Karl H. (kbuchegg)


Lesenswert?

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.

von ulrich (Gast)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

@  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

von Marcel H. (multiholle)


Lesenswert?

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.

von Marcel H. (multiholle)


Lesenswert?

Welcher AVR würde denn mit mindestens drei 10-Bit-PWM Kanälen in Frage 
kommen? Möglichst nicht in SMD Bauform.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.