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!
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.