Arduino Pro Micro (ATmega32U4) - freier Timer für 2x PWM?

Gast #6325521
Lesenswert?

Ich suche Informationen zu freien Timern mit zwei PWM-Ausgängen am Pro 
Micro (Klon).
analogWrite() macht nicht mal 1 kHz und ich brauche Ultraschall (nicht 
hörbar) für eine Motorsteuerung.

analogWrite() in wiring_analog.c
init() in wiring.c

Irgendwie widersprüchlich:

OC4A an PC7 -> "D13" not used
OC4B an PB6 -> "D10" (PWM mode nicht initialisiert)
OC4D an PD7 -> "D6"

Kennt sich hier jemand damit besser aus?
Gast #6325575
Lesenswert?

Peter D. schrieb:
> Lt. Datenblatt hat der ATmega32U4 14 PWM-Ausgänge.
> Welche davon heraus geführt sind, sollte aus dem Schaltplan hervorgehen.

Ja, das ist schon klar, allerdings nutzt das "Arduino" framework selbst 
Timer und konfiguriert sie teilweise für PWM. Das ist nicht besonders 
gut dokumentiert; es bleibt nur das Durchsuchen der Quelltexte.
Gast #6325589
Lesenswert?

Karius schrieb:
> Ja, das ist schon klar, allerdings nutzt das "Arduino" framework selbst
> Timer und konfiguriert sie teilweise für PWM. Das ist nicht besonders
> gut dokumentiert; es bleibt nur das Durchsuchen der Quelltexte.

Ohne zu wissen, welche timerbasierenden Teile des Arduino Frameworks du 
nutzt, ist es schwierig, dir zielgerichtet zu helfen. Den Timer hinter 
millis() sollte man meist in Ruhe lassen.
Beitrag #6325906 wurde von einem Moderator gelöscht.
#6325960
Lesenswert?

c-hater schrieb:
> Karius schrieb:
>
>> Ja, das ist schon klar, allerdings nutzt das "Arduino" framework selbst
>> Timer und konfiguriert sie teilweise für PWM. Das ist nicht besonders
>> gut dokumentiert; es bleibt nur das Durchsuchen der Quelltexte.
>
> Nö. Man kann auch ganz einfach komplett auf das ganze Arduino-Gedöhns
> verzichten...

Kann man, muss man aber nicht! Ich nutze Gedöns freiwillig
Gast #6326631
Lesenswert?

Wolfgang schrieb:
> Ohne zu wissen, welche timerbasierenden Teile des Arduino Frameworks du
> nutzt, ist es schwierig, dir zielgerichtet zu helfen. Den Timer hinter
> millis() sollte man meist in Ruhe lassen.

Ich formuliere mal um: "Ich kann dir nicht helfen, einen Timer kannst du 
nicht benutzen."
Das hilft tatsächlich nicht weiter.
Hilfreich wäre gewesen: "Timer X,Y,Z" sind nicht frei, aber du kannst U, 
V, W benutzen, guck mal in Zeile i von source.c. Taktfrequenz musst du 
noch einstellen, z.B. sososososo."

c-hater schrieb:
> Nö.

Ach so. Doch!?

Veit D. schrieb:
> Ansonsten  kannst du
> erstmal jeden Timer außer T0 (delay, millis) frei verwenden. Musst ihn
> nur komplett selbst initialisieren und nicht nur halb.

Danke!
Man muss sich durch wiring_analog.c und wiring.c durcharbeiten und die 
halbe Initialisierung ggf. ergänzen.
Für Timer 1 reicht eine Änderung des Prescalers, der standardmäßig auf 
64 gesetzt wird. Die Timer werden unterschiedlich initialisiert, teils 
mit phase-correct PWM, teils ohne.
Schade, dass das offenbar nicht übersichtlich dokumentiert ist.

Viel wichtiger als diese bescheuerten Rangeleien im Forum: immer schön 
Zähne putzen.
Gast #6326684
Lesenswert?

Karius schrieb:
> Hilfreich wäre gewesen: "Timer X,Y,Z" sind nicht frei, aber du kannst U,
> V, W benutzen, guck mal in Zeile i von source.c. Taktfrequenz musst du
> noch einstellen, z.B. sososososo."

Welche Timer frei sind, hängt von den benutzten Arduino Funktionen ab.
Timer0 wird für den 1ms-Takt verwendet, Timer1 z.B. für Servo-Steuerung.

Hier ein paar Dinge zu Timern mit und auf Arduino mit ATmega168/328, die 
sinngemäß auch für den ATmega32U4 gelten.
https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM

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