Forum: Mikrocontroller und Digitale Elektronik Wie viele PWM bei ATmega328p


von Sepp H. (michael_s138)


Lesenswert?

Hallo zusammen,

Ich hab einen Arduino ATmega 328p und möchte damit eine RGB LED 
ansteuern.

Dazu benötige ich 3 PWM die jeweils mit einem Potentiometer verstellt 
werden sollen, um jede Farbe darstellen zu können.

Der ATmega328p hat zwar einige PWM Ausgänge jedoch können nicht alle 
gemeinsam genutzt werden.

Wie viele PWM kann ich gleichzeitig ansteuern?



Hoffe auf schnelle Antwort.

MFG Michael

von Oliver R. (orb)


Lesenswert?

Für LEDs reicht SoftwarePWM und damit könntest Du jeden IO-Pin 
gleichzeitig nutzen

von MWS (Gast)


Lesenswert?

Michael S. schrieb:
> Der ATmega328p hat zwar einige PWM Ausgänge jedoch können nicht alle
> gemeinsam genutzt werden.

Interessant, welche denn? Das Datenblatt beschreibt etwas anderes.

> Wie viele PWM kann ich gleichzeitig ansteuern?

Ausreichend:

> und möchte damit eine RGB LED ansteuern.

von c-hater (Gast)


Lesenswert?

Michael S. schrieb:

> Der ATmega328p hat zwar einige PWM Ausgänge jedoch können nicht alle
> gemeinsam genutzt werden.

Nunja, das kommt allein auf die Randbedingungen an. Im Extremfall können 
wirklich alle gleichzeitig benutzt werden, d.h.: du hast dann insgesamt 
6 PWM-Kanäle, also ausreichend für sogar zwei RGB-LEDs.

Allerdings verringert natürlich jede Timernutzung für einen Zweck die 
Freiheitsgrade, die für die Benutzung der Timer für andere Zwecke zur 
Verfügung stehen.

Es ist einfach eine Frage der Abwägung, was sinnvoller ist. Für die 
Ansteuerung irgendwelcher dümmlichen LEDs wird es aber i.A. sinnvoller 
sein, das in Software abzuhandeln und die wertvollen Timer für die 
wirklich zeitkritischen Aufgaben zu reservieren...

von Ingo L. (corrtexx)


Lesenswert?

Michael S. schrieb:
> Wie viele PWM kann ich gleichzeitig ansteuern?
Alle 6

von Mick (Gast)


Lesenswert?

So, hier noch ein paar Details zu den PWM Pins und deren zugeordneten 
Timer.

Pin 5 und 6: Timer0 (PWM Frequenz: 62500 Hz)
Pin 9 und 10: Timer1 (PWM Frequenz: 31250 Hz)
Pin 11 und 3: Timer2 (PWM Frequenz: 31250 Hz)

Deine Beschaltung sollte, wenn möglich, nur zwei Timer in Anspruch 
nehmen. Am Besten Timer1 und Timer2.

von Ulrich F. (Gast)


Lesenswert?

Mick schrieb:
> Frequenz: 62500 Hz
Entspricht nicht dem Arduino Default.

Mick schrieb:
> Frequenz: 31250
Auch nicht.

Mick schrieb:
> Am Besten Timer1 und Timer2.
Ja!

Die PWMs des Timer0 gehen nicht unbedingt sauber zwischen 0% und 10%
Den Grund kann man in der Arduino PWM Doku nachlesen.
Ebenso, das mit den Frequenzen.

von Mick (Gast)


Lesenswert?

Sorry, hab mich in meiner Tabelle vertan. Die Frequenzen liegen bei etwa 
500 Hz und 1000 Hz.

von Ingo L. (corrtexx)


Lesenswert?

Ulrich F. schrieb:
> Die PWMs des Timer0 gehen nicht unbedingt sauber zwischen 0% und 10%
> Den Grund kann man in der Arduino PWM Doku nachlesen.
Kannst du das mal einem nicht Arduino-Nutzer erklären? Der Controller is 
n Mega328, der hat meines Wissens nach keine Probleme mit 0-10%...

von Ulrich F. (Gast)


Lesenswert?

Ingo L. schrieb:
> Der Controller is n Mega328,
N'türlich!


Bitte lesen:
> Notes and Known Issues
in: https://www.arduino.cc/en/Reference/AnalogWrite

Die tieferen Gründe wirst du dir aus dem Arduino Core selbst raus suchen 
dürfen.

Mir reicht es, das als gegeben hin zu nehmen. Wenn ich Timer0 selber 
brauche, verzichte ich auf das millis() und delay() Gedöns. Dann wird 
auch die PWM sauber laufen (ungetestet). Das Register Gefummel ist aber 
vermutlich nix für den typischen Arduino Fan.

von Ingo L. (corrtexx)


Lesenswert?

Hier stehts doch klar:
The PWM outputs generated on pins 5 and 6 will have higher-than-expected 
duty cycles. This is because of interactions with the millis() and 
delay() functions, which share the same internal timer used to generate 
those PWM outputs. This will be noticed mostly on low duty-cycle 
settings (e.g 0 - 10) and may result in a value of 0 not fully turning 
off the output on pins 5 and 6

Wieder ein Grund dieses Zeuch nicht zu nutzen... Aber für Anfänger als 
Einstieg sicher gut, will das Ding auch nicht schlecht machen ;)

von Ulrich F. (Gast)


Lesenswert?

Ingo L. schrieb:
> Wieder ein Grund dieses Zeuch nicht zu nutzen...

Naja...
Immerhin ist der Effekt dokumentiert.

Und, wie schon gesagt, man kann den Effekt unterbinden, wenn man Timer0 
von seinen anderen Aufgaben befreit.

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.