Tastenanschläge zählen?

#3946218
Lesenswert?

Hallo,
habe nur eine ganz kurze Frage, auf die Google mir irgendwie keine 
Antwort liefern konnte (wahrscheinlich falsche Suchbegriffe?). Ich habe 
es jetzt geschafft, meinen Motor per PWM zu steuern. nun möchte ich 
einen Taster einbauen und wenn dieser einmal gedrückt wird, dann soll 
der Motor x schnell laufen, wird der Taster zwei Mal gedrückt, soll der 
Motor y schnell laufen, wird der Taster drei Mal gedrückt, soll er z 
schnell laufen und beim vierten Drücken soll er wieder x schnell laufen.

Könntet ihr mir dabei vielleicht helfen oder mir ein Stichwort für 
Google geben? Ich benutze übrigens Bascom.


Edit: Das Stichwort, das ich suche scheint Entprellen zu sein. Kann das 
sein?
Gast #3946262
Lesenswert?

Hallo,

du brauchst in jedem Fall einen Timer:

1. um festzustellen, dass der Key nicht nur 2 x gedrückt wurde, sondern 
dass das innerhalb x ms geschehen ist.

2. um bei einer Pause länger x ms den Befehl auszuführen und den Zähler 
zurückzustellen.

Wenn du nur einfach zählst, bekommst du ein ganz anderes verhalten als 
gewünscht, z.B. kannst du nicht 2x nacheinender Motor 1 ansprechen.

Georg
#3946264
Lesenswert?

Georg schrieb:
> Hallo,
>
> du brauchst in jedem Fall einen Timer:
>
> 1. um festzustellen, dass der Key nicht nur 2 x gedrückt wurde, sondern
> dass das innerhalb x ms geschehen ist.
>
> 2. um bei einer Pause länger x ms den Befehl auszuführen und den Zähler
> zurückzustellen.
>
> Wenn du nur einfach zählst, bekommst du ein ganz anderes verhalten als
> gewünscht, z.B. kannst du nicht 2x nacheinender Motor 1 ansprechen.
>
> Georg

Gibt es irgendwie bestimmte Pins am Attiny 2313 mit denen das nur geht? 
Oder geht das mit allen?

MFG
Gast #3946294
Lesenswert?

Max Muster schrieb:
> Gibt es irgendwie bestimmte Pins am Attiny 2313 mit denen das nur geht?

Der Timer hat mit dem Pin garnichts zu tun. Praktisch richtest du einen 
Timer ein mit z.B. 1 ms und in der Timer-ISR fragst du die Taste ab. 
Dann lässt sich Entprellen und die beschriebene Abfrage zusammen 
erledigen.

Georg
#3946306
Lesenswert?

Mein Code sieht bisher so aus:
1
$regfile = "attiny2313.dat"
2
$crystal = 1000000
3

4

5
Config Portb. 3 = Output 'B3 Output
6
Config Pind. 2 = Input   'D2 Input
7

8
Motor Alias Portb. 3
9
Taster Alias Pind. 2
10
Pinb. 0 = 1              'Pull Up Widerstand
11

12
Do
13

14
Debounce Pind. 2 , 0 , Gedruekt , Sub
15

16
Loop
17

18
End
19

20
Gedruekt:
21
    Motor = 1          'Motor läuft, wenn Taste gedrückt wurde
22
      Return



Funktioniert so aber absolut nicht, aber dieses Tutorial z.B.
http://halvar.at/elektronik/kleiner_bascom_avr_kurs/taster_entprellen/
hilft auch nicht sehr viel.
Gast #3947132
Lesenswert?

Max Muster schrieb:
>> Beitrag "Re: EIN-AUS mit Taster per Interrupt, ATtiny25 o.ä."
>
> Hey, der Link hilft mir auf jeden Fall schon mal, aber leider wurde das
> in C geschrieben und ich arbeite ja mit Bascom..

Sieh das doch positiv. Der Link zeigt Dir ein Programm, das wohl das 
macht, was Du Dir vorstellst oder nur leicht verändert werden müßte. Es 
ist auch recht einfach auf Deinen ATtiny2313 zu übertragen.
Das Programm ist recht kurz und übersichtlich, und in jeder Zeile ist 
ein Kommentar, der beschreibt, was passieren soll.

