Ich möchte ein Tachosignal auswerten / auslesen und habe mir folgendes überlegt um den µC nicht zu belasten: 1. Alle ..ms über einen Hardwaretimer einen Interrupt setzen und einen Eingansport an dem das Tachosignal sitzt abfragen. 2. in der Interruptroutine den Flankenwechsel nur in einer int-Variable mitzählen lassen und nach ..ms Interrupt verlassen. 3. die Datenverarbeitung findet dann in der main-Schleife statt. So dürfte ich meinen µC nicht unnötig lange aufgehalten haben und trotzdem saubere Ergebnisse erhalten. Jetzt habe ich nur ein Problem.. wenn der µC sich in einer Interruptroutine befindet wird der wohl kaum den Timer im Hintergrund weiterlaufen lassen.. Wäre es denn hier ok einen 2ten Timer im Interrupt laufen lassen der beispielsweise nur 2ms den Flankenwechsel aufzeichnet? Oder wäre damit ein Interrupt wieder überladen? Danke & Gruß Fillialleiter
Fillialleiter schrieb: > Jetzt habe ich nur ein Problem.. wenn der µC sich in einer > Interruptroutine befindet wird der wohl kaum den Timer im Hintergrund > weiterlaufen lassen. Warum nicht? Du könntest auch einfach beim Flankenwechsel am Port-Pin einen Interrupt ausführen lassen, ein Flag setzen und dieses dann in der Main-Funktion auswerten bzw. die Zeit messen. Oder du kannst einen Timer asynchron als Counter zählen lassen, sprich das Tacho signal lässt den Counter hochzählen. In einem festen Zeitintervall (z.B. 1 Sekunde) guckst du dann wieviele Impulse der Counter gezählt hat.
Timmo H. schrieb: > Du könntest auch einfach beim Flankenwechsel am Port-Pin einen Interrupt > ausführen lassen, ein Flag setzen und dieses dann in der Main-Funktion > auswerten bzw. die Zeit messen. Hallo Timmo, ich denke das ist die perfekte Lösung! Der Flankenwechsel am Pin + Interrupt wird kürzer sein als jede Lösung die ich mir einfallen lassen könnte. Werde dann einen festen Timer alle paar ms. abfragen & auf die Minute hochrechnen. Merci für den Hinweis! Danke & Gruß ;O) Fillialleiter
Fillialleiter schrieb: > 2. in der Interruptroutine den Flankenwechsel nur in einer int-Variable > mitzählen lassen und nach ..ms Interrupt verlassen. Warten in einer Interrupt-Routine ist eine schlechte Idee. Besser: In der ISR wird ein Zähler runtergezählt — falls er nicht bereits 0 ist. In main wird der Countdown-Zähler auf den benötogten Wert aufgezogen. Er ist abgelaufen, wenn er den Wert 0 enthält, und kann dann neu aufgezogen werden.
Fillialleiter schrieb: > ich denke das ist die perfekte Lösung! Der Flankenwechsel am Pin + > Interrupt wird kürzer sein als jede Lösung die ich mir einfallen lassen > könnte. Werde dann einen festen Timer alle paar ms. abfragen & auf die > Minute hochrechnen. Merci für den Hinweis! Kann aber auch nach hinten losgehen: Wenn du dir z.B. Störungen an besagtem Pin einfängst, laufen sehr viele Interrupts auf und dein Prozessor wird praktisch nur noch mit den Interrupts beschäftigt sein. Also ggf. mit der externen Beschaltung noch etwas nachhelfen. Beispielsweise die Impulsrate, die an den Prozessor weitergereicht wird, mit einem Monoflop auf einen plausiblen Wert begrenzen. Oder mal nachsehen, was der Prozessor so an Input-Capture-Einheiten bietet.
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.