Forum: Mikrocontroller und Digitale Elektronik tiny13 Fast-PWM und Zeitmessung zusammen möglich ?


von lll (Gast)


Lesenswert?

Hallo,
ich habe mal eine Verständnisfrage.
Ich möchte einen Taster abfragen und festellen wie oft er pro Minute 
gedrückt worden ist und ein dementsprechendes PWM Signal auf eine LED 
geben, also je schneller gedrückt wird desto heller die LED.
Meine Idee ist nun den timer0 des tiny13 im Fast-PWM Modus laufen zu 
lassen und dann in OCR0A den Wert für die Tastendrücke zu schreiben.
Allerdings weiß ich jetzt nicht wie ich die Anzahl der Tastendrücke pro 
Minute umsetzen soll ?
Soll ich mir den ersten Zeitpunkt des Tastendrucks merken und dann die 
Differenz zum nächsten bilden ?
Und wie sieht das mit der Entprellung aus ?
Ich denke das der maximale Wert so bei vier Schaltvorgängen pro Sekunde 
liegen soll und dann die LED voll leuchtet.
Ansatz richtig oder habe ich was wesentliches übersehen ?
Danke.

: Verschoben durch Moderator
von Karl H. (kbuchegg)


Lesenswert?

lll schrieb:

> Soll ich mir den ersten Zeitpunkt des Tastendrucks merken und dann die
> Differenz zum nächsten bilden ?

Darauf läuft es hinaus, wenn du es so machen willst.

> Und wie sieht das mit der Entprellung aus ?

Um die wirst du nicht herumkommen. Wenn du ein System auf Tastendrücken 
(im Gegensatz zu "ist die Taste gedrückt oder nicht") aufbaust, brauchst 
du eine Entprellung.

> Ich denke das der maximale Wert so bei vier Schaltvorgängen pro Sekunde
> liegen soll und dann die LED voll leuchtet.
> Ansatz richtig oder habe ich was wesentliches übersehen ?

Man kann das so machen.
Allerdings: Du musst nach dem Tastendrücken 1 Minute als Benutzer 
warten, ehe sich was an der LED tut und du überprüfen kannst ob du die 
richtige Anzahl gedrückt hast. Und 1 Minute ist lang, wenn man auf etwas 
wartet.

Das bessere System wäre es, mit jedem Tastendruck sofort die LED auf 
einen helleren Wert einstellen. D.h. du drückst einmal und die LED geht 
auf Stufe 1. Drückst du nochmal geht die LED auf Stufe 2. usw. Beim zb 
8-ten Tastendruck geht die LED dann wieder auf Stufe 0 zurück.

Meistens macht man es allerdings so, dass sich die Helligkeit 
kontinuierlich erhöht, SOLANGE eine Taste gedrückt ist. D.h. du drückst 
die Taste nieder und während die Taste gedrückt ist, erhöht sich die 
Helligkeit laufend. Hat man 2 Taster, dann erhöht der eine und er andere 
erniedrigt. Hat man nur 1 Taste, dann kann man es zb so machen, dass 
nach maximaler Helligkeit die Helligkeit wieder zurückgesetzt wird und 
das Spiel von vorne losgeht. Dafür brauchst du dann keine Entprellung. 
Diese Funktionalität lässt sich ziemlich einfach erreichen.