Vielleicht ist der schnellere, erfolgreichere Weg, einfach einmal C zu 
probieren?
Das Atmel AVR-Studio 4.18 ist kostenlos herunterzuladen und einfach zu 
installieren. Ein Projekt erstellen, den Quellcode kopieren und das 
Übersetzen sollte fehlerfrei klappen. Wenn es dann noch in Deiner 
Schaltung funktioniert, ist es vielleicht überlegenswert, es auszubauen 
und bei C zu bleiben ;-)
Gast #3947151
Lesenswert?

Hi Max, was möchtest du genau?

a) Soll derMotor nach x kurzen Tastendrücken innerhalb eines 
Zeitfensters, mit Speed x laufen? mit x=1...3

b) Soll er nach dem ersten Tatsendruck mit Speed_1 alleine weiterlaufen, 
beim zweiten mit Speed_2.... und beim 4. Tastendruck wieder mit 
Speed_1...?

c) Soll der Motor nur solange mit Speed x laufen, wie die Taste gedrückt 
bleibt?

d) ...weiß der Geier... ;-)


Gewöhne dir bitte mal eine präzise Beschreibung des Ziels bzw. des 
Funktionsablaufes an, sonst redet man hier aneinander vorbei und 
verschwendet Zeit...
Gast #3947163
Lesenswert?

Eine Einbahnstraße?

Also nur schneller?

Was bei Erreichen des Maximums.

Insgesamt sollte das ganze kein Problem sein, einen freien Timer 
vorausgesetzt und eine vernünftige Entprellung.

Ein kleines Problem wird der Rhythmus in sich bergen:
Was ist der Unterschied zwischen zweimal x und einmal y?
#3947332
Lesenswert?

m.n. schrieb:
>
> Vielleicht ist der schnellere, erfolgreichere Weg, einfach einmal C zu
> probieren?
> Das Atmel AVR-Studio 4.18 ist kostenlos herunterzuladen und einfach zu
> installieren. Ein Projekt erstellen, den Quellcode kopieren und das
> Übersetzen sollte fehlerfrei klappen. Wenn es dann noch in Deiner
> Schaltung funktioniert, ist es vielleicht überlegenswert, es auszubauen
> und bei C zu bleiben ;-)

vielleicht ist die Idee ja gar nicht so schlecht.

Gibt es irgendein Tutorial, das Du mir für den Anfang empfehlen kannst?
#3947838
Lesenswert?

Max Muster schrieb:

> Funktioniert so aber absolut nicht,

Das das hier
1
...
2
  Taster Alias Pind. 2
3
  Pinb. 0 = 1              'Pull Up Widerstand
4
...

nicht funktioniert, glaub ich dir sogar.

Der Pullup sollte natürlich schon auch auf dem Pin eingeschaltet werden, 
an dem der Taster hängt. Und eingeschaltet wird ein Pullup mit dem Port 
Register und nicht dem Pin Register (wobei ich mir nicht sicher bin, ob 
das bei BASCOM nicht egal ist)
#3947841
Lesenswert?

Max Muster schrieb:

> vielleicht ist die Idee ja gar nicht so schlecht.
>
> Gibt es irgendein Tutorial, das Du mir für den Anfang empfehlen kannst?

Wenn du da auch so planlos, unstrukturiert und schlampig rangehst wie 
bei der BASCOM-Programmierung, wird das allerdings nichts werden. Noch 
simpler als mit BASCOM kriegst du es nirgends(Arduino spielt noch in 
einer ähnlichen Liga). Und selbst das kriegst du nicht hin.
Gast #3947859
Lesenswert?

Karl Heinz schrieb:
> Wenn du da auch so planlos, unstrukturiert und schlampig rangehst wie
> bei der BASCOM-Programmierung, wird das allerdings nichts werden. Noch
> simpler als mit BASCOM kriegst du es nirgends (Arduino spielt noch in
> einer ähnlichen Liga). Und selbst das kriegst du nicht hin.

Gib ihm die Zeit, die er braucht. Bei Anderen bist Du ja auch nicht so 
demotivierend. Treten hilft da überhaupt nicht :-(

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren