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.
Gast #6325839
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.

Nö. Man kann auch ganz einfach komplett auf das ganze Arduino-Gedöhns 
verzichten...
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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.