Forum: Mikrocontroller und Digitale Elektronik BASCOM Tastendrucklänge auswerten


von Max Egner (Gast)


Lesenswert?

Hallo!

Ich möchte gerne mit einer Taste ein Gerät schalten. Fogende Situationen 
sollten berücksichtigt werden:

Gerät AUS und Taste wird kurz gedrückt => Gerät EIN
Gerät AUS und Taste wird lang gedrückt => Gerät EIN
Gerät EIN und Taste wird kurz gedrückt => Gerät EIN bzw. nichts
Gerät EIN und Taste wird lang gerdückt => Gerät AUS

Taste kurz gedrückt: <2 Sekunden
Taste lang gedrückt: >= 2 Sekunden

Ich habe es schon mit Timer und Pulsein versucht, aber das Problem ist 
das erst geschalten wird, wenn ich die Taste loslasse (beim Drücken 
länger als 2 Sekunden). Ich möchte aber das sofort nach Ablauf der 2 
Sekunden das Gerät ausgeschalten wird und nicht erst nachdem die Taste 
losgelassen wird.

Vielleicht hat jemand ein Beispiel für mich.

Danke schonmal.

Max

von Peter D. (peda)


Lesenswert?

Du müßtest diesen Code von C nach Bascom umschreiben:

Beitrag "Universelle Tastenabfrage"


Peter

von Bascomfehler (Gast)


Lesenswert?

Wie Gemein.

von Beginy (Gast)


Lesenswert?

Probier mal die Funktion "Debounce" in BASCOM.
Da kannst Du z.B. bestimmen, welche Schaltflanke des Tasters ausgewertet 
wird und auch die Zeit vorgeben, nach der was passiert d.h. eine SUB 
aufgerufen wird...
Gruß
Beginy

von Rico H. (Firma: FHNW) (2she)


Lesenswert?

Peter Dannegger schrieb:
> Du müßtest diesen Code von C nach Bascom umschreiben:
>
> Beitrag "Universelle Tastenabfrage"
>
>
> Peter

Hallo Peter,

funktioniert dieser Code auch für externe Tasteninterrupts? Hab ne 
Folientastatur an Interruptleitungen!

Was müsst ich umschreiben? Besten Dank!

von STK500-Besitzer (Gast)


Lesenswert?

Rico H. schrieb:
> funktioniert dieser Code auch für externe Tasteninterrupts? Hab ne
> Folientastatur an Interruptleitungen!

Tasten fragt man in regelmäßigen Abständen ab. Dafür braucht man keine 
Interruptleitungen. Der einzige Grund, einen Interrupteingang zu 
verwenden, ist, den Controller zu wecken.

von Rico H. (Firma: FHNW) (2she)


Lesenswert?

STK500-Besitzer schrieb:
> Tasten fragt man in regelmäßigen Abständen ab. Dafür braucht man keine
> Interruptleitungen. Der einzige Grund, einen Interrupteingang zu
> verwenden, ist, den Controller zu wecken.

Das heisst ich kann mir die Interrupts sparen und mit einem Timer 
Interrupt die Tasten abfragen?

von Michael H. (mueckerich)


Lesenswert?

Peter Dannegger schrieb:
> Du müßtest diesen Code von C nach Bascom umschreiben:

Nee, er muss nach ASM umschreiben. So ein Quatsch!

Das funktioniert mit BASCOM auch. Mit PIN* fragt man den Eingangspin ab 
(siehe Sample PORT.BAS) ist die Taste gedrückt, dass wird ein Timer 
(siehe Sample TIMER#.BAS) gestartet, ist die Taste nicht gedrückt wird 
der Timer rückgesetzt.
Nach der Laufzeit von 2 Sekunden wird reagiert.
Eine andere Lösung ist das der Timer so konfiguriert ist, das er immer 
mit einem festen zeitlichen Abstand (z.B. 100mS) eine ISR anspringt. 
Solange die Taste gedrückt (Abfrage mit PIN*) ist wird in der ISR eine 
Variable hochgezählt. Wenn die dann den geforderten Wert erreicht hat 
führt man die Aktion aus.

von Beobachter #42 (Gast)


Lesenswert?

Michael H. schrieb:
> Solange die Taste gedrückt (Abfrage mit PIN*)

100mS--> 100 milli Siemens?

https://de.wikipedia.org/wiki/Internationales_Einheitensystem

von Hannes L. (hannes)


Lesenswert?

Michael H. schrieb:
> Nee, er muss nach ASM umschreiben. So ein Quatsch!

Nein, die ASM-Version war eher als die C-Version da. Und ich nutze sie 
gern in verschiedenen Varianten.

In Bascom habe Peters Entprellung auch mal eingesetzt, allerdings für 
einen etwas anderen Zweck:
Beitrag "Schalter zu Taster"
Beitrag "Re: Schalter zu Taster"

...

von Thomas D. (thomasderbastler)


Lesenswert?

Kannst mal eine Quick and Dirty Lösung machen...So etwa...

DIM Geräte_Status as Byte

Geräte_Staus=0

Do
 Debounce Pinb.0 , 0 , Taster, SUB
loop



Taster:
 Wenn Dein Geräte_status=0 dann
   Gerät einschalten
   Status=1

 Wenn Status=1 dann
   Warte
 Schalte aus
 Status 0

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.