Hallo zusammen, Ich möchte mit meinem STM8 drei PWM-Signale mit Hilfe von externen Interrupts und Timer 4 auswerten. (Ich weiß es gibt einen PWMI auf TIM1, aber dieser wird anderweitig benötigt). Die Auswertung des PWM-Signals eines Pins funktioniert so weit so gut. Da die PWM-Input Pins auf einem Port liegen kann es leider dazu kommen, dass ein Interrupt von einem anderen Pin kommt und dieser somit die Werte verfälscht. Meine Idee dazu wäre gewesen, dass ich jeweils nur den Pin, der ausgewertet werden soll "interruptfähig" mache und so zyklisch die 3 PWM-Signale auslesen. Nun meine Frage, funktioniert das so? Darf ich die Pin-Konfiguartion einfach zyklisch mitten im Programm ändern, ohne etwas zu beachten? Sollte ich ein asm(rim) -> asm(sim) um diese "neukonfiguration" packen? Ich bin natürlich auch gerne offen für andere Lösungsvorschläge! Viele Grüße
SCHWB schrieb: > dass ein Interrupt von einem anderen Pin kommt und dieser somit die > Werte verfälscht. Aber sowas lässt sich doch lösen: eine gemeinsame Interupt Service Routine stellt als erstes fest was genau den IRQ ausgelöst hat und verzweigt dann in die spezielle Routine, die Verzögerung beträgt ja nur Mikrosekunden. Natürlich müssen die alle minimal sein damit nicht das System mit IRQs überladen wird. Georg
georg schrieb: > Aber sowas lässt sich doch lösen: eine gemeinsame Interupt Service > Routine stellt als erstes fest was genau den IRQ ausgelöst hat und > verzweigt dann in die spezielle Routine Die ISR wird ja trotzdem ausgelöst und ich müsste ständig schauen, ob sich bei dem PWM-Signal, das ich auswerten will gerade ein Flankenwechsel stattgefunden hat mit einer if-Abfrage in diesem Stile denke ich mal: {if(stateNew != stateOld)}. Wäre da nicht eine Änderung der Interruptfähigkeit, falls sie so funktioniert, wie oben beschrieben, viel effizienter?
SCHWB schrieb: > dass ich jeweils nur den Pin, der > ausgewertet werden soll "interruptfähig" mache und so zyklisch die 3 > PWM-Signale auslesen. SCHWB schrieb: > falls sie so > funktioniert, wie oben beschrieben, viel effizienter? Dann kannst du doch gleich die IO-Pins pollen. Ob das überhaupt so problemlos geht müsste man im Hardware und Softwaremanual des Controllers prüfen, das wäre mir aber viel zu unübersichtlich. Georg
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.