Forum: Mikrocontroller und Digitale Elektronik Philosophiestunde 8-Bit PWM


von Paul H. (powl)


Lesenswert?

Hi,

ich habe hier ein eher philosophisches Problem, bzw was heißt Problem, 
eher Gedankengang. Was Bedeutet 8-bit PWM? 256 Helligkeitsabstufungen? 
Das geht wohl nicht. 255 Geht da schon eher.

Ein normaler Timer habe 8-Bit, kann also Werte von 0-255 abzählen, 
danach läuft er über und fängt wieder bei 0 an.

Bei einer normalen PWM sieht das ja nun so aus, dass man bei 0 
anschaltet und irgendwann bei 1-255 wieder ab. Steht der PWM-Wert auf 0 
bedeutet das, dass der Pin garnicht erst aktiviert wird, die Lampe ist 
aus. Steht er auf 1 bedeutet das, dass die Lampe nur für einen 
Timer-Takt an ist. Steht er auf 255 bedeutet das jedoch nicht, dass die 
Lampe vollständig an ist, sondern dass sie eben im 255 Takt 
ausgeschaltet wird. Es vergeht hier erst noch ein Takt bis zum Überlauf 
und erneuten Beginn des Timers bei 0. D.h. um alle Zustände abzudenken 
Aus - Gedimmt - An, bräuchte man eignetlich einen Wertebereich für 
Zahlen von 0 bis 256, also 9 Bit. Alternativ könnte man den Timer im CTC 
Modus auch nur bis 254 lassen so dass er beim nächsten Takt schon seinen 
Überlauf bekommt und wieder bei 0 anfängt. Daraus ergibt sich dann 
allerdings dass es nicht 255 sondern 254 Helligkeitsabstufungen zwischen 
den Zuständen An und Aus gibt.

In der Praxis ist das natürlich völlig wurscht, ist mir nur gerade 
aufgefallen bei meinem dimmbaren Anschlusspanel, das auch für andere 
Verbraucher als Lampen gedacht ist die teilweise auch gerne die ganze 
Zeit über Strom haben, ohne Lücken.

Ich kann mich nun natürlich nicht entscheiden ob ich beim PWM-Wert 255 
einfach auf immer An schalten, ob ich den Timer im CTC Modus nur bis 255 
zählen lassen oder ob ich noch ein zusätzliches boolsches Array anlegen 
soll in dem das 9. Bit für jeden Pin drinsteht.

Wie ist das bei RGB eigentlich? Das sind ja auch nur 3x8 Bit. Sind das 
dann auch Aus - 254 Abstufungen - An oder wird der Zustand An nie ganz 
erreicht?

lg PoWl

von Jan M. (mueschel)


Lesenswert?

Du hast dich verzählt: 0 hieße immer aus, 256 hieße immer an. Das sind 
dann insgesamt 257 Zustände, von denen mit 8bit 256 erreicht werden 
können.

Ansonsten hast du recht.

von (prx) A. K. (prx)


Lesenswert?

Paul Hamacher wrote:

> bräuchte man eignetlich einen Wertebereich von 256
> Zahlen, also 9 Bit.

Fast. Man bräuchte 257 Zahlen also 9 Bit. Denn 0..255 sind schon 256 
Zahlen.

Ist aber sonst korrekt erkannt. Wobei man die fehlende Variante 
problemlos per Software nachbilden kann, denn dauernd aus oder an ist ja 
nicht allzu schwierig.

> Wie ist das bei RGB eigentlich? Das sind ja auch nur 3x8 Bit. Sind das
> dann auch Aus - 254 Abstufungen - An oder wird der Zustand An nie ganz
> erreicht?

RGB sind 3 PWMs. Im obigen Sinn also 257^3 Kombinationen.

Wenn man LEDs ganz aus kriegen will, muss man sie wirklich vollständig 
aus schalten. Schon ein Puls von ein paar µs alle 10ms ist sichtbar.

von Johannes M. (johnny-m)


Lesenswert?

Zitat aus beliebigem AVR-Datenblatt:
1
"The extreme values for the OCR0A Register represents special cases when generating a PWM
2
waveform output in the fast PWM mode. If the OCR0A is set equal to BOTTOM, the output will
3
be a narrow spike for each MAX+1 timer clock cycle. Setting the OCR0A equal to MAX will result
4
in a constantly high or low output (depending on the polarity of the output set by the COM0A1:0
5
bits.)"
Also genau andersrum. 0 geht nicht (weil erst im jeweils folgenden 
Taktzyklus auf die Gleichheit der Werte reagiert wird), während der 
Maximalwert erreicht werden kann. Bei invertierter PWM sieht es genau 
andersherum aus. Da braucht man nicht zu philosophieren, sondern einfach 
nur ins Datenblatt zu schauen (gesetzt den Fall, es geht tatsächlich um 
einen AVR, was ich aber anhand des Verfassers des Originalbeitrages und 
gewisser erwähnter Begriffe einfach mal unterstelle).

von Paul H. (powl)


Lesenswert?

Schonmal was von Software-PWM gehört?

von Johannes M. (johnny-m)


Lesenswert?

Paul Hamacher wrote:
> Schonmal was von Software-PWM gehört?
Habe ich, Du redest aber die ganze Zeit von Timern. Am Prinzip ändert 
das aber nichts.

von Paul H. (powl)


Lesenswert?

Software-PWM benötigt auch Timer ;-) Das Zeug aus dem Datenblatt würde 
bedeuten dass es 255 Abstufungen und AN gibt, aber kein AUS.

In anbetracht der Tatsache dass meine Software-PWM ihr eigenes Verhalten 
hat und nicht von dem der Hardware-PWM abhängt ist philosophieren doch 
weiterhin angesagt ;-)

lg PoWl

von Gast (Gast)


Lesenswert?

>Du hast dich verzählt: 0 hieße immer aus, 256 hieße immer an. Das sind
>dann insgesamt 257 Zustände, von denen mit 8bit 256 erreicht werden
>können.

Hä? Das ist ein Scherz, oder?

von Jan M. (mueschel)


Lesenswert?

>>Du hast dich verzählt: 0 hieße immer aus, 256 hieße immer an. Das sind
>>dann insgesamt 257 Zustände, von denen mit 8bit 256 erreicht werden
>>können.
>
> Hä? Das ist ein Scherz, oder?

Wie kommst du drauf?

von ohno (Gast)


Lesenswert?

weil 0 bis 255 bei 8 bit

von Jan M. (mueschel)


Lesenswert?

Natürlich, ein 8bit Counter zählt nur von 0 bis 255. Das sind insgesamt 
256 mögliche Zustände. Vom Startwert 0 bis zum nächsten Auftreten der 0 
nach dem ersten Überlauf dauert es genau 256 Takte.
Eine PWM, die auf einem 8bit Counter basiert, hat deswegen wie gesagt 
257 mögliche Zustände: 0 Takte an bis 256 Takte lang an. Hat nun der 
PWM-Wert auch nur 8bit (=256 mögliche Zustände), bleibt genau einer der 
257 unerreichbar.

von der Bastian (Gast)


Lesenswert?

Das klassische Gartenzaun-Latten-Zwischenraum-Problem...

Ein Feld mit 3 Latten hat 2 Zwischenräume. Wenn ich jedoch ein weiteres 
Feld anfüge, habe ich 6 Latten und 5 Zwischenräume...

Ähnlich verhält es sich mit der Anzahl der Taktzyklen und 
Counter-Werten.
"Erschwerend" kommt hinzu, dass "0" der erste Zustand ist.
Wie der C-Programmierer, der im Fahrstuhl 14 drückt, um in den 15. Stock 
zu kommen :-P

von Ja mann (Gast)


Lesenswert?

>256 Helligkeitsabstufungen?
>Das geht wohl nicht. 255 Geht da schon eher.

Wieso machst Du eigentlich immer so einen riesen Gehirnfurz ?
8-bit = 0-255, d.h. du hast 256 verschiedene "Schalterstellungen", jede 
erzeugt an anderes Signal (="Helligkeitsabstufung"). Der Rest (255 = 
dauernd an / 0 = "nicht ganz aus" und je nach Polaritätseinstellung 
umgekehrt) wurde schon anhand von Datenblatttzitaten hinreichend 
erklärt.

