Forum: Mikrocontroller und Digitale Elektronik Arduino - Zeiterfassung im Interrupt


von Max M. (maximi1111)


Lesenswert?

Hallo an alle,

aktuell bin ich mit einem kleinen Projekt beschäftigt und habe gerade 
ein Problem, welches ich einfach nicht in den Griff bekomme. 
Grundsätzlich möchte ich mehrere verschiedene Messdaten erfassen.
Der "Impuls" zur Messung der einzelnen Sensoren MUSS (leider) mittels 
Timern erfolgen.
Einer der Messwerte ist die Zeit, die zwischen zwei Impulsen eines 
Tasters vergeht. Da die Routine zur Messung im Timer sthet, funktioniert 
leider der Befehl millis() o.Ä. nicht. Auch musste ich leider 
feststellen, dass die anderen Timer in der Zwischenzeit ruhen, sodass 
ein Auslesen der Timerregister nichts bringt.
Hat jemand von Euch eine Idee, wie ich eventuell an die gewünschte Zeit 
kommen kann?

Besten Dank für Eure Mühe und beste Grüße
Max

von Nils P. (ert)


Lesenswert?

Der Timer steht nicht im Interrupt, es sei den man sagt es ihm. Bring 
also erst mal den Timer zum laufen und speicher den Wert weg. Dann 
kommen dir weitere Ideen zur Umsetzung... Timer-Overflow-Inkremente, 
High-Low-Erkennung, div.Merker...

Für einige sachen ist Arduino halt nicht gedacht. Musst halt jetzt 
selber dir nen Kopp machen.

Greez Ert

von Amateur (Gast)


Lesenswert?

Unsinn!

Du bestimmst einen Pin als Interruptquelle, liest beim Start (1. 
Impuls), die Zeit und beim Nächsten (2. Impuls) erneut. Die Differenz 
ist der Abstand.

Alternativ haben die Teile auch mehr als einen Zeiter. Meist zwei oder 
drei.

von Max H. (hartl192)


Lesenswert?

Ich würde das mit Input Capture machen, das ist ideal um die Zeit 
zwischen zwei Impulsen zu messen.

von Max M. (maximi1111)


Lesenswert?

Hi an alle,

in der Zwischenzeit habe ich mein Problem lösen können. Der Hinweis mit 
den Pins als Interrupt-Eingang war Gold wert.
Noch einmal kurz die Lösung, falls jemand ein gleiches Problem hat.
Alle Timer werden während eines Interrupts unterbrochen und somit 
funktionieren halt die Befehle millis(), delay(), usw. nicht.
Daher habe ich jetzt jeden der Impulssignale auf einen Interrupt-Eingang 
gelegt. Sobald das Signal steigt, wird die aktuelle Zeit in einer 
Variablen zwischengespeichert. Beim nächsten Impuls wird die Zeit in 
einer anderen Variable abgelegt und die Zeit zwischen den Impulsen kann 
berechnet werden. Die Berechnung erfolgt dann mittels Timer und ich 
erhalte immer die aktuellen Werte.

Besten Dank an alle und liebe Grüße
Max

von Helper (Gast)


Lesenswert?

Max Maier schrieb:
> und somit
> funktionieren halt die Befehle millis(), delay(), usw. nicht.

Solche Dinge sollte man auch garnicht erst verwenden. Von Anfang an 
schlau Programmieren, dann erübrigen sich solche Schlaufen übers ganze 
Programm. Delay's werden nie gerne gesehen.

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
Noch kein Account? Hier anmelden.