-
-
Erfahrener Benutzer
Begeisterter Techniker
Das hatte ich mir so auch schon überlegt. Dann könnte ich den Timer auch einfach auf 1ms konfigurieren und in der ISR einfach eine Variable hochzählen. Daraus lässt sich natürlich die drehzahl dann errechnen. Ich hatte nur gedacht, das es eventuell möglich wäre den Timer so langsam zu konfiguriere, dass er nicht überläuft. Somit würde man sich den umweg über den 2. Zähler sparen was ein wenig Zeitunkritischer wäre aber ich werde es dann wohl doch so realisieren wenns anders nicht geht.
Ich schilder mal kurz meinen geplanen ablauf:
Der erste Impuls am Eingang kommt an und der Timer läuft los und läuft jede ms über. Somit wird meine Zählervariable hochgezählt in der ISR. Wenn der 2. Impuls kommt stopt der Timer und ich lese aus wie hoch meine Zählervariable steht. Als beispiel nehme ich mal einfach 70. Jetzt weiß ich, dass zwischen 2 umdrehungen 70ms liegen. Ich rechne dann also 60000/70 = ~857 rpm.
Jetzt muss ich noch den Timer wieder auf 0 setzen (denke ich jedenfalls mal) und es kann weiter gehen.
In meiner Rechnung vernachlässige ich maximal eine Millisekunde, da ich den letztn Timerwert nicht mehr mit berücksichtige. Das ist für meine Anwendung aber nich wirklich kritisch. Viel wichtiger ist jetzt zu wissen ob ein gravierender Messfehler auftritt aufgrund der vielen Interrupts die der Timer auslöst.
Außerdem weiß ich nicht, was passiert wenn der Controller gerade meine Drehzahl errechnet und dann ein Interrupt von Eingang ausgelöst wird. Angenommen das Programm springt gerade in den Teil, in dem die Drehzahl berechnet wird (in meinem bsp. 60000/70) und in dem moment kommt wieder ein Zündsignal. Wird dann aus der ISR des Timers rausgesprungen und in die ISR des Eingangs gesprungen oder wird erst die Timer ISR komplett ausgeführt?
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen