Tag zusammen,
ich habe das CodeBeispiel aus
https://www.mikrocontroller.net/articles/Soft-PWM lauffähig in meiner
Umgebung.
Um ein sanftes Dimmen zu erreichen habe ich allerdings t1 auf folgendes
geändert:
1
constuint8_tt1[8]={0,1,2,3,4,3,2,1};
Mein Problem: Der Übergang von 0 auf 1 ist deutlich zu groß!
Die Pulsbreite entspricht mit unten zitierten Defines mit einer
Taktfrequenz von 16MHz auf einem ATMEGA16 ca. 40us. ich würde da gern
deutlich drunter kommen. Aber egal was ich tun, ich kriege die
Einschaltzeit nicht verkürzt.
Ich vermute, ich sehe den Wald vor lauter Bäumen nicht. Kann mir bitte
jemand auf die Sprünge helfen?
Danke und Grüße,
Reinhard
Ein Teil der defines:
1
#define F_CPU 16000000L // Systemtakt in Hz
2
#define F_PWM 100 // PWM-Frequenz in Hz
3
#define PWM_STEPS 255 // PWM-Schritte pro Zyklus(1..255)
4
#define PWM_PORT PORTD // Port für PWM
5
#define PWM_DDR DDRD // Datenrichtungsregister für PWM
Reinhard schrieb:> Aber egal was ich tun, ich kriege die Einschaltzeit nicht verkürzt.
Was hast du denn probiert?
Nach deinen Parametern ist die PWM-Frequenz auf 100Hz eingestellt und
eine Auflösung von 8Bit definiert. Nach Adam Riese ergibt das einen
Zeitraster von 40µs (T = 1/100Hz / 256).
Wolfgang schrieb:> Die Helligkeit wird durch das Tastverhältnis bestimmt, nicht durch die> Einschaltzeit.
Und das Auge nimmt die Helligkeit logarithmisch war.
Korrekt. Ganz unabhängig von der Frequenz kommt man mit einer 8-bit PWM
nicht unter 1/2^8 Einschaltzeit.
Das ist fürs Dimmen von LED nicht grade toll, denn die
Helligkeitswahrnehmung ist bei Weitem nicht linear.
Auf Softwareseite helfen da nur deutlich mehr als 8-bit. Bei 100Hz PWM
Frequenz sollte das auch drin sein.
Karl schrieb:> Und das Auge nimmt die Helligkeit logarithmisch war.
Folglich bekommt man beim Übergang von AUS zur ersten Stufe immer einen
Helligkeitssprung, wenn man eine lineare PWM verwendet - oder was
wolltest du damit jetzt sagen?
Wolfgang schrieb:> oder was> wolltest du damit jetzt sagen?
Dass die Abstufungen im Bereich geringer Helligkeiten immer grober
erscheinen als am hellen Ende.
Da man sich aber nicht aussuchen kann, wie die Abstufungen verteilt
sind, helfen nur mehr Stufen überall.
Wolfgang schrieb:> Karl schrieb:>> Und das Auge nimmt die Helligkeit logarithmisch war.>> Folglich bekommt man beim Übergang von AUS zur ersten Stufe immer einen> Helligkeitssprung, wenn man eine lineare PWM verwendet - oder was> wolltest du damit jetzt sagen?
Der Karl mit K wollte sagen, daß ein Bit Unterschied im "Dunkeln" viel
größer empfunden wird als bei "hellem Schein". Der Unterschied von "aus"
zum kürzest möglichen Puls muß viel kleiner als 1/256 sein.
Peter D. schrieb:> Ich hab für die SW-PWM 12 Bit genommen:>> Beitrag "AVR: Fast-PWM (BAM) 12 Bit für 8 Kanäle"
Naja, ganz nett, aber in Asm geht natürlich noch sehr viel mehr. Wenn es
irgendwen interessiert, könnte ich Code liefern für eine
17Bit-Software-PWM für bis zu 32 Kanäle (designed für
Mega16,32,644(P),1284(P)). Natürlich reiner Asm-Code, nix C.
Diese PWM bietet neben diesen grundlegenden Eigenschaften auch noch mehr
Goodies, insbesondere das "+1-Feature" (maximaler Wert=Dauerlicht) und
höhere virtuelle PWM-Raten für höhere Lichtintensitäten.
Blöd ist bloß, das ich die Funktionsbeschreibung für den in der
ursprünglichen Anwendung (wegen der Fütterung über PC-gespeiste UART)
verwendeten Takt von 7.3728 MHz verfasst habe und zu faul bin, das auf
den allgemeinen Fall umzuschreiben. Diese Leistung bliebe also dem
Nachnutzer überlassen...
Hallo zusammen,
vielen Dank für eure Antworten. Leider habe ich es nicht schneller
geschafft zu antworten (Kinder...).
Wolfgang schrieb:> Was hast du denn probiert?
Ich habe versucht an der PWM frequenz zu drehen, an der Schrittweite zu
drehen und den Oszillator zu tauschen. Alles hat zwar Einfluß, aber
nicht im gewünschten Maße.
Veit D. schrieb:> nimm einen 16Bit Timer
Das scheint im Zusammenhang hiermit:
Wolfgang schrieb:> Nach Adam Riese ergibt das einen> Zeitraster von 40µs (T = 1/100Hz / 256).
zum Ziel zu führen.
@Peter und Lötlackl: Eure Implementierungen schaue ich mir noch an, ich
würde nur gern das Problem erstmal so verstehen.
Viele Grüße,
Reinhard
Reinhard schrieb:> ich> würde nur gern das Problem erstmal so verstehen.
256 Stufen einer 8-Bit PWM sind einfach zu wenig, um vor allem im ganz
unteren Bereich ohne sichtbare Stufen zu dimmen. Deswegen schlagen dir
die Leute hier PWMs mit 12 oder 16 Bit vor, weil dort die Stufen
wesentlich feiner sind.
Die Herausforderung besteht darin, diese 12 oder 16 Bit schnell genug zu
takten, damit die LED nicht flimmern und das gleichzeitig auch noch für
mehrere Kanäle zu machen.
Ok, mein Ansatz war, im Artikelbeispiel statt des 8-Bit Counters einen
16-Bit Counter zu nehmen...
Klang "einfach" und zielführend.
Der Rest des "Programms" sollte ja mehr oder weniger unangetastet
bleiben können.
Liege ich falsch?
Reinhard schrieb:> Ok, mein Ansatz war, im Artikelbeispiel statt des 8-Bit Counters einen> 16-Bit Counter zu nehmen...>> Klang "einfach" und zielführend.
Klar, wenn man nur einen oder zwei Kanäle braucht, ist es natürlich am
einfachsten, die Timerhardware zu benutzen.