von Paul H. (powl)


Lesenswert?

Weiß nicht, vielleicht mach ich mir gerne ein paar eigene Gedanken 
anstatt alles blind aus irgendwelchen Datenblättern zu übernehmen, wer 
sagt ausserdem, dass ich das genau so machen muss wie es dort drinsteht? 
Mir war schon bewusst was ich meine als ich beim Betreff 
"Philosophiestunde" schrieb.

Der eine da oben kam mir auch schon mit seinem Datenblatt an. Den 
Zustand "ganz aus" möchte ich in jedem Fall erreichen können. Deshalb 
hat meine PWM jetzt AN - 254 Abstufungen - AUS.

lg PoWl

von Bernhard M. (boregard)


Lesenswert?

Paul Hamacher wrote:
> ich habe hier ein eher philosophisches Problem, bzw was heißt Problem,
> eher Gedankengang. Was Bedeutet 8-bit PWM? 256 Helligkeitsabstufungen?
> Das geht wohl nicht. 255 Geht da schon eher.

um wieder zum philosophischen Ursprung der Diskussion zurückzukommen - 
wieso gehen nur 255 Helligkeitsstufe?n
Das ist doch nur eine Definitionssache, unglücklich definiert kommt man 
dan zu kruden Ansätzen wie:
> hat meine PWM jetzt AN - 254 Abstufungen - AUS.

Warum definiert man nicht einfach AN und AUS auch als Abstufung? Das 
wäre für mich die natürliche Sichtweise.
Dann hat man mit 8 Bit 256 Abstufungen die Stufe 0 als "AUS", die Stufe 
255 als "AN" und alle Stufen dazwischen sind ein Heliigkeitswert der 
weder immer an noch immer aus ist. Das ist vielleicht in der Usetzung 
der PWM etwas komplizierter, aber konzeptionell viel verständlicher.

Gruß,
Bernhard

von Paul H. (powl)


Lesenswert?

So kann man das natürlich auch sehen ;-)

von Matthias L. (Gast)


Angehängte Dateien:

Lesenswert?

>Der eine da oben kam mir auch schon mit seinem Datenblatt an. Den
>Zustand "ganz aus" möchte ich in jedem Fall erreichen können. Deshalb
>hat meine PWM jetzt AN - 254 Abstufungen - AUS.

Trotzdem ist da was dran. Es ist immer ein Zustand nicht erreichbar. 
Entweder ganz aus, oder ganz an.

Siehe Anhang. Das ist ne 3bit PWM.

von Heiko_S (Gast)


Lesenswert?

Das ist eigentlich nur Sache der Definition und Programmierung:
Timer = 0 -> Zustand 1: Timer=aus Lampe=aus
Timer = 1 - 254 -> Zustand 2 - 255: Timer=an Lampe=PWM
Timer = 255 -> Zustand 256: Timer=aus Lampe=an

somit sind es 256 Stufen (Zustände), da man den "aus" und den "ein" 
Zustand mitrechnen muss, dafür aber nicht 9-Bit mit einbeziehen muss!!

von Sven S. (stepp64) Benutzerseite


Lesenswert?

Und genau so würde ich es auch programmieren. Das erschwert die Sache 
zwar ein wenig, da man die Zustände 0 und 255 getrennt behandeln muss, 
aber wenn man darauf Wert legt, dass es sowohl ganz EIN als auch ganz 
AUS geben soll, wird man es wohl so programmieren müssen.

Sven

von Micha (Gast)


Lesenswert?

> Das ist eigentlich nur Sache der Definition und Programmierung:
> Timer = 0 -> Zustand 1: Timer=aus Lampe=aus
> Timer = 1 - 254 -> Zustand 2 - 255: Timer=an Lampe=PWM
> Timer = 255 -> Zustand 256: Timer=aus Lampe=an
>
> somit sind es 256 Stufen (Zustände), da man den "aus" und den "ein"
> Zustand mitrechnen muss, dafür aber nicht 9-Bit mit einbeziehen muss!!

