Hallo,
ich bin dabei verschiedene PWM signale über einen atmega324pa laufen
lassen zu wollen. nun bin ich dabei das thema timer + pwm nochmal
aufzurollen, da ich da schon eine ziemlich lange zeit raus bin. im
ersten moment dacht ich gut einfach, aber irgendwie hab ich grad ein
verständnisproblem und hoffe ihr könnt mir helfen
ich möchte über timer2 (16bit) den fast-pwm mode für LEDs verwenden.
laut datenblatt ist die formel f_PWM = f_CLK / ( N * 256 )
diesen wert initialisiere ich nun in das OCR2A register, is das richtig?
um nun die pulsbreite (duty) einzustellen muss das OCR2A register
angepasst werden (je nach einstellung)
was ich dabei nicht verstehe, wenn ich dieses register für die
pulsbreite anpasse, passe ich ja automatisch auch die frequenz an oder
seh ich das falsch? ich hab gerade "ein brett vorm kopf", wie ich
beispielsweise eine feste frequenz beibehalte aber den duty (also
verhältnis der längen von HIGH und LOW) verändern kann.
danke und grüße vom verwirrten
tester schrieb:> ich möchte über timer2 (16bit)
Nope. Timer 2 ist ein 8 Bit Timer
> den fast-pwm mode für LEDs verwenden.> laut datenblatt ist die formel f_PWM = f_CLK / ( N * 256 )
jaein.
> diesen wert initialisiere ich nun in das OCR2A register, is das richtig?
welchen?
den f_PWM, den du da errechnet hast?
Das kann man so nicht direkt sagen. Denn die PWM Frequenz ist meistens
eigentlich recht uninteressant, solange sie nur hoch genug ist. Bei
einer PWM ist man viel mehr am duty-Cylce interessiert. Der ist viel
wichtiger.
Beim Timer 2 gibt es ja 2 Fast-PWM Modi. Siehe die Tabelle 15.8 auf
Seite 156 des Datenblatts.
http://www.atmel.com/images/doc7674.pdf
Im Modus 3, kannst du sowohl mit dem A Kanal, als auch mit dem B-Kanal
jeweils eine eigenständige PWM erzeugen.
Je nachdem, welchen Kanal du willst, sind dann die COM Bits, bzw. der
entsprechende OCR Pin, bzw. das entsprechende OCR2x Register zuständig.
Im Modus 7 übernimmt das OCR0A Register die Aufgabe, den Top Wert für
die PWM festzulegen und steht daher nicht mehr als PWM-generiende
Einheit zur Verfügung. Da geht die Verstellung des DUty-Cycles dann nur
noch mittels OCR0B
> was ich dabei nicht verstehe, wenn ich dieses register für die> pulsbreite anpasse, passe ich ja automatisch auch die frequenz an oder> seh ich das falsch?
Das kommt jetzt wieder auf den Modus an.
Im Modus 3 zählt der Timer immer von 0 bis 0xFF. Und damit ist die PWM
Frequenz auch fix und nur vom eingestellten Vorteiler N des Timers
abhängig.
Im Modus 7, bei dem das OCR0A Register eine andere Funktion übernimmt
(siehe die TOP Spalte in der genannten Tabelle) variiert die
PWM-Frequenz daher mit einer Änderung von OCR0A
die korrekte Formel für die PWM-Frequenz bei Fast-PWM ist ja eigentlich
1
f_PWM = f_CLK / ( N * TOP )
N ist der Vorteiler des Timers. TOP ist der Wert, der in der Spalte TOP
in besagter Tabelle in der jeweils benutzen Modus-Zeile für eine der
beiden Möglichkeiten der Fast-PWM steht.
Alle Einstellungen nimmst du in den TCCR2X Registern vor.
Das OCR Register ist der Vergleichswert, bei dem die PWM etwas tut.
In deinem die Pulsbreite.
um weitere missverständnisse zu vermeiden, ich verwende den atmega324PA
http://www.atmel.com/Images/doc8152.pdf
der ist doch um etwas anders als der den du gepostet hast karl heinz,
ich war jetzt etwas verwirrt von deinen angaben
Karl Heinz schrieb:> tester schrieb:>>> ich möchte über timer2 (16bit)>> Nope. Timer 2 ist ein 8 Bit Timer>
jipp richtig, ich hantiere gerade sowohl mit timer1 als auch timer2 und
bin durch einander gekommen...
>> den fast-pwm mode für LEDs verwenden.>> laut datenblatt ist die formel f_PWM = f_CLK / ( N * 256 )>> jaein.>>> diesen wert initialisiere ich nun in das OCR2A register, is das richtig?>> welchen?> den f_PWM, den du da errechnet hast?>> Das kann man so nicht direkt sagen. Denn die PWM Frequenz ist meistens> eigentlich recht uninteressant, solange sie nur hoch genug ist. Bei> einer PWM ist man viel mehr am duty-Cylce interessiert. Der ist viel> wichtiger.
ich möchte eine pwm mit vorgegebener frequenz erzeugen.. in den
tutorials wurde für LEDs zum beispiel rund 1-9kHz als optimale frequenz
angegeben.
>> Beim Timer 2 gibt es ja 2 Fast-PWM Modi. Siehe die Tabelle 15.8 auf> Seite 156 des Datenblatts.> http://www.atmel.com/images/doc7674.pdf>> Im Modus 3, kannst du sowohl mit dem A Kanal, als auch mit dem B-Kanal> jeweils eine eigenständige PWM erzeugen.> Je nachdem, welchen Kanal du willst, sind dann die COM Bits, bzw. der> entsprechende OCR Pin, bzw. das entsprechende OCR2x Register zuständig.
hier steig ich genau ein. ich möchte zwei kanäle unabhängig von einander
arbeiten lassen. das heißt, wenn ich auf einen timer zwei verschiedene
kanäle benutzen möchte, kommte ich gar nicht um den CTC modus rum?!
woran siehst du das bei modus 3 zwei verschiedene kanäle ansteuerbar
sind? bezeichnet durch "immediate"?
>> Im Modus 7 übernimmt das OCR0A Register die Aufgabe, den Top Wert für> die PWM festzulegen und steht daher nicht mehr als PWM-generiende> Einheit zur Verfügung. Da geht die Verstellung des DUty-Cycles dann nur> noch mittels OCR0B>>> was ich dabei nicht verstehe, wenn ich dieses register für die>> pulsbreite anpasse, passe ich ja automatisch auch die frequenz an oder>> seh ich das falsch?>> Das kommt jetzt wieder auf den Modus an.>> Im Modus 3 zählt der Timer immer von 0 bis 0xFF. Und damit ist die PWM> Frequenz auch fix und nur vom eingestellten Vorteiler N des Timers> abhängig.> Im Modus 7, bei dem das OCR0A Register eine andere Funktion übernimmt> (siehe die TOP Spalte in der genannten Tabelle) variiert die> PWM-Frequenz daher mit einer Änderung von OCR0A
irgendwie bin ich nun fast noc hverwirrter :-)
tester schrieb:> ich möchte eine pwm mit vorgegebener frequenz erzeugen.. in den> tutorials wurde für LEDs zum beispiel rund 1-9kHz als optimale frequenz> angegeben.
Ich weiss jetzt nicht, welches Tutorial du konkret meinst. Aber das ist
sicherlich so zu verstehen, dass alles im Bereich 1 bis 9kHz akzeptabel
ist. Und wenn du ein wenig ausserhalb dieses Bereichs (der ja recht groß
ist) liegst, dann ist das auch noch kein Beinbruch.
Daraus folgt, dass es nicht wirklich wichtig ist genau 4.567 kHZ zu
erzeugen, sondern wenn du mit dem Timer-Vorteiler in diesen Bereich
hineinkommst, dann passt das schon.
> hier steig ich genau ein. ich möchte zwei kanäle unabhängig von einander> arbeiten lassen.
Dann geht das nur dann mit dem Timer 2, wenn du den Modus 3 nimmst. In
diesem Modus ist die PWM-Frequenz einzig und alleine durch den Vorteiler
bestimmt.
> das heißt, wenn ich auf einen timer zwei verschiedene> kanäle benutzen möchte, kommte ich gar nicht um den CTC modus rum?!> woran siehst du das bei modus 3 zwei verschiedene kanäle ansteuerbar> sind?
Daran, dass ich weiß, dass der Timer grundsätzlich 2 PWM Einheiten hat,
und das OCR2x Register in der Tabelle bei diesem Modus nicht als TOP
Wert aufscheint.
Sei nicht päpstlicher als der Papst. Wenn du einen Frequenzspielraum von
1 bis 9 Khz hast, wird sich ein Vorteiler finden, mit dem du in dieses
Zielgebiet so einigermassen reinkommst. Das Bestehen auf genau einer
ganz bestimmten Frequenz ist hier kontraproduktiv, weil deine
Hardwareausstattung das eben für 2 Kanäle nicht hergibt.
Bei der Ansteuerung von LEDs ist das sowieso kein Problem. Da wären für
mich alles über 200Hz bereits akzeptabel, auch wenn immer wieder
Einzelne davon berichten, dass sie unter bestimmten Umständen das 200Hz
Flimmern noch wahrnehmen können.
Karl Heinz schrieb:> tester schrieb:>>> Ich weiss jetzt nicht, welches Tutorial du konkret meinst. Aber das ist> sicherlich so zu verstehen, dass alles im Bereich 1 bis 9kHz akzeptabel> ist. Und wenn du ein wenig ausserhalb dieses Bereichs (der ja recht groß> ist) liegst, dann ist das auch noch kein Beinbruch.> Daraus folgt, dass es nicht wirklich wichtig ist genau 4.567 kHZ zu> erzeugen, sondern wenn du mit dem Timer-Vorteiler in diesen Bereich> hineinkommst, dann passt das schon.
mir ging es auch darum eine frequenz zu erzeugen die kein vielfaches von
50-60hz ist, hatte mal irgendwas gelesen zwecks flimmereffekte oder was
auch immer. hatte es einfach als anreiz bzw. problemstellung genommen
das zu bewerkstelligen
aber mit dem prescaler kann ich leben, dann passt das ja
> Dann geht das nur dann mit dem Timer 2, wenn du den Modus 3 nimmst. In> diesem Modus ist die PWM-Frequenz einzig und alleine durch den Vorteiler> bestimmt.
ist das jetzt auch auf meinen controller bezogen? timer1 ist 16 bit und
timer2 8 bit... nur der 16bit timer kann mehrere kanäle oder woran wird
das festgelegt? die tabellen in denen der Mode beschrieben steht ähneln
sich ja ziemlich
> Daran, dass ich weiß, dass der Timer grundsätzlich 2 PWM Einheiten hat,> und das OCR2x Register in der Tabelle bei diesem Modus nicht als TOP> Wert aufscheint.>> Sei nicht päpstlicher als der Papst. Wenn du einen Frequenzspielraum von> 1 bis 9 Khz hast, wird sich ein Vorteiler finden, mit dem du in dieses> Zielgebiet so einigermassen reinkommst. Das Bestehen auf genau einer> ganz bestimmten Frequenz ist hier kontraproduktiv.
nein, das war auch gar nicht mein ziel. es ging wenn dann, um eine
unabhängiges beschalten der kanäle. irgendwie fehlt mir da der letzte
aha-effekt
trotzdem danke schon mal für die hilfe!
tester schrieb:>> Dann geht das nur dann mit dem Timer 2, wenn du den Modus 3 nimmst. In>> diesem Modus ist die PWM-Frequenz einzig und alleine durch den Vorteiler>> bestimmt.>> ist das jetzt auch auf meinen controller bezogen?
ja
> timer1 ist 16 bit und> timer2 8 bit... nur der 16bit timer kann mehrere kanäle oder woran wird> das festgelegt?
Bei ATmel orentiert man sich an den OCR - Registern.
Wenn es da ein OCR0A und ein OCR0B Register gibt, dann ist es sehr
wahrscheinlich, dass auch beide eine PWM erzeugen können. Weiters gibt
es für jeden Kanal die COM-Bits (auch dort kommt wieder das bzw. B vor),
die ebenfalls für eine Hardware-PWM unabdingbar sind.
Wenn ein Timer nur 1 PWM erzeugen kann, dann gibt es keine A und B
Kanäle. Dann heisst das Register einfach nur OCR2
> die tabellen in denen der Mode beschrieben steht ähneln> sich ja ziemlich
Die Tabellen sind ja nicht alles.
Wenn man einen µC erst mal ein wenig kennt, dann sind die Tabellen der
erste Anlaufpunkt um sich den Modus zu suchen. Aber um erst mal ein
wenig grundlegendes Wissen, was der Timer kann und was er nicht kann,
kommt man nicht herum.
> unabhängiges beschalten der kanäle. irgendwie fehlt mir da der letzte> aha-effekt
So recht ist mir noch nicht klar, was da jetzt noch das Problem sein
könnte. Wie eine PWM grundsätzlich auf einem AVR in Hardware
funktioniert, weißt du?
FAQ: Timer
erwischt, ich bin mit microchips in die ersten fußstapfen getreten und
versuche mich jetzt nach langer zeit mit den atmels :-)
die antwort wieviele kanäle die timer können ist mir gerade selbst beim
pinout aufgefallen. das war jetzt sehr blöd, ich sollte vllt mal eine
pause einlegen, dann funktioniert der kopf auch wieder richtig hehe...
dann sollte meine initialisierung so ziemlich stehen, danke dir!