von lll (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Allerdings: Du musst nach dem Tastendrücken 1 Minute als Benutzer
> warten, ehe sich was an der LED tut und du überprüfen kannst ob du die
> richtige Anzahl gedrückt hast. Und 1 Minute ist lang, wenn man auf etwas
> wartet.

Danke erstmal für Deine Zeit.
Das ganze soll ein Spiel werden bei dem jemand halt die LED durch 
entsprechendes drücken der Taste auf einen zuvor "festgelegten" 
Helligkeitswert bringen soll.
Also eine Art Geschicklichkeitsspiel (und wenn die LED zu dunkel oder 
hell ist gibt's 'ne neue Runde räusper :-P ).

Schön also brauche ich zwei Variablen in denen ich den vorherigen und 
den aktuellen Timestamp ablege, nur müßte ich ja auch noch mitteln falls 
mal jemand den Taster nicht 100%ig erwischt ...
Das mit der einen Minute ist auch absichtlich damit jemand doch drücken 
muß halt nach einer Minute, da dachte ich dann das die LED einmal voll 
angeht :-P
Ist nur 'ne Idee ;-)
Hm, also entprellen dann innerhalb der TimerOverflow-ISR und grob eine 
achtel Sekunde als Maß ?
Soll so einfach wie möglich werden:

[CR2032]
  |
[Tiny13]---[1k]---[LED]
  |
[Taster]

von Frank L. (hermastersvoice)


Lesenswert?

so einfach wie möglich wäre es wenn sich Jeder gleich 10 Kurze bestellt 
und Die dann ohne Spielkram hintergiesst. Spart Zeit und gekotzt wird 
sowieso.

von lll (Gast)


Lesenswert?

Frank L. schrieb:
> so einfach wie möglich wäre es wenn sich Jeder gleich 10 Kurze bestellt
> und Die dann ohne Spielkram hintergiesst. Spart Zeit und gekotzt wird
> sowieso.
>
>
>
>     Beitrag melden Bearbeiten Löschen

Klar und bei Tekila weißte dasde genug hast wenn Du das Salz durch die 
Nase schnupfst, so wie bei ERGO üblich :-P
Immer diese "Moralapostel" :-P
Wenn ich nun einfach 'nen nervigen Brummer für untern Tisch basteln 
wollte hättest Du das sicherlich nicht gepostet ...

von Achim M. (minifloat)


Lesenswert?

Die PWM-Frequenz ist doch während das Spiel läuft fest. Dein 
Timerinterrupt kann der Overflow-Interrupt sein. Ablaufsteuerung wird in 
einer kleinen Statemachine in der Main gemacht.
Als "You lose" oder "You win" könnte man an den zweiten noch freien 
OCR-Ausgang einen Piezopiepser oder kleinen Lautsprecher hängen. Aber 
nicht vergessen, die PWM-Frequenz nach abspielen der Sieges- oder 
Niederlage-Melodie nachher wieder zurückzustellen.

von Peter D. (peda)


Lesenswert?

Das beste wäre, erstmal eine Spielanleitung zu schreiben, die auch ein 
anderer versteht.
Die ist dann quasi das Pflichtenheft und damit ist das eigentliche 
Programmieren dann ganz einfach.

Allgemein:
Man kann natürlich PWM und Timerinterrupts zusammen benutzen. Und damit 
dann Entprelltakt (10ms) und Minutentakt erzeugen.

lll schrieb:
> falls mal jemand den Taster nicht 100%ig erwischt ...

Wie soll das gehen?
Ein Taster kann das nicht unterscheiden. Entweder der Kontakt schließt 
oder schließt nicht.
Oder Du nimmst keinen Taster, sondern eine Drucksensor und gibst dessen 
Spannung auf den ADC.


Peter

von Karl H. (kbuchegg)


Lesenswert?

Peter Dannegger schrieb:
> Das beste wäre, erstmal eine Spielanleitung zu schreiben, die auch ein
> anderer versteht.


Nachdem ich mir das Eröffnungsposting nochmal durchgelesen habe, keimt 
in mir ein Verdacht für die gedachte Funktion auf.

Kennt noch wer das PC-Game 'Summer Games' von vor 20 Jahren.
Man musste wie ein wilder auf der Tastatur eine Taste beackern. Je 
schneller man auf die Tastatur einhämmerte, desto schneller rannte der 
100m-Läufer (ok, es war ein wenig komplizierter. Man musste auch den 
richtigen Takt finden).

Ich denke er will was ähnliches machen.
Auf einen Taster einhämmern und je schneller man hämmert, desto heller 
leuchtet eine LED. Wer es in der Runde auf die hellste/dunkelste LED 
bringt, muss/darf was tun.

Ich denke, das kriegt die PeDa Entprellung gerade noch hin. So schnell 
ist keiner.

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.