mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Philosophiestunde 8-Bit PWM


Autor: Paul H. (powl)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zitat aus beliebigem AVR-Datenblatt:
"The extreme values for the OCR0A Register represents special cases when generating a PWM
waveform output in the fast PWM mode. If the OCR0A is set equal to BOTTOM, the output will
be a narrow spike for each MAX+1 timer clock cycle. Setting the OCR0A equal to MAX will result
in a constantly high or low output (depending on the polarity of the output set by the COM0A1:0
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).

Autor: Paul H. (powl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schonmal was von Software-PWM gehört?

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Paul H. (powl)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: ohno (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
weil 0 bis 255 bei 8 bit

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: der Bastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ja mann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Paul H. (powl)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bernhard M. (boregard)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Paul H. (powl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So kann man das natürlich auch sehen ;-)

Autor: Matthias Lipinsky (lippy)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Heiko_S (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!!

Autor: Sven Stefan (stepp64) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Oder irre ich mich da?

Nein.

Autor: Heiko_S (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zustand 1: gesonderter Zustand Lampe=aus
Zustand 2 - 255 linearer Bereich!
Zustand 256: gesonderter Zustand Lampe=an

Alles Andere ist wieder Philosophie!

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Paul H. (powl)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Paul H. (powl)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht 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!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.