Soft-PWM - minimale Einschaltzeit zu lang

Gast #6096291
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
Gast #6096315
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).
Gast #6096446
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.
#6096458
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.
Gast #6097048
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...
Gast #6097491
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
(Firma: matzetronics) #6097537
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.
Gast #6097594
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?

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