Dadurch ist das Ganze aber nicht mehr komplett linear, sondern nur 
zwischen Zustand 1 und 254. Oder irre ich mich da?

von Matthias L. (Gast)


Lesenswert?

>Oder irre ich mich da?

Nein.

von Heiko_S (Gast)


Lesenswert?

Zustand 1: gesonderter Zustand Lampe=aus
Zustand 2 - 255 linearer Bereich!
Zustand 256: gesonderter Zustand Lampe=an

Alles Andere ist wieder Philosophie!

von Jan M. (mueschel)


Lesenswert?

Die einfachste Lösung für eine PWM, mit der man sowohl aus als auch an 
erreichen will, ist ein Counter, der 254 als höchsten Wert hat. Dann 
braucht man für keinen Zustand eine eigene Behandlung schreiben, es 
braucht nur einige wenige zusätzliche Taktzyklen um den Zählerwert zu 
überprüfen und ihn rechtzeitig zurückzusetzen.

von Paul H. (powl)


Lesenswert?

Hm doch, wieso sollte das nicht linear sein?

Nicht linear wäre es doch nur, wenn man eine normale 8-Bit PWM 
realisiert, also PWM 0: Ganz Aus; PWM 1-255: pwm-Abstufungen, wobei 
"Ganz An" theoretisch nie erreicht wird, und man bei PWM 255 einfach auf 
"Ganz An" schaltet. Dann wäre da eine Lücke.

Ansonsten ist der Verlauf linear wenn man Zustände von 0 bis 256 
betrachtet und dabei Ganz Aus (0) und Ganz An (256) mit einbezieht. Man 
kann nun den Timer auch nur bis 254 zählen lassen und hat somit 
insgesamt nur Zustände von 0 bis 255, was dann wieder in einen 8-Bit 
Wert passt.

von Jan M. (mueschel)


Lesenswert?

"Linear" ist es schon, nur irgendwo ist eine doppelt so grosse Stufe.

Es sind nun mal bei einem Zaehler der modulo 256 zaehlt auch 256 
Schritte und damit 257 moegliche Einschaltdauern von 0 bis 256.

Und bei Heikos Vorschlag muss irgendwo ein Schritt uebersprungen werden.

von Paul H. (powl)


Lesenswert?

Wenn ich AUS - 254 Zwischenstufen - AN habe, dann sind das 256 mögliche 
Zustände (von 0 bis 255 => 8 Bit). Wenn nun auch der Timer nur bis 254 
Zählt und beim nächsten Wert wieder bei 0 landet, dann schauts so aus:

Angenommen die PWM steht auf dem Wert 0:

Timer 0: Nix passiert
-- Überlauf --
Timer 0: Immernoch nix
..usw..

Angenommen unsere PWM steht auf dem Wert 254:

Timer 0: Pin an
Timer 254: Pin aus
-- Überlauf --
Timer 0: Pin an.
..usw..

D.h. der Pin ist von Anfang Takt 0 bis Anfang Takt 254 angeschaltet. Ab 
da ist der Pin dann für die Dauer des Taktes 254 aus, dann folgt der 
Überlauf und es beginnt von neuem, dass er bei 0 wieder angeschaltet 
wird.

Angenommen die PWM steht auf dem Wert 255:

Timer 0: Pin an
Timer 254: Garnix
-- Überlauf --
Timer 0: Pin ist immernoch an
..usw..

Folglich haben wir hier den Zustand "immer An" weil der Timer den Wert 
255 nie erreicht.

D.h. wir haben keine Lücke und somit einen linearen Verlauf, da wird nix 
übersprungen.

lg PoWl

von Matthias L. (Gast)


Lesenswert?

>Wenn ich AUS - 254 Zwischenstufen - AN habe, dann sind das 256 mögliche
>Zustände (von 0 bis 255 => 8 Bit). Wenn nun auch der Timer nur bis 254
>Zählt und beim nächsten Wert wieder bei 0 landet, dann schauts so aus

Dann ist das linear. Aber hier zählt er nur bis 254 und nicht bis 255!

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.