mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Arduino Mega 11 PWM-Pins mit 1kHz


Autor: Mira R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend zusammen,

Nach erfolglosen Recherchen, Versuchen etc, bin ich jetzt soweit, dass 
ich Hilfe brauche.

Ich habe hier einen Arduino Mega und würde gerne 11 PWM- Pins mit einer 
Frequenz von etwa 1kHz betreiben.

Habe einiges gelesen und versucht. Unter anderem via Prescaler und 
zuletzt mit der (wahrscheinlich allseits bekannten?) library aus dem 
Arduinoforum.

So wie ich das momentan sehe, ist das ein hoffnungsloser Fall?

Oder gibts eine Chance die jeweiligen Timer entsprechend anzupassen?

Gruß
Mikra

Autor: google (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Mira R. (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Nutze die Arduino Entwicklungsumgebung...
Das muss in diesem Fall leider auch so bleiben...

Hoffte auf eine Info, wie ich die Timer doch noch auf 1kHz schieben 
könnte....

Autor: Oliver S. (oliverso)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mira R. schrieb:
> Hoffte auf eine Info, wie ich die Timer doch noch auf 1kHz schieben
> könnte....

???

Der Controller hat keine 11 Hardware-PWM- Kanäle. Also musst du die per 
Software realisieren. Ob Arduino oder nicht, ist dabei egal. Wie das 
geht, steht im Link im Beitrag oben.

Was also ist jetzt die Frage?

Oliver

Autor: Mira R. (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Verstehe nicht, wie ich das in der Arduino IDE umsetzen kann.....

Autor: Mira R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oliver S. schrieb:
> Mira R. schrieb:
>> Hoffte auf eine Info, wie ich die Timer doch noch auf 1kHz schieben
>> könnte....
>
> ???
>
> Der Controller hat keine 11 Hardware-PWM- Kanäle. Also musst du die per
> Software realisieren. Ob Arduino oder nicht, ist dabei egal. Wie das
> geht, steht im Link im Beitrag oben.
>
> Was also ist jetzt die Frage?
>
> Oliver

Der hat doch sogar mehr als 11 PWM-Kanäle?

Autor: Matthias S. (Firma: matzetronics) (mschoeldgen)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Oliver S. schrieb:
> Der Controller hat keine 11 Hardware-PWM- Kanäle.

Stimmt nicht. Der Mega 2560 hat 14.
Du könntest bspw. Timer 1,3,4 und 5 in den Fast PWM Modus bringen mit 
ICRn als TOP Wert, wenn du genau 1kHz erzeugen musst (Modus 14 in der 
Tabelle 17-2 des Datenblattes)
Wenn du es nicht so genau brauchst, geht auch Fast PWM 10bit mit /8 
Vorteiler, dann kommen knapp unter 2kHz raus (Modus 3).

: Bearbeitet durch User
Autor: Mira R. (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Matthias S. schrieb:
> Oliver S. schrieb:
>> Der Controller hat keine 11 Hardware-PWM- Kanäle.
>
> Stimmt nicht. Der Mega 2560 hat 14.
> Du könntest bspw. Timer 1,3,4 und 5 in den Fast PWM Modus bringen mit
> ICRn als TOP Wert, wenn du genau 1kHz erzeugen musst (Modus 14 in der
> Tabelle 17-2 des Datenblattes)
> Wenn du es nicht so genau brauchst, geht auch Fast PWM 10bit mit /8
> Vorteiler, dann kommen knapp unter 2kHz raus (Modus 3).

Genau daran scheitere ich seit 2 Tagen...
CTC-Mode, phase correct mode usw und sofort...

Aus dem Datenblatt werde ich auch nicht wirklich schlauer...
Ich versuchs morgen nochmal -_-

Autor: Matthias S. (Firma: matzetronics) (mschoeldgen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mira R. schrieb:
> CTC-Mode,

Den kannst du hier nicht gebrauchen. Wie ich schrieb, ist vermutlich 
Modus 14 oder Modus 3 das richtige - nur mal als Tipp. Fang mit einem 
Timer an und benutze dessen 3 PWM Kanäle. Denke dran, das diese Pins 
(OCnA, OCnB und OCnC) auch explizit als Ausgang definiert werden müssen, 
sonst passiert da gar nichts.

: Bearbeitet durch User
Autor: Falk B. (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Mira R. (mikra-controller)


>Ich habe hier einen Arduino Mega und würde gerne 11 PWM- Pins mit einer
>Frequenz von etwa 1kHz betreiben.

Warum reichen dir die 490 Hz vom Arduino nicht?

>Genau daran scheitere ich seit 2 Tagen...
>CTC-Mode, phase correct mode usw und sofort...

Schon mal der richtige Ansatz.

>Aus dem Datenblatt werde ich auch nicht wirklich schlauer...
>Ich versuchs morgen nochmal -_-

Im einfachsten Fall muss man nur alle Pin mit der Arduino-Lib richtig 
konfigurieren und dann den Prescaler umschalten.

Autor: Falk B. (falk)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Siehe Anhang. Die 2 Pins am Timer 2 sind 8 Bit Timer, da klappt das 
nicht so einfach.

Autor: Mira R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk B. schrieb:
> Siehe Anhang. Die 2 Pins am Timer 2 sind 8 Bit Timer, da klappt das
> nicht so einfach.

Super... Das hilft... Danke!!!!
Habs gerade mal am PIN 8 mit dem Oszi kontrolliert, um da etwas 
durchzusteigen, wenn ich mit den Werten rumspiele..
Dann versuche ich morgen mal die prescaler zu ändern und den inverting 
mode...

Autor: Mira R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen!

Also... Langsam verstehe ich, wie man die Timer bzw. Register in den 
erwünschten Modus bringt...
Ich habe hier mal beim Timer 4 den "inverting modus" rausgeschmissen:

  TCCR4A = (1<<COM1A1) | (1<<COM1B1) | (1<<COM1C1) | (1<<WGM11);


  TCCR4B = (1<<WGM13) | (1<<CS11);


Allerdings ist mir noch nicht klar, was für eine Auswirkung der 
Prescaler hat.

Oben ist der Prescaler 8 gewählt. Wenn ich den jetzt auf 256 setze, was 
passiert dann?
Nach Überprüfung mit dem Oszi kann ich mit dem gesetzten Prescaler, 
Werte von 0 bis 1000 setzen.
Außerdem... Müsste das für den Timer 4 nicht eigentlich CS41 sein?

Autor: Falk B. (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Mira R. (mikra-controller)

>Ich habe hier mal beim Timer 4 den "inverting modus" rausgeschmissen:

>  TCCR4A = (1<<COM1A1) | (1<<COM1B1) | (1<<COM1C1) | (1<<WGM11);

Kann man machen.

>  TCCR4B = (1<<WGM13) | (1<<CS11);


>Allerdings ist mir noch nicht klar, was für eine Auswirkung der
>Prescaler hat.

Er teilten den Takt für die Timer. Damit laufen sie langsamer.

>Oben ist der Prescaler 8 gewählt. Wenn ich den jetzt auf 256 setze, was
>passiert dann?

Ja was wohl?

>Nach Überprüfung mit dem Oszi kann ich mit dem gesetzten Prescaler,
>Werte von 0 bis 1000 setzen.

Und wie sieht die Frequenz vorher und nachher aus?

>Außerdem... Müsste das für den Timer 4 nicht eigentlich CS41 sein?

Ja, aber da das nur #define Namen sind, geht es auch so. CS11 und CS41 
sind identische #defines, auch wenn die echten Bits in verschiedenen 
Register sitzen.

Autor: Mira R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk B. schrieb:
>>Nach Überprüfung mit dem Oszi kann ich mit dem gesetzten Prescaler,
>>Werte von 0 bis 1000 setzen.
>
> Und wie sieht die Frequenz vorher und nachher aus?

Die Frequenz bleibt gleich....

Edit:
Verstehe ich das richtig?

Top Wert mit ICRn=1000

Demnach ist die PWMFrequency im phase correct pwm:

fpwm=16*10^6/(2*8*1000)=1000


Ein Ändern des Prescalers würde demnach die Frequenz ändern...

Autor: Matthias S. (Firma: matzetronics) (mschoeldgen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mira R. schrieb:
> Ein Ändern des Prescalers würde demnach die Frequenz ändern...

Das würde es. Wir der Name sagt, ist das ein Vorteiler, der die 
Systemclock um einen Faktor teilt, bevor es auf die Zählerkette geht.

Eine PWM Frequenz ergibt sich also aus Sysclk/Prescaler/TOP, wobei TOP 
der Wert ist, bei dem der Timer von vorne beginnt.
Wenn dein Arduino mit 16Mhz getaktet wird und TOP auf 1000 steht, wird 
ein Precaler von 8 eine PWM Widerholfrequenz von 2000Hz ergeben. Ein TOP 
von 2000 erzeugt dann genau 1000Hz.
Wohlgemerkt ist das die Wiederholfrequnez und hat noch nichts mit den 
Pulsbreiten zu tun. Diese werden mit OCnX erzeugt, die mit 0 < OCR < TOP 
gesetzt werden.

: Bearbeitet durch User
Autor: Falk B. (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Matthias Sch. (Firma: Matzetronics) (mschoeldgen)

>Wenn dein Arduino mit 16Mhz getaktet wird und TOP auf 1000 steht, wird
>ein Precaler von 8 eine PWM Widerholfrequenz von 2000Hz ergeben.

Du hast den Phase correct PWM Mode vergessen, da kommt nochmal ein 
Teiler von 2 mit rein. Also 1 kHz.

> Ein TOP
>von 2000 erzeugt dann genau 1000Hz.

Nö.

Autor: Falk B. (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Mira R. (mikra-controller)

>Top Wert mit ICRn=1000

>Demnach ist die PWMFrequency im phase correct pwm:

>fpwm=16*10^6/(2*8*1000)=1000

Stimmt.

>Ein Ändern des Prescalers würde demnach die Frequenz ändern...

Logisch, Nomen est Omen!

Autor: Paul B. (paul_baumann)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk B. schrieb:
> Logisch, Nomen est Omen!

Richtig -aus einem Brunner sprudeln die Antworten ja auch nur so 
heraus.
;-)
(Entschuldigung -Ich konnte nicht anders)

MfG Paul

Autor: Falk B. (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Paul Baumann (paul_baumann)

>> Logisch, Nomen est Omen!

>Richtig -aus einem Brunner sprudeln die Antworten ja auch nur so
>heraus.

Die Quelle der Erkenntnis!

>;-)
>(Entschuldigung -Ich konnte nicht anders)

Alles gut ;-)
Bin doch keine Mimose.

Autor: Matthias S. (Firma: matzetronics) (mschoeldgen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk B. schrieb:
> Du hast den Phase correct PWM Mode vergessen, da kommt nochmal ein
> Teiler von 2 mit rein. Also 1 kHz.

So isses, das gilt nur für Fast PWM. Bei Mode 8 und Mode 10, die beide 
ICRn als TOP benutzen, ists dann halb so schnell.

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.