Forum: Mikrocontroller und Digitale Elektronik Soft-PWM - minimale Einschaltzeit zu lang


von Reinhard (Gast)


Lesenswert?

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
const uint8_t t1[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

von Wolfgang (Gast)


Lesenswert?

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).

von Veit D. (devil-elec)


Lesenswert?

Hallo,

nimm einen 16Bit Timer und rechne mal etwas mit der Frequenz und 
Auflösung hin und her. Dann findest du deine Timereinstellungen.

von Wolfgang (Gast)


Lesenswert?

Die Helligkeit wird durch das Tastverhältnis bestimmt, nicht durch die 
Einschaltzeit.

von Karl (Gast)


Lesenswert?

Wolfgang schrieb:
> Die Helligkeit wird durch das Tastverhältnis bestimmt, nicht durch die
> Einschaltzeit.

Und das Auge nimmt die Helligkeit logarithmisch war.

von c r (Gast)


Lesenswert?

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.

von Wolfgang (Gast)


Lesenswert?

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?

von c r (Gast)


Lesenswert?

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.

von Carl D. (jcw2)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

Ich hab für die SW-PWM 12 Bit genommen:

Beitrag "AVR: Fast-PWM (BAM) 12 Bit für 8 Kanäle"

von Lötlackl *. (pappnase) Benutzerseite


Lesenswert?

Ich verwendete eine 10-Bit-PWM mit 64 Stützstellen und logarithmischer 
Skalierung.
Beitrag "[C] AVR-Lichtorgel per FFT MEGA8 32 644"

: Bearbeitet durch User
von c-hater (Gast)


Lesenswert?

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...

von Reinhard (Gast)


Lesenswert?

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

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

: Bearbeitet durch User
von Reinhard (Gast)


Lesenswert?

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?

von c-hater (Gast)


Lesenswert?

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.

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.