www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timingprobleme PWM


Autor: hownottobeseen (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meine Fresse XD

Ich hock an nem 21 Zoller baujahr 98 1600*1200@75hz... hock dich da 
drann =)
mir gehts gut an dem ding =)))

Autor: Jürgen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Hownottobeseen,

du mußt die Timerwerte in CalcCnt so runden, daß sich die Interrupts
nicht zu nahe kommen.

Jürgen

Autor: hownottobeseen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jürgen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.