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
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.
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.
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).
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.
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
>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?
>>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?
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.
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
>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.
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
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
>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.
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!!
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
> 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?
Zustand 1: gesonderter Zustand Lampe=aus Zustand 2 - 255 linearer Bereich! Zustand 256: gesonderter Zustand Lampe=an Alles Andere ist wieder Philosophie!
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.
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.
"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.
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
>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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.