basti schrieb:
> nd noch eine Frage. Könnte man anstatt zwei Timer zu nutzen, nur mit
> einem Timer zwei unterschiedliche PMW Signale generieren. Also gleiche
> Einstellungen, gleiche Frequenz usw., aber unterschiedliche Tastgrade?
Ja, das kann man. Der Atmega328P hat insgesamt 6 PWM Pins die alle
unabhängige PWM-Tastgrade ermöglichen. Der 16 Bit Timer ermöglicht
hierbei zwei unabhängige PWM-Signale.
Erstmal fällt mir kein signifikanter Fehler auf bis auf die Tatsache,
dass, rein mathematisch, deine PWM-Werte, je nach ADC-Wert, außerhalb
des zulässigen Bereiches laufen können (beide können negativ werden, der
Wert für Timer0 kann auch größer 255 werden). Das hast du nicht
abgefangen, würde ich an deiner Stelle aber damit immer ein definiertes
Verhalten entsteht ;)
Desweiteren könnte man mal prüfen was der Compiler optimiert.
1 | (uint32_t)(Hall2-Max2)*255)/(Min2-Max2)
|
Kann man auch schreiben als
1 | (uint32_t)(Hall2-Max2)*(255/(Min2-Max2))
|
Und wenn der Compiler das erkennt sieht er dass
als Integer-Operation in deinem Fall 0 sein wird da Min2-Max2 > 255 ist.
Schreibe statt 255 einfach 255.0, hierbei zwingst du das System zur
einer Floatoperation und da der Atmega328P einen Hardwaremultiplizierer
hat ist das auch kein Beinbruch, ich denke zumindest mal, dass du keine
Timingprobleme hast.