Hallo zusammen, es ist an sich nur eine kleine Aufgabe, aber mir will die Lösung einfach nicht einfallen... Wie oben schon erwähnt, will ich wissen wie lange mein Taster gedrückt wurde. Ich meine mal irgendwo gelesen zu haben, das man die Mhz und den Counter von meiner Zählschleifen und dann irdenwas durch irgendwas teilt etc. Ich weis es einfach nicht mehr. Hoffe Ihr könnte mir da weiterhelfen! Besten Dank Patrick
Taste drücken, Zeitansage anrufen, Taste loslassen, wieder Zeitansage anrufen. Zeitdifferenz ausrechnen.
Dafür gibt es mehrere Ansätze. wenn der Controller noch etwas erledigen soll, als die Tasterzeit zu messen, macht es über Interrupts zu lösen. Vorab, welche Messgenauigkeit bzw. Auflösung ist erfordert? Beipiellösung: ISR (Taster){ zeitmessung = 0; starteTimer (); deaktiviereTasterinterrupt(); } ISR (TimerOverflow){ TCNTx = BERECHNETER_TCNT_WERT; zeitmessung += OVERFLOW_ZEIT; if (zeitmessung >= TASTER_ENTPRELLUNG && tasterlosgelassen){ messungfertig = TRUE; TimerStoppen(); } } Die Zeit für die Tasterentprellung kann zwischen 2 und 50 ms betragen, je nachdem welchen Schalter man benutzt. Der Timer muss vorher initialisiert werden, und nicht vergessen, die Variablen in der ISR vorher als volatile zu deklarieren.
:
Bearbeitet durch User
Danke für eure Antworten. Nun ich möchte die ms messen wie lange ich diesen Taster gedrückt habe. Es geht um die Steuerung meines HZK Ventils. Da ich die Temp des HKS nach meinem Gefühl einstellen will, muss ich da etwas herumexperementieren. Zum Schluss kommt es mir dann auch nicht auf jede einzelne ms an. Es soll mehr der grobe Richtwert sein wo ich ansetzen kann.. Sprich: Taster drücken, Motor vom Ventil macht es auf, Zeit soll gemessen werden wie lange der Taster gedrückt wurde. Wenn ich noch nicht ganz zu frieden bin, dann gibt es einen weiteren Taster der dann wenn er gedrückt wurde, das Ventil wieder zu geht. Diese Zeit soll dann abgerechnet werden. SO kann man sich das vorstellen. Den Wert den ich dann da raus habe, brauche ich dann unteranderem für meinen PID Regler Algo. Wie gesagt es kommt da nicht so auf eine ms an. Das wird hinterher noch nach "Augemaß" korrigiert.
patrick schrieb: > Sprich: Taster drücken, Motor vom Ventil macht es auf, Zeit soll > gemessen werden wie lange der Taster gedrückt wurde. > > Wenn ich noch nicht ganz zu frieden bin, dann gibt es einen weiteren > Taster der dann wenn er gedrückt wurde, das Ventil wieder zu geht. Diese > Zeit soll dann abgerechnet werden. Ehrlich gesagt, finde ich das schwachsinnig. Warum nimmst du nicht ein Poti an einem Analogeingang und stellst damit die Zeit ein? Aber zu deinem Problem: Du hast für deinen Taster eine Entprellung. Die liefert dir üblicherweise zwei Zustände: KeyPress und KeyRelease. Bei Keypress startest du einen Zähler oder liest den Zählerstand eines ständig laufenden Zählers. Sowas wie Millis beim Arduino. Bei KeyReleaee stoppst du den Zähler oder liest wieder die Millis ein. Die Differenz zum ersten Wert ist deine Zeit.
:
Bearbeitet durch User
patrick schrieb: > Nun ich möchte die ms messen wie lange ich diesen Taster gedrückt habe. Ok, dann musst du als Zeitansage/Zeitbasis eben eine anrufen/abfragen, die die Zeit mit ms-Auflösung liefert. Alternativ musst du die festgestellte Zeitdifferenz aus der Einheit der Zeitbasis in ms umrechnen. Frank L. schrieb: > Taste drücken, Zeitansage anrufen, Taste loslassen, wieder Zeitansage > anrufen. Zeitdifferenz ausrechnen.
Thomas E. schrieb: > Ehrlich gesagt, finde ich das schwachsinnig. Finde ich jetzt beleidigend und unnötig!!! Warum ist das schwachsinnig? Es gibt doch viele Arten wie man etwas lösen kann. Zumal es durchaus Anwendungsfälle geben könnte mit den Tastern und der Zeit. Thomas E. schrieb: > Warum nimmst du nicht ein > Poti an einem Analogeingang und stellst damit die Zeit ein? Das wäre dann eine gute Alternative. Bin auf diese Idee nicht gekommen. DIeses und die nachfolgende Beschreibung sind gut. Der erste Satz war wie gesagt echt unnötig. Vllt fällt es einem ja nicht auf das man andere damit beleidigt, deswegen immer erst einmal nachdenken bei sowas bevor man das absendent. Bin aber nicht nachtragend, von daher alles gut ;)
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.