Servus zusammen,
Nach Atmel Datenblatt des ATmega8 auf Seite 111 gibt es eine Formel für
das correct- Phase PWM, bei der im Nenner 510 steht.
ÜBer den bruch steht Fck/io (also input frequenz).
1.
Meine Steuerung hat ein Poti, dieser Analoge Wert wird im AD- Wandler
von 10Bits auf 8 Bits digitalisiert(und konvertiert), und anschließend
wird dieser Wert als Timer2 "phase- correct pwm" zählwert benutzt. Was
wiederrum als PWM signal für meine rote LED dient (funktioniert
übrigens, nur möchte ich den rechnerischen Wert haben, damit ich selber
genauer die Frequenz justieren kann)
Um selbst die Frequenz nachzurechnen, gibt es die Formel auf seite 111.
Wie in "1." gehe ich vor.
Nun ist die Frage, ob ich dann bei der inputFrequenz, also Fck/io über
den Bruchstrich mein CPUtakt durch meinen ADC- Vorteiler einsetzen muss(
wären hiermit 125khz), oder ob ich den reinen takt einsetze.
Sollte ich die 125khz einsetzen, gibt es aber in der Division durch 510
keinen korrekten Wert.
Korrekter Wert ist laut LED- Tutorial auf dieser Seite weniger wie 9khz,
aber mehr wie 1khz.
Was genau ist mein denkfehler? Wie müsste die Rechnung sonst lauten?
Danke schonmal für einen Schlag auf den Hinterkopf ;)
mfg,
tommyProg
Tho Wes schrieb:> Meine Steuerung hat ein Potti,
Es heißt Poti. Mit einem t. Das ist die Abkürzung für "Potentiometer".
Dein ständiges beharren auf "Potti" macht nur eines: es lässt dich
dämlich dastehen.
> Nun ist die Frage, ob ich dann bei der inputFrequenz, also Fck/io über> den Bruchstrich mein CPUtakt durch meinen ADC- Vorteiler einsetzen muss(> wären hiermit 125khz), oder ob ich den reinen takt einsetze.
Was hat der ADC mit dem Timer zu tun?
Richtig. Gar nichts.
Nur weil du in DEINEM Programm die Steuerung der PWM vom ADC ausgehend
betreibst, ist das ja keineswegs immer so. Wenn man den PWM Wert von der
UART aus bekommen würde, würde man dann die Baudrate einsetzen? Wohl
eher kaum.
> Korrekter Wert ist laut LED- Tutorial auf dieser Seite weniger wie 9khz, aber
mehr wie 1khz.
'Korrekt' ist das falsche Wort. Speziell bei einer LED. Wenn du willst,
kannst du die auch mit einer 200Mhz PWM betreiben. Die Frage ist eher:
welchen PWM Takt brauche ich mindestens, damit noch nichts flackert und
ab welchem PWM Takt kann auch der empfindlichste Mensch das Flackern
nicht mehr bei Kopfbewegungen sehen.
> Was hat der ADC mit dem Timer zu tun?> Richtig. Gar nichts.>
Ich denke aber schon, dass das damit was zu tun hat, denn
mein Timer zählt bis zu einen gewissen Wert, und dieser maximale Wert
ist der digital- konvertierte Wert meines Potentiometers.
Habe ich z.b. mein Poti weit links gedreht, so habe ich einen kleineren
ADC- Wert und somit zählt der Timer auch nur bis zu einen kleineren Maß.
Außerdem, wenn ich nach der Formel gehen würde, und dann keinen
Prescaler verwende, hätte ich 1000000/510, was ca. 1.9Khz entspricht.
Die LED dürfte somit sehr hell leuchten.
In diesem Fall leuchtet diese garnicht. Mit einen Timer Prescaler von 8,
sowie einen ADC Prescaler von 8 funktioniert alles einwandfrei, oder
siehst du das anders?
Mfg,
tommyProg
Tho Wes schrieb:>> Was hat der ADC mit dem Timer zu tun?>> Richtig. Gar nichts.>>>> Ich denke aber schon, dass das damit was zu tun hat, denn> mein Timer zählt bis zu einen gewissen Wert, und dieser maximale Wert> ist der digital- konvertierte Wert meines Potentiometers.
Das eine ist ein PWM Modul.
Das andere ist der ADC
vom ADC bekommst du einen Wert und diesen Wert steckst du ins PWM Modul.
Aber das PWM MOdul arbeitet unabhängig vom ADC. Nur weil du den
Steuerwert vom ADC abgreifst, hat die PWM bzw. der Timer noch lange
nichts mit dem ADC zu tun.
Also warum soll in die Berechnung der PWM-Frequenz in irgendeiner Form
eingehen, woher der OCR Steuerwert kommt?
Tho Wes schrieb:> Habe ich z.b. mein Poti weit links gedreht, so habe ich einen kleineren> ADC- Wert und somit zählt der Timer auch nur bis zu einen kleineren Maß.
Nope.
Nochmal zurück.
Du hast das Prinzip einer PWM nicht verstanden.
Tho Wes schrieb:> ... was ca. 1.9Khz entspricht. Die LED dürfte somit sehr hell leuchten.
Aber sowas von nicht verstanden.
(Am Beispiel Fast-PWM)
Der Timer zählt immer gleich schnell. Und er zählt immer bis zum selben
Wert.
Lediglich die Zählerstände, bei denen der Ausgangspin auf 1 gehalten
wird, bzw. diejenigen, bei denen der Ausgangspin auf 0 gehalten wird,
werden verändert.
Hast du eine 3 Bit PWM, dann zählt der Timer immer
alles was der OCR Wert macht, ist das er eine Zuordnung vom Zählerstand
zum Status des Ausgangspins herstellt. WObei Zuordnung eigentlich auch
das falsche Wort ist. Bei Gleichheit wird der Ausgangspin umgeschaltet,
genauso wie beim Erneuten Beginn der Zählers bei 0
Der einzige UNterschied zwischen den beiden OCR Werten besteht darin,
dass der Ausgang in dem einen Fall 3 Takte lang auf 1 ist und 5 Takte
lang auf 0, während er im anderen Fall 5 Takte auf 1 ist und 3 Takte auf
0.
Im Mittel gesehen ist daher der Pin im 2.ten Fall prozentual öfter auf
1, was eine hellere LED ergibt.
Wie schnell der Timer zählt, ist hingegen völlig uninteressant, solange
es nur schnell genug ist, dass dein Auge das ständige ein und
ausschalten nicht mehr wahrnehmen kann und statt dessen eine Helligkeit
interpoliert.
Mit dem ADC hat das ganze überhaupt nichts zu tun. Der ADC liefert
lediglich die Vorgabe der 3 bzw der 5 im OCR Register. Die könnten aber
genausogut auch von der UART kommen, oder per SPI übertragen worden
sein, oder per Netzwerk eingetrudelt sein oder per Taster eingestellt
worden oder .....