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
@ 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
Meine Fresse XD Ich hock an nem 21 Zoller baujahr 98 1600*1200@75hz... hock dich da drann =) mir gehts gut an dem ding =)))
Hallo Hownottobeseen, du mußt die Timerwerte in CalcCnt so runden, daß sich die Interrupts nicht zu nahe kommen. Jürgen
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.