www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik BASCOM Tastendrucklänge auswerten


Autor: Max Egner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du müßtest diesen Code von C nach Bascom umschreiben:

Beitrag "Universelle Tastenabfrage"


Peter

Autor: Bascomfehler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie Gemein.

Autor: Beginy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rico H. (Firma: FHNW) (2she)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rico H. (Firma: FHNW) (2she)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Michael H. (mueckerich)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Beobachter #42 (Gast)
Datum:

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

100mS--> 100 milli Siemens?

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

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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"

...

Autor: Thomas Der Bastler (thomasderbastler)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.