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


von Mira R. (Gast)


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

von google (Gast)


Lesenswert?


von Mira R. (Gast)


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

von Oliver S. (oliverso)


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

von Mira R. (Gast)


Lesenswert?

Verstehe nicht, wie ich das in der Arduino IDE umsetzen kann.....

von Mira R. (Gast)


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?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


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
von Mira R. (Gast)


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 -_-

von Matthias S. (Firma: matzetronics) (mschoeldgen)


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
von Falk B. (falk)


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.

von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

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

von Mira R. (Gast)


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

von Mira R. (Gast)


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?

von Falk B. (falk)


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.

von Mira R. (Gast)


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

von Matthias S. (Firma: matzetronics) (mschoeldgen)


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
von Falk B. (falk)


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

von Falk B. (falk)


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!

von Paul B. (paul_baumann)


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

von Falk B. (falk)


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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


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.

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
Noch kein Account? Hier anmelden.