Timingprobleme PWM

Gast #957209
Lesenswert?

Hi,

ich habe hier schon seit längerem meinen Code für etwas genaueren und 
schnelleren PWM herumliegen.
Das Problem ist nur, dass er alles andere als genau ist...

Die Ursache dafür weiß ich - wenn zwei Helligkeitswerte nah beieinander 
sind, löst der Interrupt nicht rechtzeitig aus und es kommt zu einem 
größeren Verzug, was man sehr deutlich sieht.

Ich habe schon versucht, in die Interrupt-Verarbeitung eine Schleife 
einzubauen, die das Ganze abfangen soll, leider ohne Erfolg...


Könnt ihr mir Tipps geben, wie ich den PWM so hinbekomme, dass er 
halbwegs sauber läuft?
Wichtig ist mir, dass die relativ hohe Auflösung (die Seoul-LEDs sind 
wirklich bestialisch hell) und die hohe Frequenz (bin TFT-verwöhnt und 
dadurch flackerempfindlich geworden).

Viele Grüße

hownottobeseen
Angehängte Dateien:
#957222
Lesenswert?

@ hownottobeseen (Gast)

>Könnt ihr mir Tipps geben, wie ich den PWM so hinbekomme, dass er
>halbwegs sauber läuft?

Siehe Soft-PWM

>Wichtig ist mir, dass die relativ hohe Auflösung (die Seoul-LEDs sind
>wirklich bestialisch hell) und die hohe Frequenz (bin TFT-verwöhnt und
>dadurch flackerempfindlich geworden).

Jaja, es leben die E-Smog Sensitiven und Placebo Süchtigen . . . ;-)

MFG
Falk
Gast #957536
Lesenswert?

Hi,

@Falk:

Den Soft-PWM-Artikel kannte ich, das "intelligente" Beispiel der Seite 
jedoch noch nicht. Problem bei dem Teil: Der Code im Interrupt ist zu 
groß, bei 16MHz CPU-Takt gehen gerade so 500Hz PWM-Frequenz bei 8 Bit 
Auflösung. Leider zu wenig.

@Jürgen:
Das mit dem Runden ist so ne Sache ;)
Ich weiß jetzt nicht auswendig, wie viele Zyklen der Code im Interrupt 
braucht, je nachdem dürfte die Rundungsungenauigkeit sehr hoch werden.
Kann man bei dem Code im Interrupt noch deutlich was an Performance 
rausreißen (evtl. auch in Richtung Assembler) oder ist da so ziemlich 
Ende Fahnenstange?


@Falk und Jens:

ja, "der Typ da hat Probleme"...
Klar, das Auge kann nur 20 Bilder/s verarbeiten, aber wenn man den Blick 
vorbeischweifen lässt, ist die erforderliche Wiederholfrequenz deutlich 
höher.
Meine Leuchte soll angenehm sein und da passt flackern einfach nicht 
dazu.

Übrigens sitze ich vor einem 21'' TFT mit 1600x1200, der die volle 
Farbtiefe nativ kann. Empfehle jedem mal, sich vor einen vernünftigen 
TFT zu sitzen, es lohnt sich ;)
Aber diesbezüglich EOD, die PWM-Frequenz und -Auflösung soll möglichst 
hoch sein, egal wie bescheuert das für so manchen klingen mag.


Viele Grüße

hownottobeseen
Gast #957585
Lesenswert?

Viel Luft ist in deiner Interruptroutine nicht mehr.
Aber schau dir mal den Assemblercode an und schalte evtl. die 
Optimierung an.

Ich habe auf einem R8C mit 20MHz mal ca 15us Interrupt-Dauer gemessen,
das hat dann für 250 Helligkeitsstufen bei 200Hz PWM-Frequenz gereicht
(= 20us Raster).

Evtl. kann man bei niedriger Helligkeit mit Busy-Wait eine bessere 
Auflösung erreichen, dazu bin ich in dem Projekt aber nicht mehr 
gekommen.
(Nur bei niedriger Helligkeit fällt die grobe Abstufung auf.)

Jürgen

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren