www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATTiny48 - Die Sache mit der PWM Frequenz


Autor: Rubelus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?!

Autor: Rubelus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, überschrift falsch! Ist natürlich ein Tiny45 nicht 48!

Autor: Ansgar K. (paulderbademeister)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Pom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Rubelus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:

Autor: Rubelus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.:


    TCCR0A = (1<<WGM00) | (1<<WGM01) | (1<<COM0B1);    //Fast PWM; Pin1
    TCCR0B = (1<<WGM02) | (1<<CS02);                   //Vorteiler 256
    OCR0A = 213;                                       //TOP auf 213
    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.

Autor: Ansgar K. (paulderbademeister)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Rubelus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.