Hallo, ich habe folgende Problem: eine PWM mit gewissem "duty cycle" soll nach einer Anzahl Durchläufe einen Interrupt auslösen. Innerhalb des Interrupthandlers wird dann ein neues Timing für die PWM gesetzt. Soweit ansich kein Problem. Aber: Die Abarbeitung nimmt auch einige Zyklen in Anspruch, insofern verzögert sich das Neu-Setzen der PWM. Bei einer hohen Genauigkeit um wenige Zyklen führt das irgendwann zu einem grösseren Versatz gegenüber dem Systemtakt. Da das System noch andere IRQ abarbeitet, ist das ganze nicht wirklich deterministisch. Kennt jemand einen (möglichst simplen) uC, bei dem PWM-Werte quasi beim Schreiben erst intern gepuffert werden und erst beim Überlauf bzw. Erreichen des Schwellwertes (welches den Interrupt auslöst) automatisch in die Zähler-Register gelatcht werden? Die letzte Instanz wäre programmierbare Logik, aber noch gebe ich auf der uC-Seite nicht auf..
Wie wäre es damit, einfach alle Werte zwei mal im Speicher zu haben? Im ersten sind die Werte, die geändert werden, im zweiten sind die Werte die abgearbeitet werden. In der Pause zwischen zwei Zyklen wird jeweils die erste auf die zweite Liste übertragen?
Honk schrieb: > Schreiben erst intern gepuffert werden und erst beim Überlauf bzw. > Erreichen des Schwellwertes (welches den Interrupt auslöst) automatisch > in die Zähler-Register gelatcht werden? Bei den PIC24xxx, die ich verwende, ist das so. MfG Klaus
Bei den ATmega hat der Timer auch genug Möglichkeiten, um per Compare-Match und Overflow für ein PWM-Signal mit genau definierten Werten zu sorgen, indem das Vergleichsregister rechtzeitig gesetzt wird. Einfach mal einen Blick in den Abschnitt über die Timer Modi werfen. Und dann kommt es ein bisschen auf die PWM-Auflösung, die Randbedinungen für die Frequenz und maximal möglicher Interupt-Latenz drauf an.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.