Arduino Mega 11 PWM-Pins mit 1kHz

Gast #4407191
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
Gast #4410039
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?
(Firma: matzetronics) #4410074
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).
Gast #4410085
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 -_-
#4410124
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.
Gast #4410288
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...
Gast #4410578
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?
#4410581
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.
Gast #4410610
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...
(Firma: matzetronics) #4411046
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.
#4411123
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ö.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren