Forum: Mikrocontroller und Digitale Elektronik Atmega328P Wie lange war der Taster gedürckt


von patrick (Gast)


Lesenswert?

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

von Frank L. (hermastersvoice)


Lesenswert?

Taste drücken, Zeitansage anrufen, Taste loslassen, wieder Zeitansage 
anrufen. Zeitdifferenz ausrechnen.

von Christian S. (christian_s593)


Lesenswert?

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
von patrick (Gast)


Lesenswert?

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.

von Thomas E. (thomase)


Lesenswert?

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
von Wolfgang (Gast)


Lesenswert?

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.

von patrick (Gast)


Lesenswert?

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