Gast
#3967167
Hallo zusammen. Habe gerade ein etwas mit meinem Arduino Due gespielt. (SAM3x8e Controller, getaktet auf 84MHz). Programmiert wird der Controller in C. Ich wollte ein PWM-Signal (2MHz) auf eine gewisse Anzahl an Pulsen begrenzen. Also nach jeder PWM-Periode einen Interrupt generieren, eine Variable hochzählen und ab einer gewissen Anzahl das PWM-Modul deaktivieren. Der Ansatz funktioniert für Frequenzen von wenigen KHz super. Bei 2Mhz überspringt er mir jedoch immer einen Puls. Also bei gewünschten 8 Pulsen, wird erst nach 9 deaktiviert usw. (Und ja, man könnte ja auch einfach immer auf einen Zählschritt weniger abfragen, is jedoch unbrauchbar wenn man nur einen Puls will!!!) Ich habe das Problem jetzt bereits anderweitig gelöst (über einen weiteren Timer), also benötige ich keine Lösung mehr für mein Problem. Jedoch stellt sich bei mir schon die Frage ob dass normal ist. Verlange ich vielleicht zu viel von dem Controller, oder liegt ein Anwenderfehler meinerseits vor... Ich meine 2MHz, bei einer Taktfrequenz von 84MHz. Also 1/42'tel der Prozessortaktfrequenz...Klar pro Befehl braucht der Controller mehrere Schritte (fetch, decode, execude, writeback). Aber ein ARM-Microcontroller macht doch sicher schon Pipelining. Und selbst wenn nicht, könnte ich theoretisch bei 2MHz - PWM - Periode bis zu 10 Befehle zwischen den Perioden abarbeiten. Hat jemand eine Idee woran es liegen könnte? Muss man bei ARM-Controllern noch irgend eine Optimierung einstellen? Oder hat jemand schon das selbe Problem gehabt? Mit freundlichen Grüßen Stefan PS: Ja der Controller ist wirklich mit 84MHz getaktet, ich habe schon die Eingänge toggeln lassen und auf dem Oszi angeschaut