Hiho, ich tüdel gerade mit einem ATTiny45 herrum, ich möchte eine PWM Frequenz von 150HZ erzeugen. Jedoch ist das Datenblatt sehr wiedersprüchlich, mir scheint es so als kann ich die Frequenz garnicht "fein" ändern. Nur über die Prescaler. Laut Datenblatt wird der Compare mit OCR0A verglichen bevor er wieder nach Bottom geht. Jedoch ändere ich mit OCR0A ja meine DutyCycle? Kann ich eine genaue PWM Frequenz nur mit einem externen Quarz erhalten?!
Sorry, überschrift falsch! Ist natürlich ein Tiny45 nicht 48!
Laut Datenblatt existiert eine PWM-Einstellung, bei der OCR0A als TOP genutzt wird. Da der Timer nur bis TOP zählt und dann wieder auf 0x00 gesetzt wird, kann man somit über OCR0A die Frequenz der PWM wählen. OCR0B kann dann dazu genutzt werden, den Duty Cycle der PWM an seinem Pin zu variieren. Damit hättest du eine PWM mit (fast) beliebiger Frequenz.
Rubelus schrieb: > Hiho, > > > ich tüdel gerade mit einem ATTiny45 herrum, ich möchte eine PWM Frequenz > von 150HZ erzeugen. > > Jedoch ist das Datenblatt sehr wiedersprüchlich, mir scheint es so als > kann ich die Frequenz garnicht "fein" ändern. Nur über die Prescaler. > Laut Datenblatt wird der Compare mit OCR0A verglichen bevor er wieder > nach Bottom geht. > > Jedoch ändere ich mit OCR0A ja meine DutyCycle? > > Kann ich eine genaue PWM Frequenz nur mit einem externen Quarz > erhalten?! Also: Die PWM-Frequenz wird durch den Wert bestimmt, bei dem der Zähler zurückgesetzt wird. Der Zähler muß nicht immer bis 65535 oder 255 laufen, sondern kann je nach Modus bei frei definierbaren Werten zurückgesetzt werden. Mit dem Prescaler, der den Grundtakt des Zählers vorgibt und dem Rücksetzwert kann die Periodendauer meist hinreichend genau und fein aufgelöst eingestellt werden. Innerhalb des durch den Rücksetzwert vorgegebenen Rahmens kann dann mit OCRx das Tastverhältnis eingestellt werden. Natürlich dann im Verhältnis zum Rücksetzwert. Wenn der Zähler also bis 200 läuft und Du 100 in OCRx einstellst, wird 50 % Tastverhältnis daraus. Wenn der Zähler bis 400 läuft und in OCRx weiterhin 100 steht, dann werden es 25 % (oder 75 %) sein. Ein Quarz ist dazu nicht nötig wenn die Genauigkeit des internen Oszillators ausreicht. Gruß, Pom
Ansgar K. schrieb: > Laut Datenblatt existiert eine PWM-Einstellung, bei der OCR0A als TOP > genutzt wird. Da der Timer nur bis TOP zählt und dann wieder auf 0x00 > gesetzt wird, kann man somit über OCR0A die Frequenz der PWM wählen. > > OCR0B kann dann dazu genutzt werden, den Duty Cycle der PWM an seinem > Pin zu variieren. Damit hättest du eine PWM mit (fast) beliebiger > Frequenz. Eben nicht. Mit OCR0A stelle ich nicht die Frequenz ein, sondern den DutyCycle - OCR0B wiederrum wird völlig ignoriert. Laut Datenblatt wird OCR0A bei Setzen von WGMnX auf ein PWM Modus nicht als TOP genutzt sondern als Interruptflag für OCnX der Timer läuft dennoch bis 0xff durch (Siehe dazu Datenblatt Seite 77 / Figure 11-9) dies wiederspricht sich jedoch mit der Tabelle auf Seite 82 / Table 11-5. Laut den Formeln im Datenblatt können nur mit dem Prescaler feste Frequenzen genutzt werden (N steht für den Prescaler): Fast PWM:
Phase Correct PWM:
Sooo.... also nochmal nachprobiert. Wenn ich als Ausgang den COM0B1 nehme, statt den COM0A1 - dann kann ich mit OCR0A den TOP wählen, so wie es im Datenblatt auch steht, und mit OCR0B die Periodendauer. Hier mal mein Code, welcher eine Freq von 150Hz erzeugt.:
1 | TCCR0A = (1<<WGM00) | (1<<WGM01) | (1<<COM0B1); //Fast PWM; Pin1 |
2 | TCCR0B = (1<<WGM02) | (1<<CS02); //Vorteiler 256 |
3 | OCR0A = 213; //TOP auf 213 |
4 | OCR0B = 10; //Duty auf 10 |
Sobald ich aber COM0B1 durch COM0A1 ersetze, streikt er - weder am Oszi noch am Freq Zähler kommt dann was an.
Natürlich, du hast dann nen duty cycle von null prozent für ocra. wenn du es mit einer genauen frequenz haben willst, geht nur noch b als output
Dann verstehe ich aber folgenden Satz nicht: "2 High Frequency PWM Outputs with Separate Output Compare Registers" wenn ich nun zwei PWM Kanäle unterschiedlich von einander ausgeben will, schon gar mit unterschiedlichen compare registern, beeinflusst doch das OCR0B automatisch das OCR0A Register und umgedreht bei dem zweiten PWM Kanal?! Das der PWM "Kanal" des Timer 1 für die Hose ist brauchen wir ja nicht näher zu Erörtern, da ist ja quasi der DutyCycle fest vorgeben - solange man nicht mit dem deadtimer arbeitet.
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.