Forum: Mikrocontroller und Digitale Elektronik Tasten entprellen per Software


von Val D. (valeri_d)


Lesenswert?

Auf der Seite sind verschiedene Variante einer Tasten-Entprellung 
dargestellt.
https://www.mikrocontroller.net/articles/Entprellung

Bei den Software-basierten stellte ich fest, dass eine einfachste Form, 
nicht dabei war. Ich würde sie Entprellungs-Zähler nennen. Diese Methode 
besteht darin, dass eine Funktion ständig aufgerufen wird, die für das 
Tätigen einer Taste zuständig ist. Dabei wird auf den Zähler geachtet, 
der beim ersten Aufruf auf ein Maximum gesetzt wird. Danach wird auf 
ständige AN/AUS reagiert. Entweder wird wieder auf Maximum gesetzt, wenn 
der Zähler noch nicht am Null angekommen ist, oder mit jedem AUS wird 
der Zähler um eine Eins kleiner gemacht.

Der Nachteil ist, dass evtl. zwei if-Anweisungen umsonst bei jedem loop 
aufgerufen würden. Der maximale Wert kann an die eigene Situation, 
Geschwindigkeit und Anzahl der Pflicht-Aufrufen in dem loop angepasst 
werden.

Ich zeige mithilfe eines Arduino Programms. Zusätzliche Kommentare haben 
das kleine Programm etwas unübersichtlicher gemacht. Trotzdem hoffe ich, 
dass diese Methode jemanden hilfreich sein könnte.
1
#define PIN_BUTTON 12 // Pin : Eine Taste, die entprellt werden soll
2
#define BUTTON_DEBOUNCE_COUNTER_MAX 20 // Max. Wert für den Zähler, der zum entprellen von einem Taster verwendet verden kann.
3
int _ButtonDebounceCounter = 0; // Entprellungs-Zähler für eine Taste
4
5
void setup() 
6
{
7
  pinMode( PIN_BUTTON, INPUT_PULLUP );
8
}
9
10
void loop() 
11
{
12
  // Hier was anderes machen
13
  // ...
14
15
  // Funktion für die Taste aufrufen
16
  loopButton();
17
}
18
19
void loopButton()
20
{
21
  // Prüfen, ob die Taste gedrückt wurde
22
  if( digitalRead( PIN_BUTTON ) == false  )
23
  {
24
    // Ist der Entprellung-Zähler noch größer als Null, dann wieder auf Maximum setzten
25
    if ( _ButtonDebounceCounter > 0 )
26
    {
27
      _ButtonDebounceCounter = BUTTON_DEBOUNCE_COUNTER_MAX;
28
    }
29
    else
30
    {
31
      // Der Entprellungs-Zähler auf Maximum setzten
32
      _ButtonDebounceCounter = BUTTON_DEBOUNCE_COUNTER_MAX;
33
34
      // Hier eine Funktion aufrufen, die etwas erledigen muss, wenn die zu überwachende Taste gedrückt wurde.
35
      // ...
36
    }
37
  }
38
  else
39
  {
40
    // Ist der Entprellungs-Zähler noch größer als Null, dann um eine Ein kleiner machen
41
    if ( _ButtonDebounceCounter > 0 )
42
    {
43
      _ButtonDebounceCounter--;
44
    }
45
  }
46
}

Wenn z.B. das Los-lassen auch erfasst werden soll, dann kann man die 
letzten stellen ein wenig verändern:
1
    // Ist der Entprellungs-Zähler noch größer als Eins, dann um eine Ein kleiner machen
2
    if ( _ButtonDebounceCounter > 1 )
3
    {
4
      _ButtonDebounceCounter--;
5
    }
6
    // Ist der Entprellungs-Zähler gleich Eins, dann um eine Ein kleiner machen und das Los-Lassen der Taste "verarbeiten"
7
    if ( _ButtonDebounceCounter == 1 )
8
    {
9
      _ButtonDebounceCounter--;
10
      // Hier etwas mit dem Ereignis "Los-Lassen" der Taste etwas unternehmen
11
      // ..
12
    }

Die Funktion kann ein wenig angepasst werden, wenn man mehrere Tasten 
entprellen muss. Z.B. so
1
#define PIN_BUTTON_A 12                   // Pin : Taste A, die entprellt werden soll
2
#define PIN_BUTTON_B 11                   // Pin : Taste B, die entprellt werden soll
3
#define BUTTON_DEBOUNCE_COUNTER_MAX 20    // Max. Wert für den Zähler, der zum entprellen von einem Taster verwendet verden kann.
4
int _ButtonDebounceCounter[2];            // Auflistung mit Entprellungs-Zählern 
5
void setup() 
6
{
7
  pinMode( PIN_BUTTON_A, INPUT_PULLUP );
8
  pinMode( PIN_BUTTON_B, INPUT_PULLUP );
9
}
10
void loop() 
11
{
12
  // Hier was anderes machen
13
  // ...
14
  // Aufruf für die Taste A und die Taste B
15
  loopButton( PIN_BUTTON, 0 );
16
  loopButton( PIN_BUTTON, 1 );
17
}
18
void loopButton( int pPin, int pCounter )
19
{
20
  // Prüfen, ob die Taste gedrückt wurde
21
  if( digitalRead( pPin ) == false  )
22
  {
23
    // Ist der Entprellung-Zähler noch größer als Null, dann wieder auf Maximum setzten
24
    if ( _ButtonDebounceCounter[ pCounter ] > 0 )
25
    {
26
      _ButtonDebounceCounter[ pCounter ] = BUTTON_DEBOUNCE_COUNTER_MAX;
27
    }
28
    else
29
    {
30
      // Der Entprellungs-Zähler auf Maximum setzten
31
      _ButtonDebounceCounter[ pCounter ] = BUTTON_DEBOUNCE_COUNTER_MAX;
32
      
33
      // Hier eine Aktion für den zu überwachten Pin aufrufen
34
      ButtonAction( pPin );
35
    }
36
  }
37
  else
38
  {
39
    // Ist der Entprellungs-Zähler noch größer als Null, dann um eine Ein kleiner machen
40
    if ( _ButtonDebounceCounter[ pCounter ] > 0 )
41
    {
42
      _ButtonDebounceCounter[ pCounter ]--;
43
    }
44
  }
45
}
46
47
void ButtonAction( int pPin )
48
{
49
  switch ( pPin )
50
  {
51
  }
52
}

von MCUA (Gast)


Lesenswert?

> dass eine Funktion ständig aufgerufen wird,
Was heisst hier ständig?

von Alter xp Rechner (Gast)


Lesenswert?

Oh Gott, verschone uns vor solchen ....

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Valeri D. schrieb:
> dass eine einfachste Form, nicht dabei war. Ich würde sie
> Entprellungs-Zähler nennen.
Die Variante von Peda ist ein 8 Bit breiter 2-Bit-Zähler. Und die 
tägliche Erfahrung zeigt, dass mehr als 4 Zählschritte bei brauchbar 
gewählten Rahmenbedingungen (sinnvolle Abtastintetvalle) nicht nötig 
sind... 😉

: Bearbeitet durch Moderator
von Veit D. (devil-elec)


Lesenswert?

Hallo,

das ist mir auch alles etwas zu viel des Guten.

Die einfachste Entprellung ist die, wenn man zum Bsp. seine 
Taster-Eingänge nur sturr aller 30ms (20-40ms) abfragt.

Peters Methode fragt aller kurzen x ms den Taster ab. Erst wenn das 
gelesene Signal 4x hintereinander gleich ist, gilt der Taster als 
gedrückt bzw. nicht gedrückt. Je nach Signalwechsel. Damit sollen 
Störungen nicht als Tastendruck gewertet werden.

von Val D. (valeri_d)


Lesenswert?

Einverstanden, dass von mir vorgeschlagener Code in der c-Form an den 
von Nur-Eine-Taste-Beispiel von peda ähnlich klingen mag. Und ja, dass 
der Counter viel kleiner sein kann, nehme ich auch mit.

von Val D. (valeri_d)


Lesenswert?

Ohne Interupt, ist nur möglich den Zustand der Taste festzustellen, wenn 
man sie irgendwo im Code "ständig" abfragt. Das wurde unter dem 
"ständig" gemeint. Und in Arduino-c ist dafür die richtige Stelle die 
loop-Funktion, wo man das Abtasten einer Taste "auslagert" in eine 
Funktion, die immer wieder aufgerufen wird. Habe ich deine Frage 
beantwortet?

von Manfred (Gast)


Lesenswert?

Veit D. schrieb:
> Die einfachste Entprellung ist die, wenn man zum Bsp. seine
> Taster-Eingänge nur sturr aller 30ms (20-40ms) abfragt.

Es kommt drauf an, wie zeitkritisch man unterwegs ist. Ich laufe in 
meiner Hauptschleife herum, frage Timer für die Blinkeled ab, hole einen 
Meßwert, korrigiere meinen D/A-Wert oder sonstwas. Ich habe keine 
Ahnung, wie lange die Hauptschleife dauert, in der gucke ich auch auf 
meine Taster.

Jetzt erlaube ich mir einfach, blockierend zu arbeiten: Wenn Taste 
erkannt, gehe zu Tastenabfrage. Dort 20ms Pause, Taste nochmal fragen, 
entweder raus (hat gepfurzt) oder in die Abarbeitung der Tastenfunktion. 
Wer ist so kritisch unterwegs, sich das nicht erlauben zu können?

von Nop (Gast)


Lesenswert?

Valeri D. schrieb:
> Ohne Interupt, ist nur möglich den Zustand der Taste
> festzustellen, wenn man sie irgendwo im Code "ständig" abfragt.

Das ist designtechnisch völliger Pfusch, deswegen macht man so einen 
Murks nicht. Jeder Controller hat Timer-Interrupts, auch Arduinos.

von Val D. (valeri_d)


Lesenswert?

Ein wenig Konstruktives schadet keiner normaler Diskussion. Denn das 
Letztere hilft uns, und anderen, die das lesen werden.

von Joachim B. (jar)


Lesenswert?

Valeri D. schrieb:
> Ohne Interupt, ist nur möglich den Zustand der Taste festzustellen, wenn
> man sie irgendwo im Code "ständig" abfragt.

oft wird eh der Timer IRQ genutzt,
bei IRMP
bei PeDa für die Tastenabfrage

Ich nutze beides und zähle die Aufrufe, bei Timer mit 10ms zähle ich bis 
25 = 250 ms und aktualisiere das LCD denn schneller kann man eh nicht 
ablesen, kommt noch IRMP dazu zähle ich entsprechend mehr um weitere 
Aktionen auszulösen, ist doch einfach.

Ob das LCD etwas später aktualisiert wird im ms oder µs Bereich ist doch 
auch fast egal und in den Pausen zwischen 2 IRQ ist das dann auch 
erledigt.

von Val D. (valeri_d)


Lesenswert?

einverstanden. in einfachen Beispielen kann man sich ein delay() 
erlauben. In komplexeren Programmen niemals.

von Teo (Gast)


Lesenswert?

Lothar M. schrieb:
> Die Variante von Peda ist ein 8 Bit breiter 2-Bit-Zähler. Und die
> tägliche Erfahrung zeigt, dass mehr als 4 Zählschritte bei brauchbar
> gewählten Rahmenbedingungen (sinnvolle Abtastintetvalle) nicht nötig
> sind... 😉

Och, mich interessiert durch aus, wie lange schon so ne Taste gedrückt 
wurde. Ich mach allerdings auch das, was die meisten von euch hassen 
(ich eigentlich auch:), ich spare wo immer es geht, Tasten ein und 
man(n) "darf" sich bei mir über zeitlich mehrfach belegte "erfreuen" 
(wann losgelassen ist da uninteressant, ich Deckel den Wert einfach).


Valeri D. schrieb:
> Bei den Software-basierten stellte ich fest, dass eine einfachste Form,
> nicht dabei war. Ich würde sie Entprellungs-Zähler nennen. Diese Methode

Und du glaubs, das seit den letzten ~100j da noch keiner drauf gekommen 
ist?!
Wenns im Artikel wirklich fehlen sollte, liegts sicher am zu geringem 
Posingfaktor.... :/

von Val D. (valeri_d)


Lesenswert?

Entprellen kann man nicht nur eine Taste, sondern auch eine "Aktion", 
die etwas längere Zeit benötigt. Z.B. bei dem Entfernungs-Messer oder 
Bewegungsmelder. Wenn diese z.B. als "Trigger" verwendet werden, dann 
soll man ihre AN/AUS auch irgendwie umsetzten. Daher - das Beispiel aus 
dem Beitrag soll illustrieren, dass es universell verwendet werden kann, 
egal ob es sich um die richtigen Taster handelt oder nicht.

von Val D. (valeri_d)


Lesenswert?

Tatsächlich habe ich viele Beiträge angeschaut. Viele, aber nicht alle. 
Und in vielen, die ich gesehen habe, waren Lösungen, die ich ein wenig 
nicht praxis-tauglich einstufte. Besonders, die ein delay() 
beinhalteten. Daher, du hast Recht, eine Entdeckung habe ich auf keinen 
Fall damit gemacht. ich habe nur etwas zusammengefasst, was einem 
Anderem evtl. hilfreich sein kann.

von Val D. (valeri_d)


Lesenswert?

Teo schrieb:
> Och, mich interessiert durch aus, wie lange schon so ne Taste gedrückt
> wurde. Ich mach allerdings auch das, was die meisten von euch hassen
> (ich eigentlich auch:), ich spare wo immer es geht, Tasten ein und
> man(n) "darf" sich bei mir über zeitlich mehrfach belegte "erfreuen"
> (wann losgelassen ist da uninteressant, ich Deckel den Wert einfach).
>
Vielen Dank für diesen Hinweis. Tatsächlich kann man doch auf die 
ähnliche Art und Weise solche Sachen, wie 2sek oder 4sek etwa gedruckt 
abfangen. Jedoch muss man dann die Aktion nicht beim Niederdrücken 
auslösen, sondern beim Niederdrücken merken, bis wohin man gekommen ist, 
und beim Los-Lassen die entsprechende Aktion aufrufen. Danke sehr für 
die Idee.

: Bearbeitet durch User
von Teo (Gast)


Lesenswert?

Valeri D. schrieb:
> Jedoch muss man dann die Aktion nicht beim Niederdrücken
> auslösen, sondern beim Niederdrücken merken, bis wohin man gekommen ist,
> und beim Los-Lassen die entsprechende Aktion aufrufen.

Überlass aber das "Merken", der Zustandsmaschine die das Menü steuert.
Also "Augen auf und rechtzeitig loslassen... Verpasst? Macht nix, des 
kommt wieder..." ;)
Kritisches wird eh nie direkt ausgelöst, unkritisches kann meist auch 
kurzzeitig aktiviert werden (zB: Alarmfunktion on/off...), oder es muss 
halt ans Ende der Kette, bzw. sollte das Ganze natürlich wohlüberlegt 
gestaltet werden.
Ab und an wird es nötig, zu überprüfen ob die Taste bereits gerückt ist 
und diese Funktion noch nicht zur Verfügung steht("ausgelöst wird").
Mir wirklich explizit merken, wievielte Ticks/ms... die Taste nun 
gedrückt wurde, musst ich mir noch nie!

von Einer K. (Gast)


Lesenswert?

Ich muss gestehen, dass ich nicht sehe, wie dein "Prinzip" entprellt.
Ok, es zählt....
Aber...
Mir fehlt da ein Zeitraster.

Der eine oder die andere würde einen Timer Interrupt daher nehmen.
Wobei es in der Arduinowelt schon die millis() gibt, welche man dafür 
nutzen kann.

Die Definition einer Entprellerinstanz würde bei mir in etwa so 
aussehen:
1
EntprellTimer    entprell { 20_ms};
Dort ist dann fixiert, dass eine Taste min 20ms gedrückt sein muss, 
damit der Druck als solches "registriert" wird.
Ebenso, beim loslassen, auch 20ms

Wichtig ist natürlich, dass der Entpreller in der Zeit auch ein paar mal 
dran kommt, damit er seinen Job tun kann.
Halt das klassische pollen.

von Val D. (valeri_d)


Lesenswert?

Eventuell schlägst du hier was anderes vor. Ein Entprellen ist dafür da, 
diese aufeinander kommende AN/AUS "auszublenden" und als eine Aktion 
wahrzunehmen. D.h. eine Aktion wird initiiert, jedoch möchte man es 
unterlassen sehr viele Zustands-Änderungen zu zulassen. Das, was du 
ansprichst - geht mehr in die Richtung "Zufällige Tastendrucks 
vermeiden". Obwohl es sich ähnlich anhört, sind es unterschiedlichen 
Ansätze. Danke jedoch für deine Frage, denn auch sie lässt sich in das 
Beispiel von mir einfach integrieren.

von Teo (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:
> Wichtig ist natürlich, dass der Entpreller in der Zeit auch ein paar mal
> dran kommt, damit er seinen Job tun kann.

Nö, du verwechselst Endprellen mit Entstören!
Nehmen wir mal an, das Prellen eines Taster gehöre zu seiner normalen 
Funktion (was es natürlich auch tut!) und es sicherlich nicht zu seinen 
Aufgaben gehört, nur 1-20ms gedrückt zu werden. Es muss also nur 
verhindert werden, das eine Funktion mehrfach ausgelöst wird. Es kann 
also sofort reagiert werden, ohne_ das auf eine _Bestätigung 
gewartet wird.
Nur eine Störung von Außen, was ein 1-20ms gedrückter Taster im 
Normalfall natürlich auch wäre, würde so natürlich als regulärer 
Tastendruck erkannt werden.

von Val D. (valeri_d)


Lesenswert?

Gut erklärt. Danke.

von Einer K. (Gast)


Lesenswert?

Teo schrieb:
> Es kann
> also sofort reagiert werden, ohne_ das auf eine _Bestätigung
> gewartet wird.
> Nur eine Störung von Außen, was ein 1-20ms gedrückter Taster im
> Normalfall natürlich auch wäre, würde so natürlich als regulärer
> Tastendruck erkannt werden.
Prächtig!
Nenne es entstören.. ist mir wurscht.
Mir kam es in Hauptsache auf das Zeitfenster an, das fehlt mir beim 
Valeri

von Nop (Gast)


Lesenswert?

Valeri D. schrieb:
> Ein wenig Konstruktives schadet keiner normaler Diskussion. Denn
> das Letztere hilft uns, und anderen, die das lesen werden.

Der Hinweis, daß sowas völliger Murks ist, ist konstruktiv. Es gibt nur 
genau einen Grund, wieso man dafür keinen Timer-Interrupt nimmt und 
stattdessen pollt: daß man keine Ahnung hat, wie man das richtig macht. 
Dann ist die konstruktive Lösung, seine Zeit in etwas Fortbildung statt 
in Murks zu investieren.

von Peter D. (peda)


Lesenswert?

Die Interruptlösung hat den Vorteil, daß die Flanke gemerkt wird und 
somit das Main auch mal längere Tasks ausführen darf. Das Main kann das 
Ereignisbit auswerten, auch wenn die Taste schon wieder losgelassen 
wurde.
Leider denken viele Programmierer nicht daran und auch professionelle 
Geräte verlieren gerne mal Tastendrücke, was für den Benutzer sehr 
ärgerlich ist.

von Val D. (valeri_d)


Lesenswert?

Nop schrieb
>
> Der Hinweis, daß sowas völliger Murks ist, ist konstruktiv. Es gibt nur
> genau einen Grund, wieso man dafür keinen Timer-Interrupt nimmt und
> stattdessen pollt: daß man keine Ahnung hat, wie man das richtig macht.
> Dann ist die konstruktive Lösung, seine Zeit in etwas Fortbildung statt
> in Murks zu investieren.

Wie schwierig ist es, als alles-wissende auf die "keine Ahnung habenden" 
runter zu schauen?
Die Programmierung lebt davon, dass zum gleichen Ergebnis man auf 
unterschiedliche Art und Weise kommen kann. Es gibt nicht richtig oder 
falsch, sondern was optimal oder weniger optimal zu einer Situation 
passt. Und apropos - Fortbildung. Ich habe das schon längst hinter mir. 
Und ich habe damit zu tun. Ich kann mit deiner Bewertung meines Codes 
leben. Die Anmeldungen für IT-.Themen-Studiumgänge gehen runter. Leider. 
Und, kann es sein, dass manche Anzeichen von Interesse zu diesem Thema 
auf so eine Art erloschen werden können, wenn diese als "keine Ahnung 
haben" eingestuft werden? Doch die Diskussion darüber ist evtl. in 
anderen Foren besser platziert, da es nicht mit der Technik zu tun hat.

von Erich (Gast)


Lesenswert?


von Georg (Gast)


Lesenswert?

Valeri D. schrieb:
> was optimal oder weniger optimal zu einer Situation
> passt.

Für das Pollen einer Taste in main ist "weniger optimal" ein 
Euphemismus, das ist einfach nur Murks.

Valeri D. schrieb:
> Fortbildung. Ich habe das schon längst hinter mir.

Offensichtlich nicht erfolgreich. Das Softwarenentprellen ist schon so 
unendlich oft besprochen worden dass niemand mehr eine Ausrede hat, 
nicht die bewährten Lösungen zu verwenden.

Georg

von Martin V. (oldmax)


Lesenswert?

Hi
Nop schrieb:
> Der Hinweis, daß sowas völliger Murks ist, ist konstruktiv. Es gibt nur
> genau einen Grund, wieso man dafür keinen Timer-Interrupt nimmt und
> stattdessen pollt: daß man keine Ahnung hat, wie man das richtig macht.
> Dann ist die konstruktive Lösung, seine Zeit in etwas Fortbildung statt
> in Murks zu investieren.

Nun, keine Ahnung, wieviel Ahnung bei diesem Beitrag vorhanden ist, aber 
es ist im Kern egal, ob eine Taste im Polling oder Zeitinterrupt 
entprellt wird. Wichtig ist lediglich das Wissen um die Zykluszeit eines 
Programms. Es ist die Rede von zeitkritischen Eingabesignalen. Nun, 
mechanische Kontakte, und das sind die, die entprellt werden müssen, 
liegen wohl eher im unkritische Zeitfenster, das mit Pollen locker 
abgefragt werden kann.
1
;------------------  Entprellen der Eingänge ----------------------------
2
;********************************************************************
3
;*prüfen, ob Signale der Eingänge stabil sind oder noch prellen      *
4
;********************************************************************
5
IO_Debounce:        ; Schalter und Taster entprellen
6
  LDS  R16, Taster_1_Old  ; alten Status der laden
7
  LDS   R17, Taster_1_New  ; neuen Status der laden
8
  EOR  R16, R17    ; Ergebnis 0 wenn gleich 
9
  STS  Taster_1_Old, R17  ; neuen Status ablegen
10
  BREQ  Chk_Deb_Time_1    ; Sprung, wenn gleich, Zeit prüfen
11
;----------  Überwachungszeit 1. Tastervariable  hochsetzen  ----------
12
  LDI  R16, 5      ; Überwachungszeit setzen
13
  STS  Debounce_Time_1, R16  ; und ablegen
14
  RJMP  Chk_T9      ; nächste Prüfung 2.IO-Ebene
15
Chk_Deb_Time_1:        ; Zeit abgelaufen, Eingänge gültig
16
  LDS  R16, Debounce_Time_1  ; Überwachungszeit laden
17
  CPI  R16, 0      ; prüfen, ob Inhalt schon 0
18
  BREQ  Chk_T9      ; ja, weiter Prüfung 2.IO-Ebene
19
  DEC  R16
20
  STS  Debounce_Time_1, R16  ; herunterzählen
21
  CPI  R16, 0
22
  BRNE  Chk_T9      ; nicht 0, Prüfung 2.IO-Ebene
23
  STS  Taster_1_Akt, R17  ; Tasterstatus gültig
24
;--------------  Eingänge 2. Tastervariable  -------------------------
25
ChK_T9:
26
  LDS  R16, Taster_2_Old  ; alten Status laden
27
  LDS   R17, Taster_2_New  ; neuen Status laden
28
  EOR  R16, R17    ; Ergebnis 0 wenn gleich
29
  STS  Taster_2_Old, R17  ; neuen Status ablegen
30
  BREQ  Chk_Deb_Time_2    ; Sprung, wenn gleich, Zeit prüfen
31
;---------  Überwachungszeit 2. Tastervariable  hochsetzen  ------------
32
  LDI  R16, 5      ; Überwachungszeit setzen
33
  STS  Debounce_Time_2, R16  ; und ablegen
34
  RJMP  End_IO_Debounce    ; beenden Prellzeitüberwachung
35
Chk_Deb_Time_2:        ; Zeit abgelaufen, Eingänge gültig
36
  LDS  R16, Debounce_Time_2  ; Überwachungszeit laden
37
  CPI  R16, 0      ; prüfen, ob Inhalt schon 0
38
  BREQ  End_IO_Debounce    ; beenden Prellzeitüberwachung
39
  DEC  R16
40
  STS  Debounce_Time_2, R16  ; herunterzählen
41
  CPI  R16, 0
42
  BRNE  End_IO_Debounce    ; nich 0 dann Ende
43
   STS  Taster_2_Akt, R17  ; Tasterstatus gültig
44
End_IO_Debounce:
45
RET 
46
;----------------------------------------------------------------------
Gut, ist jetzt nicht C, aber sollte trotzdem nachvollziehbar sein. Kennt 
man nun die Zykluszeit seines Programmes, dann kann diese Routine 
durchaus in der Main_Loop aufgerufen werden. Werden benutzte Register 
gesichert, geht das natürlich auch mit einem festen Zeitintervall aus 
einer Timer-ISR.
Bei mir sind die Eingänge noch aus einer Tastermatrix zusammengebastelt, 
also auch da gibt es keine Probleme.
Kommen wir zu Zeitkritischen Signalen. Könnte mir vorstellen, das 
Reed-Kontakte da möglicherweise in Frage kommen. Da macht das Prinzip 
von zwei leicht versetzten Eingängen evtl. Sinn. Erster Eingang 
Signalwechsel schaltet ein Bit ein, zweiter Eingang Signalwechsel aus. 
Ich hab hier eine Slotcarbahn (1/48) mit einem Führungsstift von etwas 
mehr als 1 mm, der mit einer Gabellichtschranke erfaßt wird. Meine 
Zykluszeit liegt beii ca. 300 µSek und zur Zeit wird gepollt. Ob das ein 
mechanischer Kontakt auch leistet, weiß ich noch nicht, wär aber auch 
interessant, ob der Magnet vom Fahrzeug stark genug wäre, um einen unter 
der Fahrbahn liegenden Reed-Kontakt sicher zu betätigen.
Aber ich will nicht abschweifen. Auch in C sollte es einfach sein, 
prellende Eingänge auf gültigen Zustand zu prüfen und dafür braucht es 
keine 10 oder 20 mSek.
Gruß oldmax

von Val D. (valeri_d)


Lesenswert?

Georg schrieb:
> Offensichtlich nicht erfolgreich. Das Softwarenentprellen ist schon so
> unendlich oft besprochen worden dass niemand mehr eine Ausrede hat,
> nicht die bewährten Lösungen zu verwenden.

Guter Georg, schau dich um. Bei jedem Thema, auch beim Entprellen gibt 
es nicht nur eine richtige Lösung. Es gibt sehr viele. Mit ihren Vor- 
und Nachteilen. Ich habe nicht behauptet, "Die Besseresteste" gezeigt zu 
haben, sondern jeher "einfache" in der Realisierung mit doch mehr 
Anspruch, als in manchen Bücher dazu sogar steht.

Genauso wie z.B. mit Sortieren von Daten. Es gibt sehr viele mögliche 
Lösungen dafür. Und jede hat seine Da-Sein-Berechtigung. Daher würde ich 
so sagen. Solange keine konkrete Punkte im Programm angesprochen werden, 
und dieses Teil bei mir funktioniert, gehe ich von der Annahme aus, dass 
es nicht unbedingt schlecht sein kann. Würdest du doch auch von deiner 
Sache so behaupten. Nicht war?

Die Entscheidung "mit Interrupts oder nicht" hängt auch stark davon ab, 
wie komplex das eigentliche Programm und wie kompliziert die Ausführung 
von diesem Programm ist. Denn, wenn es als ein Monolith gemacht wurde, 
dann wird es auch nicht immer gewollt, irgendwo angeblich durch den 
Tastendruck unterbrochen zu sein. Viele unzählige Ausführungen sollen 
einfach und kurz sein. Und nicht zu hoffen, dass mit einem loop die 
gesamte Haussteuerung "abgetastet" und gesteuert wird, sondern in 
Paketen. in einem loop eins in der anderem loop evtl. das Andere. Daher, 
wie ein bestimmtes Problem optimal gelöst wird, hängt davon auch ab, wie 
auch der Rest des Programms aufgebaut wurde.

von Teo (Gast)


Lesenswert?

Martin V. schrieb:
> Gut, ist jetzt nicht C, aber sollte trotzdem nachvollziehbar sein. Kennt
> man nun die Zykluszeit seines Programmes, dann kann diese Routine
> durchaus in der Main_Loop aufgerufen werden.

Du glaubst doch nicht ernsthaft, das ein C Programmierer (Andere 
natürlich auch) ständig wehrend der Programmentwicklung , die 
Laufzeiten der verschiedenen Module, ständig im im Auge behält. Warum 
glaubst du wohl steigt man ua. auf eine Hochsprache um?
Ein Timer läuft quasi immer, da fällt ein Flag 
"es_sind_ungefähr_xy_ms_vergangen" einfach mal so neben bei ab. Das 
kannst du dann gerne abfragen wo du willst... Naja fast.

Valeri D. schrieb:
> "mit Interrupts oder nicht"

Sei froh, das es mittlerweile "erlaubt" ist!
Noch vor kurzem wurdest du hier noch als Teufelsanbeter verschrien, wenn 
man nur "Tasten" und "Interrupt" gemeinsam in einem Beitrag erwähnte. :D

Valeri D. schrieb:
> Die Entscheidung "mit Interrupts oder nicht" hängt auch stark davon ab,
> wie komplex das eigentliche Programm und wie kompliziert die Ausführung
> von diesem Programm ist.

Es hängt natürlich von ein paar Erwägungen ab, wie man das nun gerne 
hätte. Nur DAMIT hat das mal so garnichts zu tun! :)
zB: Wenn ich ein µC aufwecken muss, mach ich da natürlich keine 
Extrawurst draus und stell danach auf Polling um....
Beschäftige dich mal mit Zustandsmaschinen!

Valeri D. schrieb:
> Es gibt sehr viele mögliche
> Lösungen dafür. Und jede hat seine Da-Sein-Berechtigung. Daher würde ich
> so sagen. Solange keine konkrete Punkte im Programm angesprochen werden,
> und dieses Teil bei mir funktioniert, gehe ich von der Annahme aus, dass
> es nicht unbedingt schlecht sein kann.

Oje und wie schei... das sein kann! :D

von Peter D. (peda)


Lesenswert?

Martin V. schrieb:
> Kennt
> man nun die Zykluszeit seines Programmes, dann kann diese Routine
> durchaus in der Main_Loop aufgerufen werden.

Nur ist in der Regel die Durchlaufzeit der Mainloop keine Konstante, 
sondern in einem weiten Bereich schwankend, abhängig von den gerade 
auszuführenden Tasks. Daher ist die Mainloop der denkbar ungünstigste 
Platz.
Ein Timerinterrupt ist dagegen der ideale Platz für eine konstante 
Zykluszeit.

Es ist immer günstig, wenn die einzelnen Funktionen möglichst unabhängig 
voneinander sind und möglichst wenig Seiteneffekte haben. Dann läst sich 
der Code gut testen, gut warten und leicht erweitern.
Gerade das Erweitern ist der große Vorteil von Software und den sollte 
man nicht verspielen, indem man alles als einen großen unteilbaren 
Monolithen programmiert.

von Martin V. (oldmax)


Lesenswert?

Hi
Man glaubt es manchmal kaum, aber warum wollt ihr mich belehren?
Teo schrieb:
> Du glaubst doch nicht ernsthaft, das ein C Programmierer (Andere
> natürlich auch) ständig wehrend der Programmentwicklung , die
> Laufzeiten der verschiedenen Module, ständig im im Auge behält. Warum
> glaubst du wohl steigt man ua. auf eine Hochsprache um?
> Ein Timer läuft quasi immer, da fällt ein Flag

Auch das ist mir nix neues

Peter D. schrieb:
> Nur ist in der Regel die Durchlaufzeit der Mainloop keine Konstante,
> sondern in einem weiten Bereich schwankend, abhängig von den gerade
> auszuführenden Tasks. Daher ist die Mainloop der denkbar ungünstigste
> Platz.
> Ein Timerinterrupt ist dagegen der ideale Platz für eine konstante
> Zykluszeit.

Lest doch einfach mal, was ich geschrieben hab:

Martin V. schrieb:
> Kennt
> man nun die Zykluszeit seines Programmes, dann kann diese Routine
> durchaus in der Main_Loop aufgerufen werden. Werden benutzte Register
> gesichert, geht das natürlich auch mit einem festen Zeitintervall aus
> einer Timer-ISR.

Und Zykluszeit im Auge haben, hmm, also ich weiß ja nicht, wie ihr eure 
zeitkritischen Programme testet. Ich nehme mir einen Timer und leg mir 
den Zählwert, den der Timer in einem Durchlauf zählt auf Variablen. Das 
ist kein Hexenwerk und läßt mit ein klein bischen Code locker den max- 
und minimalen Wert der Zykluszeit feststellen. Aber ! natürlich ist das 
nicht immer erforderlich. Auch nicht bei Programmen in Assembler. Und 
jetzt tut mir einen Gefallen. Leiert nicht schon wieder einen 
Glaubenskrieg über die Programmiersprache an. Es ist völlig egal, wer 
wie programmiert. Ist ein Programmschnipsel gut und erklärend 
kommentiert, ist eine Übernahme in eine andere Sprache zwar nicht immer, 
aber doch meistens problemlos.
Und wenns denn den Code auch noch lesbarer macht oder ein anderer Ansatz 
ist, dann ist's doch auch gut. ich hab übrigends nirgends geschrieben, 
so muß es gemacht werden!
Gruß oldmax

von Val D. (valeri_d)


Lesenswert?

Teo schrieb:
> Oje und wie schei... das sein kann! :D

Ich kapiere nicht, wie unfreundlich man zu den Anderen unbedingt sei 
will. Als ob es ein instinktiver Drang ist, jemanden und das was er 
macht mit Fäkalien zu bewerfen..
Du hast nichts von meinen Code gesehen (abgesehen von oben), von meinen 
Konzepten, von meinen Plänen, fertigen Lösungen usw. Wirklich nichts. 
Und trotzdem findest du es nur Scheiße. In Voraus. Das o.g. Sache ist 
wichtig, jedoch wirklich winzig. Und deine Einschätzung dazu wird bei 
mir nichts ändern. Jedoch. Ich habe meine Gedanken zum Papier gebracht, 
von niemand was geklaut, keine Unwahrheiten erzählt. Ein wenig Zeit in 
das Prototype-Code investiert. Ein wenig Erklärung dazu gemacht. Man 
kann es fachlich besprechen oder widerlegen, evtl. zur Kenntnis nehmen 
oder lassen, aber nur scheiße finden und das direkt sagen - total 
unangebracht. Redest du mit anderen im echten Leben auch so? Wie 
unfreundlich muss das sich anhören. Gar nicht einladend, um miteinander 
zu sprechen.

von Einer K. (Gast)


Lesenswert?

Valeri D. schrieb:
> ein instinktiver Drang
Es ist offensichtlich ein instinktiver Drang, sich über seine eigenen 
Ideen zu definieren.

Das Resultat:
Wer dann eine dieser Ideen in Zweifel zieht, macht sich eines 
persönlichen Angriffs schuldig.
Die eigene Ansicht wird bis aufs Blut verteidigt.
Die Position des Gegenübers wird somit noch nicht mal versucht zu 
verstehen.

von Ingo Less (Gast)


Lesenswert?

Pseudo-Code:
1
ISR_1ms (){
2
 static uint8_t Debounce = 200; // 200ms
3
 
4
 if ( Debounce ) Debounce--;
5
6
 if ( Taster_gedrückt && !Debounce ({
7
    // mach was
8
    Debounce = 200;  // Taster 200ms entprellen
9
  }
10
}

Funktionier prima

von Peter D. (peda)


Lesenswert?

Valeri D. schrieb:
> Und in vielen, die ich gesehen habe, waren Lösungen, die ich ein wenig
> nicht praxis-tauglich einstufte.

Jeder darf im Internet was veröffentlichen. Über die Qualität oder den 
Erfahrungsstand des Autors sagt das nichts aus.

von grüner Däumling (Gast)


Lesenswert?

Wenn ich mir diesen Aufwand ansehe, dann komme ich zur Schlußfolgerung 
das Problem nur hardwareseitig zu lösen!

von Einer K. (Gast)


Lesenswert?

grüner Däumling schrieb:
> Wenn ich mir diesen Aufwand ansehe, dann komme ich zur
> Schlußfolgerung
> das Problem nur hardwareseitig zu lösen!
Mache Entscheidungen/Annahmen sind so dermaßen falsch, dass noch nicht 
einmal das Gegenteil richtig ist.

von Rainer V. (a_zip)


Lesenswert?

grüner Däumling schrieb:
> Wenn ich mir diesen Aufwand ansehe, dann komme ich zur Schlußfolgerung
> das Problem nur hardwareseitig zu lösen!

Der "Aufwand" kommt doch nur daduch, dass der TO seinen vermeindlich 
neuen, simplen Ansatz veröffentlicht hat. Dass dieser dann besprochen 
wird, ist doch der Sinn der Sache hier. Und natürlich die Hinweise auf 
die anerkannten "Standartlösungen". Könnte man natürlich auch alles ganz 
ohne Forum im Netz finden!
Gruß Rainer

von Philipp K. (philipp_k59)


Lesenswert?

Im Prinzip ist es doch egal wie man das macht..

Jetzt ist nur bei den Erbsenzählern die Frage.. Welche Version 
verbraucht mehr Ticks?

Zuerst ein Pin Register gegen den gesicherten letzten Registerwert 
vergleichen und dann Zeit messen wenn etwas passiert ist? 
if(Register!=Altregister) wäre doch nur 1 Tick für einen ganzen Port?

oder zuerst 2 Variablen für die Zeit prüfen und dann erst die Register 
vergleichen?

von Jack L. (Firma: ComputerCity) (zizioe)


Lesenswert?

Die Antwort ist leicht zu finden, aber ihr auf den Grund zu gehen, ist 
immer schwieriger. Sie finden vielleicht ein Stück Code und verbringen 
viel Zeit damit, es zu analysieren. Das ist der Sinn von Forumsfragen, 
zu verstehen, wo der Denkfehler liegt.

von MCUA (Gast)


Lesenswert?

> Ohne Interupt, ist nur möglich den Zustand der Taste festzustellen, wenn
> man sie irgendwo im Code "ständig" abfragt. Das wurde unter dem
> "ständig" gemeint. Und in Arduino-c ist dafür die richtige Stelle die
> loop-Funktion, wo man das Abtasten einer Taste "auslagert" in eine
> Funktion, die immer wieder aufgerufen wird. Habe ich deine Frage
> beantwortet?
Nein.
"ständig" ist nicht definiert (bzw heisst alle 1ns).

Man kann nicht alle 1ns Eingänge abfragen, aber eine CPU juckt es nicht 
im Geringsten, wenn das alle 10ms gemacht wird.
Zumal man solch Timer-Interrupt doch sowiso "im System" drin hat.
Auch 1ms wäre kein Problem (Ausnahme vielleicht bei manch sehr langsamen 
uCs).

von Einer K. (Gast)


Lesenswert?

Valeri D. schrieb:
> Und in Arduino-c ist
Arduino ist C++.
Zumindest das, was in *.ino Dateien steckt.
Also auch dein loop()

MCUA schrieb:
> Zumal man solch Timer-Interrupt doch sowiso "im System" drin hat.
Das ist wahr.
AVR Arduinos haben eine Timer0 Overflow ISR für millis() usw.
Diese ist aber nicht direkt nutzbar, ohne Eingriff in den Core.

Das mit "Zeit merken und vergleichen" mag nicht die performanteste 
Methode sein, aber sie ist in der Regel durchaus tragfähig.

von MCUA (Gast)


Lesenswert?

> Diese ist aber nicht direkt nutzbar, ohne Eingriff in den Core.
Aha. Der CPU-Core muss geändert werden.

von Einer K. (Gast)


Lesenswert?

MCUA schrieb:
> Aha. Der CPU-Core muss geändert werden.

Ach, menno...
Es ist nicht schlimm, wenn du keine Ahnung von dem Arduino Zeugs hast...
Das ist aber kein Grund sich so blöd anzustellen!

Es nennt sich vollständig: Arduino AVR Core.
Hier auch gerne ein Link dahin, damit du dich höchst persönlich kundig 
machen kannst...
https://github.com/arduino/ArduinoCore-avr

von Peter D. (peda)


Lesenswert?

Martin V. schrieb:
> Lest doch einfach mal, was ich geschrieben hab:

Habe ich.
Typisch rauscht eine Mainloop in wenigen µs durch, wenn grad nichts zu 
tun ist. Sie kann aber auch mehrere 100ms beschäftigt sein. Mit solchen 
schwankenden Zyklen kann niemand was anfangen. Tastenabfragen sollten 
immer unabhängig von der CPU-Last funktionieren.

von MCUA (Gast)


Lesenswert?

>Ach, menno...
>Es ist nicht schlimm, wenn du keine Ahnung von dem Arduino Zeugs hast...
>Das ist aber kein Grund sich so blöd anzustellen!
Ja, denkst du das war ernst gemeint?

>Hier auch gerne ein Link dahin, damit du dich höchst persönlich kundig
>machen kannst...
Spielzeug.

von Martin V. (oldmax)


Lesenswert?

Hi
Peter D. schrieb:
> Sie kann aber auch mehrere 100ms beschäftigt sein.
Na, dann ist doch ganz klar, ein Interrupt muß her. Sorry, aber viel was 
anderes hab ich doch nicht geschrieben. Einfach die Subroutine von der 
ISR aufrufen, feddisch.
Aber mal so nebenbei. in einem µC eine Zykluszeit von mehreren 100 msek, 
sehr, sehr unschön.
Aber vielleicht sind einfach meine Programme zu klein.....
Ich bin da meilenweit von weg.
gruß oldmax

von Einer K. (Gast)


Lesenswert?

MCUA schrieb:
> Ja, denkst du das war ernst gemeint?
Natürlich!
Deine bisherigen Postings sprechen dafür, dass du im "Arduino Thema" 
nicht drin bist.

MCUA schrieb:
> Spielzeug.
Und offensichtlich wohl auch nicht sein willst.


Stimmt das, oder habe ich recht?

von NichtWichtig (Gast)


Lesenswert?

Manfred schrieb:
> Veit D. schrieb:
>
> Jetzt erlaube ich mir einfach, blockierend zu arbeiten: Wenn Taste
> erkannt, gehe zu Tastenabfrage. Dort 20ms Pause, Taste nochmal fragen,
> entweder raus (hat gepfurzt) oder in die Abarbeitung der Tastenfunktion.
> Wer ist so kritisch unterwegs, sich das nicht erlauben zu können?

Ich, sowas würde mir nie und nimmer auf den µC kommen.

20ms keine anderen Aktionen machen nur weil man den Taster nochmals 
prüfen will?

Wenn die "Echtzeitanforderung" sowas zuläßt kann man das machen.

Man kann es dort aber auch geschmeidig lösen ohne zu blockieren.

von Teo (Gast)


Lesenswert?

Valeri D. schrieb:
> Teo schrieb:
>> Oje und wie schei... das sein kann! :D
>
> Ich kapiere nicht, wie unfreundlich man zu den Anderen unbedingt sei
> will. Als ob es ein instinktiver Drang ist, jemanden und das was er
> macht mit Fäkalien zu bewerfen..
> Du hast nichts von meinen Code gesehen (

KA wie du das auf DICH beziehen kannst?-O
Damit waren alle die "intelligent" programmierten Geräte gemeint, deren 
Besitz ich mich erfreuen durfte. zB. mein Korad KA300SP, das bei stark 
prellenden Drehenkoder, gerne mal von 5V auf zB. 16V springt..... Ich 
müsste mich anstrengen um das hin zu bekommen. ;DDD
Dir hab ich doch quasi Honig ums Maul geschmiert! Und sogar 
geflissentlich deinen Fauxpas mit dem "Main-Loop-Polling-Blödsinn" (<- 
siehste so geht das!;) ignoriert ! :´(

von MCUA (Gast)


Lesenswert?

>> Ja, denkst du das war ernst gemeint?
> Natürlich!
ich soll also gemeint haben, den CPU-Core zu ändern, nur um einen 
1ms-INT zu bedienen?

>Stimmt das, oder habe ich recht?
Wenn ms für dich schon schnell sind ist es dein Problem.

> Na, dann ist doch ganz klar, ein Interrupt muß her.
Sachichdoch, festes Zeitraster.

> 20ms keine anderen Aktionen machen nur weil man den Taster nochmals
> prüfen will?
verboten

von MCUA (Gast)


Lesenswert?

> Aber mal so nebenbei. in einem µC eine Zykluszeit von mehreren 100 msek,
> sehr, sehr unschön.
Hat doch keiner behauptet.

von Einer K. (Gast)


Lesenswert?

MCUA schrieb:
> Wenn ms für dich schon schnell sind ist es dein Problem.
Och, für einen typischen, von Menschen bedienten Taster, sind die 20ms 
aus meinem Beispiel schon ok...
Oder?

von MCUA (Gast)


Lesenswert?

> Och, für einen typischen, von Menschen bedienten Taster, sind die 20ms
> aus meinem Beispiel schon ok...
ich sagte ja nicht, dass das keine Stricknadelfrequenzen wären

von Nop (Gast)


Lesenswert?

Manfred schrieb:

> Jetzt erlaube ich mir einfach, blockierend zu arbeiten: Wenn Taste
> erkannt, gehe zu Tastenabfrage. Dort 20ms Pause, Taste nochmal fragen,
> entweder raus (hat gepfurzt) oder in die Abarbeitung der Tastenfunktion.

O-M-G. Und alles nur, weil man Angst vor Interrupts hat. Voll die 
Experten beim Entprellen hier.

von Veit D. (devil-elec)


Lesenswert?

NichtWichtig schrieb:
> Manfred schrieb:
>> Veit D. schrieb:
>>
>> Jetzt erlaube ich mir einfach, blockierend zu arbeiten: Wenn Taste
>> erkannt, gehe zu Tastenabfrage. Dort 20ms Pause, Taste nochmal fragen,
>> entweder raus (hat gepfurzt) oder in die Abarbeitung der Tastenfunktion.
>> Wer ist so kritisch unterwegs, sich das nicht erlauben zu können?
>
> Ich, sowas würde mir nie und nimmer auf den µC kommen.
>
> 20ms keine anderen Aktionen machen nur weil man den Taster nochmals
> prüfen will?
>
> Wenn die "Echtzeitanforderung" sowas zuläßt kann man das machen.
>
> Man kann es dort aber auch geschmeidig lösen ohne zu blockieren.

Hallo,

irgendwie wurde seltsam zitiert. Ich habe das nicht geschrieben und ich 
blockiere meine main/loop auch nicht für 20ms. Bewusst blockieren tue 
ich nur wenn es das Timing von z.Bsp. SPI Übertragungen bei machnen ICs 
erfordert. Dazu reichen dann paar Nops. Weil sich das nicht lohnt für 
paar Nops derweile was anderes machen zu lassen. Die ganze Springerei 
würde sogar länger dauern.
Taster kann man auch aller 30 oder 40ms abfragen, reicht auch dicke zu. 
Bei mir sind 30ms "Standard".  ;-)

von Nörgler (Gast)


Lesenswert?

Die Danegger Methode ist einfach nur schlecht beschrieben und erklärt. 
Der Code praktisch ohne Kommentare. Der Artikel bedarf einer 
Überarbeitung. Dann werden hoffentlich die ewigen 
Tasterentprelldiskussionen verebben.

von Name: (Gast)


Lesenswert?

Georg schrieb:
> Für das Pollen einer Taste in main ist "weniger optimal" ein
> Euphemismus, das ist einfach nur Murks.

Im main schon, aber in einem Timerinterrupt ist es die einfachste 
Lösung.

Mein Arbeitgeber baut Geräte für das gewerbliche Umfeld. Die haben 
Tasten, logischerweise.
Und alle Tasten werden einfach nur in einem Timerinterrupt in einem 10 
oder 20ms-Raster abgefragt.

Das funktioniert problemlos. Das Konzept ist einfach, ich nutze es bei 
allen Projekten.

Der Vorteil von Polling in dieser Form ist außerdem, dass der 
CPU-Verbrauch absolut deterministisch ist. Keine bösen Überraschungen 
bei EMV und dergleichen. Und Entprellung ist damit auch gleich gelöst.

von Nörgler (Gast)


Lesenswert?

Name: schrieb:
> Mein Arbeitgeber baut Geräte für das gewerbliche Umfeld. Die haben
> Tasten, logischerweise.
> Und alle Tasten werden einfach nur in einem Timerinterrupt in einem 10
> oder 20ms-Raster abgefragt.
>
> Das funktioniert problemlos. Das Konzept ist einfach, ich nutze es bei
> allen Projekten.

Hört sich nach copy & paste an. Kein Wissen wie es im Detail 
funktioniert und  keine Ahnung um was es hier genau geht.

von Name: (Gast)


Lesenswert?

Nörgler schrieb:
> Hört sich nach copy & paste an. Kein Wissen wie es im Detail
> funktioniert und  keine Ahnung um was es hier genau geht.

Dann erhelle mich ;-)

von Georg (Gast)


Lesenswert?

Nörgler schrieb:
> Dann werden hoffentlich die ewigen
> Tasterentprelldiskussionen verebben.

Garantiert nicht, so wenig wie die LEDs ohne Vorwiderstand oder die 
Datenbusse ohne GND - manche sind einfach zu dumm um zu begreifen worum 
es geht, und viele wollen einfach widersprechen, um vermeintlich gut 
dazustehen als diejenigen die als einzige die Wahrheit kennen (QAnon) 
oder wenigstens um ihren Frust abzubauen. Um die eigentliche Sache geht 
es nicht.

Der TO Valeri soll halt in Gottes Namen seine schlechtestmögliche 
Version realisieren, irgendwie wird sie schon funktionieren, und da er 
kein Profi ist (hoffentlich!) schadet er niemandem damit. 
Schlimmstenfalls konstruiert er ein schlecht zu bedienendes Gerät, nicht 
unser Problem.

Georg

von Dietrich L. (dietrichl)


Lesenswert?

Georg schrieb:
> Garantiert nicht, so wenig wie die LEDs ohne Vorwiderstand oder die
> ...
>
> Der TO Valeri soll halt in Gottes Namen seine schlechtestmögliche
> Version realisieren, ...

Georg, sehr schön beschrieben! Da kann ich dir nur zustimmen!

von Martin V. (oldmax)


Lesenswert?

Hi
MCUA schrieb:
>> Aber mal so nebenbei. in einem µC eine Zykluszeit von mehreren 100 msek,
>> sehr, sehr unschön.
> Hat doch keiner behauptet.

Na ja, auch wenn du an einer Leseschwäche leidest, mußt du nicht 
glauben, das ich da irgendetwas in folgenden Text interpretiere...

Peter D. schrieb:

> Typisch rauscht eine Mainloop in wenigen µs durch, wenn grad nichts zu
> tun ist. Sie kann aber auch mehrere 100ms beschäftigt sein. Mit solchen
> schwankenden Zyklen kann niemand was anfangen. Tastenabfragen sollten
> immer unabhängig von der CPU-Last funktionieren.
Übrigends mit 6x lesenswert benotet, was mir klar zeigt, das da doch 
ziemliche Profis am Rechner sitzen müssen. Für mich ist das eher 
negativ, denn wer einen Controller zu solch langen Zykluszeiten bringt, 
versteht in meinen Augen nicht wirklich was vom Programmieren. 
Wohlgemerkt, ich spreche von Zyklus- und nicht von Bearbeitungszeiten.
Ok, hier wird von ms (Millisiemens) geschrieben....
Aber das macht ihr schon in allen Beiträgen und meint (ich behaupte es 
mal) Millisekuunden (mSek)
Trotzdem, nix für ungut. Ihr seid die Profis. Ich mach mir  mit 
Assembler nur ein wenig Freizeitvergnügen für Rentner.
Also, bleibt gesund, auch wenn hier so einige gern unerkannt hinter der 
Hausecke (anonym als Gast) bleiben wollen.
Gruß oldmax

: Bearbeitet durch User
von A. S. (Gast)


Lesenswert?

Nörgler schrieb:
> Die Danegger Methode ist einfach nur schlecht beschrieben und erklärt.
> Der Code praktisch ohne Kommentare. Der Artikel bedarf einer
> Überarbeitung. Dann werden hoffentlich die ewigen
> Tasterentprelldiskussionen verebben.

Im Gegenteil. Es gibt ja nicht nur die eine entprellung: jeder hat etwas 
andere Randbedingungen und braucht daher andere Implementierungen.

Es wäre so als wolle man eine ADC-Mittelung standardisieren.

Beispiel: Die einfachste Tastenprellung kommt ohne alles aus und 
funktioniert perfekt beim glücklichen Anfänger:

Wenn Taster beim Loslassen nicht prellen (normal) und beim Drücken eine 
Aktion ausgelöst wird, die länger (>30ms) dauert (oft bei Anfängern).

Es macht auch keinen Sinn, diesen Anfängern zu sagen, wenn sie Peters 
komplexen Code nicht einbauen, dass dann alles Scheisse ist. Zumal es 
technisch noch unnötig ist (endlose Diskussionen bei mir geht's ohne)

von Val D. (valeri_d)


Lesenswert?

Georg schrieb:
> Der TO Valeri soll halt in Gottes Namen seine schlechtestmögliche
> Version realisieren, irgendwie wird sie schon funktionieren, und da er
> kein Profi ist (hoffentlich!) schadet er niemandem damit.
> Schlimmstenfalls konstruiert er ein schlecht zu bedienendes Gerät, nicht
> unser Problem.

Hallo Georg,

nicht jemand im Vergleich zwischen unseren Ergebnissen, sondern du 
selbst - du hast auf "meine Kosten" dich zum Helden gemacht. Ok. Wie 
gesagt, ich bin erwachsen genug, um nicht jedem gefallen zu müssen. Aber 
kannst du bitte ein paar Links zu irgendetwas hier geben, was du selber 
so perfekt gemacht hast (Schaltplan, Programmcode, Link zu Beiträgen 
hier im Forum usw.).
Dir schadet nicht, und ich lerne von einem Profi was. Das soll doch 
möglich sein, damit deine Aussage nicht eine leere Luft ist. Ich bin neu 
hier auf dem Forum, daher habe ich deine Laufbahn und alle deine 
Profi-Lösungen noch nicht wahrnehmen können. Kann aber nachholen.

Danke

von Axel S. (a-za-z0-9)


Lesenswert?

Martin V. schrieb:
> Übrigends mit 6x lesenswert benotet, was mir klar zeigt, das da doch
> ziemliche Profis am Rechner sitzen müssen.

Ironietags vergessen?

> Für mich ist das eher
> negativ, denn wer einen Controller zu solch langen Zykluszeiten bringt,
> versteht in meinen Augen nicht wirklich was vom Programmieren.

Ja. Dummerweise ist genau das die Nische von Arduino. Und genau 
deswegen ist der Vorschlag besonders falsch.

Ich gehe jede Wette ein daß eine oberflächliche Google-Suche reicht, 
Arduino-Sketches zutage zu fördern, die in der loop() Funktion beliebig 
lange blockieren (z.B. beim warten auf einen Tastendruck). Oder die in 
loop() eine Endlosschleife haben. Vermutlich findet man sogar Sketches, 
die  das in der setup() Funktion fertig bringen.

Und auch sonst ist das der Unterschied zwischen einer Lösung, die 
einfach immer funktioniert und einer Lösung die nur unter speziellen 
Umständen funktioniert. Ich wüßte, welche ich nähme.

von Heiner (Gast)


Lesenswert?

Peter D. schrieb:
> Jeder darf im Internet was veröffentlichen. Über die Qualität oder den
> Erfahrungsstand des Autors sagt das nichts aus.

wie war das nochmal mit "an die eigene Nase fassen", Herr Sonnenschein?

von Joachim B. (jar)


Lesenswert?

Nörgler schrieb:
> Die Danegger Methode ist einfach nur schlecht beschrieben und erklärt.

finde ich nicht, ich kam sofort klar, komischerweise in AVR, in Arduino 
& auch auf dem ESP.

Aber gut, das mag nicht für jeden verständlich sein.

von Tastertör (Gast)


Lesenswert?

Martin V. schrieb:
> Wohlgemerkt, ich spreche von Zyklus- und nicht von Bearbeitungszeiten.
> Ok, hier wird von ms (Millisiemens) geschrieben....

Falsch.

> Aber das macht ihr schon in allen Beiträgen und meint (ich behaupte es
> mal) Millisekuunden (mSek)

Auch falsch.

ms = Millisekunde
mS = Millisiemens
mHz = Millihertz
MHz = Megahertz
Hertz != Herz
Soviel Zeit muß sein!

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

A. S. schrieb:
> wenn sie Peters
> komplexen Code nicht einbauen

Ich finde den Code gar nicht komplex. Ich habe mir mal den Spass gemacht 
und die AVR Assemblerroutine durch den alten Simulator des AVR Studio 4 
geschickt und dann ging mir das Licht auf, das das lediglich ein 'ich 
sags dreimal und dann ist es wahr' Algorithmus ist. Die konstante 
Laufzeit unabhängig von Tastenzuständen fand ich auch nützlich.
Da sich die Routine auch prima mit der Drehgeberabfrage in einer Timer 
ISR zusammenfassen lässt, ist das für mich mittlerweile die eierlegende 
Wollmilchsau fürs Frontend.

von Teo (Gast)


Lesenswert?

Martin V. schrieb:
> Peter D. schrieb:
>
>> Typisch rauscht eine Mainloop in wenigen µs durch, wenn grad nichts zu
>> tun ist. Sie kann aber auch mehrere 100ms beschäftigt sein. Mit solchen
>> schwankenden Zyklen kann niemand was anfangen. Tastenabfragen sollten
>> immer unabhängig von der CPU-Last funktionieren.
> Übrigends mit 6x lesenswert benotet, was mir klar zeigt, das da doch
> ziemliche Profis am Rechner sitzen müssen. Für mich ist das eher
> negativ, denn wer einen Controller zu solch langen Zykluszeiten bringt,
> versteht in meinen Augen nicht wirklich was vom Programmieren.

Lerne mal ein rein theoretisches, rhetorisch übertriebenes, BEISPIEL 
zu erkennst und verstehst!


A. S. schrieb:
> Wenn Taster beim Loslassen nicht prellen (normal)

Und von was träumst du Nachts?

> und beim Drücken eine
> Aktion ausgelöst wird, die länger (>30ms) dauert (oft bei Anfängern).

Das ist der selbe Blödsinn wie vom TO!

....

Sattelt mal lieber auf LEGO um, besser is dat!³

PS@TO Nein lieber TO, DICH zähle ich nicht dazu!
Den wer beim Thema "Endprellen", den Unterschied zwischen "Endprellen" 
und "Entstören" verstanden hart, ist hier für mich quasi ein Held! :)

von Georg (Gast)


Lesenswert?

Valeri D. schrieb:
> Aber
> kannst du bitte ein paar Links zu irgendetwas hier geben, was du selber
> so perfekt gemacht hast

Wieso glaubst du, dass dadurch deine Methode besser wird? Murks bleibt 
Murks, dazu braucht man keinen Vergleich. Ausserdem bist du sowieso 100% 
beratungsresistent.

Aber fairerweise muss man zugeben, dass du ja keine Frage gestellt hast 
und auch nicht um Hilfe gebeten. Der ganze Thread ist nur ein 
Missverständnis von Anfang an, und da du auf gar keinen Fall irgendetwas 
begreifen willst was du nicht selbst ausgedacht hast wäre das Ergebnis 
jetzt genauso als wenn überhaupt niemand geantwortet hätte. Nur Zeit- 
und Arbeitsverschwendung, niemand hat was dazugelernt, und wolltest das 
ja von Anfang an nicht.

Georg

von Teo (Gast)


Lesenswert?

Georg schrieb:
> Ausserdem bist du sowieso 100%
> beratungsresistent.

Ach was, DER tut nur so.... :D

von Joachim B. (jar)


Lesenswert?

Matthias S. schrieb:
> Da sich die Routine auch prima mit der Drehgeberabfrage in einer Timer
> ISR zusammenfassen lässt

dito, auch das klappt unter AVR Studio und Arduino! (bei mir 
ATmega1284p!)

Das klappt sogar mit der Drehencoder Routine kombiniert mit Taste zur 
Menüauswahl am Nokia 5110 Display

von Martin V. (oldmax)


Lesenswert?

Hi
Axel S. schrieb:
> Ironietags vergessen?
Ja, ich habs nicht so mit Zeichen, die mit Punkten und Klammern irgend 
einen Smilie anzeigen und auch die Ironietags hab ich nicht im Kopf. 
Aber ich bin da schon richtig verstanden worden, oder?

Tastertör schrieb:

>falsch
Nun ja, Ansichtssache. Bei mir ist eine Zykluszeit die Zeitspanne in 
einer Programmschleife, eine Bearbeitungszeit z.B. die Zeit, ein 
Datenmenge zu versenden. Durch Nutzung von ISR kann das auch Byteweise 
geschehen, ohne den Zyklus großartig zu verlängern. Aber das ist jetzt 
vielleicht Ansichtssache und tut auch nicht wirklich zum Thema 
beitragen.

> Auch falsch.
>
> ms = Millisekunde
> mS = Millisiemens
> mHz = Millihertz
> MHz = Megahertz
> Hertz != Herz
> Soviel Zeit muß sein!

Gut zu wissen, habs jetzt gelernt und gemerkt. Sorry und nix für ungut, 
das mir das anders im Kopf vorlag. Wollt ja nur mitteilen, das ich auf 
die mehreren 100ms eingegangen bin und daß das keine Behauptung, sondern 
Bestandteil eines Beitrags war.

Teo schrieb:
> Lerne mal ein rein theoretisches, rhetorisch übertriebenes, BEISPIEL
> zu erkennst und verstehst!

JA, mir ist bekannt, das ein Programm auf den "worst case" geprüft 
werden muß, um allen Anforderungen sicher zu genügen. Warum da nicht mit 
mehreren 100 ms Zykluszeit rechnen... Auch wenns da rein theoretisches, 
rhetorisch übertriebenes ist, machts ja Sinn. Aber wär da nicht auch mal 
ne Stunde drin? Egal, bleibt trotzdem gesund
Gruß oldmax

: Bearbeitet durch User
von Val D. (valeri_d)


Lesenswert?

Peter D. schrieb:
> Martin V. schrieb:
>> Lest doch einfach mal, was ich geschrieben hab:
>
> Habe ich.
> Typisch rauscht eine Mainloop in wenigen µs durch, wenn grad nichts zu
> tun ist. Sie kann aber auch mehrere 100ms beschäftigt sein. Mit solchen
> schwankenden Zyklen kann niemand was anfangen. Tastenabfragen sollten
> immer unabhängig von der CPU-Last funktionieren.

Ich versuche zu verstehen. Mir ist klar, dass nicht jede 
Tasten-Betätigung gleich sein kann. Wenn ich ein Reset Knopf betätige, 
ist es anders als z.B. mit einem Drehregler-Knopf durchs Menü zu gehen. 
Das Erste muss sofort bearbeitet werden, daher Interrupt ist dafür 
unabdingbar.

Aber, wenn ich durchs Menü navigiere und das auch irgendwie wiedergeben 
will - also sehen will, dann wird so oder so für diese Aktion genug 
Performance nötig sein, um es zu ermöglichen. Denn, wenn mein Programm 
diese Zeit nicht hat, die Ergebnisse meiner Eingaben zu sehen, dann 
nutzt mir es auch wenig, nur die Tasten Eingaben "richtig" zu 
separieren. Es kann meiner Meinung nach nur als Ganzes immer gesehen 
werden - welche Tasten, für welchen Zweck, was verursachen die Eingaben, 
wie sollen diese wirken usw. Und mein Beispiel war nicht als "Lösung" 
für alles vorgesehen, sondern als eine mögliche Variante für bestimmte 
Situationen.

von Peter D. (peda)


Lesenswert?

Martin V. schrieb:
> Für mich ist das eher
> negativ, denn wer einen Controller zu solch langen Zykluszeiten bringt,
> versteht in meinen Augen nicht wirklich was vom Programmieren.

Danke für die Blumen.
Niemand zwingt Dich, die Mainloop absichtlich langsam zu machen.
Trotzdem ist es sinnvoll, daß nicht gleich alles andere abkackt, wenn 
sie mal länger beschäftigt ist, z.B. wenn sie größere Blöcke in den 
EEPROM sichert, mehrere 1-wire Sensoren ausliest, Debugausgaben auf die 
UART macht, auf dem GLCD was ausgibt usw..
Man kann längere Tasks splitten, aber ein Anfänger ist froh, wenn es 
erstmal überhaupt funktioniert. Und dem Bediener sind z.B. 200ms 
Verzögerung völlig egal, wenn eine Reaktion erfolgt.

Ist gerade nichts zu tun, rauscht meine Mainloop in 1..2µs durch, was 
sich auch nicht als Entprellzeit eignet.

von Martin V. (oldmax)


Lesenswert?

Hi
Valeri D. schrieb:
> Das Erste muss sofort bearbeitet werden, daher Interrupt ist dafür
> unabdingbar.
Überleg mal, welche Information läuft schneller ab, der Druck auf einen 
Reset-Taster oder das Drehen eines Drehgebers? Die Taste wird sicherlich 
länger gedrückt, wie ein Signal vom Drehgeber ansteht. Da wär es doch 
eher Sinnvoll, den Drehgeber per ISR zu erfassen.
Kommen wir trotzdem mal zum Begriff Zeit.
Ich hab hier wie bereits erwähnt einen SlotCar Maßstab 1/48 mit einem 
Führungspin von etwas über 1 mm. In die Spuren hab ich 
Gabellichtschranken verbaut, diese prellen nicht. Trotzdem sind zwei 
kurz hintereinander. Die erste setzt ein Kontrollbit auf "0", die Zweite 
vor der Start-Ziellinie auf "1". Die Funktion ist hiernicht ganz 
unwichtig, da der Schaltimpuls bei vollem Tempo doch sehr klein sein 
muß. Rechnen wir mal:
10 km/h sind 2,8 m/s. Wenn ich den Wert nochmal durch 1000 Teile, dann 
komme ich auf 2,8mm/ms. Da der Unterbrecher der LS nur etwas mehr als 1 
mm ist, brauch ich, wenn ich den Eingang polle, eine Zykluszeit von 
weniger als 200µs, um ihn sicher zu erfassen. Und wie bereits von PeDa 
geschrieben, ist eine zykluszeit nicht fix, sondern ändert sich durch 
verschiedene Bearbeitungsschritte. Hier werde ich nicht umhin kommen, 
einen Interrupt zu benutzen, um die Signale sicher zu erfassen.
Dagegen verhalten sich deine Eingänge, um es mal zu verdeutlichen, wie 
"tagelanges Licht anlassen".
Gruß oldmax

von W.S. (Gast)


Lesenswert?

Valeri D. schrieb:
> Teo schrieb:
>> Oje und wie schei... das sein kann! :D
>
> Ich kapiere nicht, wie unfreundlich man zu den Anderen unbedingt sei
> will. Als ob es ein instinktiver Drang ist, jemanden und das was er
> macht mit Fäkalien zu bewerfen..

Einfach nicht aufregen.

Das, was du im Eröffnungspost beschrieben hast, war im Kern eigentlich 
völlig OK.
Man kann das in dürre Worte zusammenfassen:

1. beim allerersten Erkennen eines Gedrücktseins der Taste das 
Tasten-Ereignis auslösen

2. danach so lange die Taste als noch gedrückt erachten, bis daß sie für 
eine gewisse Mindestzeit sich als ungedrückt gezeigt hat

3. als eventuelle Erweiterung: wenn die Taste für eine sehr lange Zeit 
gedrückt ist, das Repetier-Ereignis auslösen und dann zurück zu Punkt 2.

Was also hat da all die anderen so unsäglich aufgeregt?

Etwa diese Formulierung: "Diese Methode besteht darin, dass eine 
Funktion ständig aufgerufen wird, die für das Tätigen einer Taste 
zuständig ist." ?

Natürlich geht das so - und besagte Funktion ist am besten die ISR der 
firmware-internen System-Uhr. Die kommt in vorhersehbaren Intervallen 
und damit hat man auch überschaubare Zeit-Verhältnisse.

Und ja, man KANN auch in der Grundschleife in main() entprellen. 
Möglich ist das und sinnvoll ist es auch, wenn die Firmware keinerlei 
Systemuhr enthält (aus was für Gründen auch immer).

Also: separiert ihr alle mal die Basis-Ideen von eventuell (oder 
vorsätzlich) falsch verstandenen Formulierungen.

W.S.

von W.S. (Gast)


Lesenswert?

Martin V. schrieb:
> Rechnen wir mal:
> 10 km/h sind 2,8 m/s. Wenn ich den Wert nochmal durch 1000 Teile, dann
> komme ich auf 2,8mm/ms. Da der Unterbrecher der LS nur etwas mehr als 1
> mm ist, brauch ich, wenn ich den Eingang polle, eine Zykluszeit von
> weniger als 200µs, um ihn sicher zu erfassen.

Ach ja, das erinnert mich stark an die Diskussionen, die ich vor Zeiten 
mit MaWin hatte: er stand extrem auf isochrones Polling - und ich stehe 
darauf, vorzugsweise hardwareseitig zu entprellen und Interrupts mit den 
derart entprellten Signalen zu benutzen.

Noch ein Wort zu Peters Entprell-Ideen: Er sieht eine Entprellung des 
Gedrücktwerdens als nötig an, weil er Störungen befürchtet. Das sehe ich 
nicht so, weil so etwas allenfalls bei sehr hochohmigen Hochziehern (bei 
den AVR's wohl nur per chipinternem Hochziehstrom) und/oder sehr langen 
Leitungen zum Taster zu befürchten ist. Dem kann man abhelfen durch 
einen passenden Widestand zum Hochziehen.

Der Nachteil von Peters Ideen ist nämlich, daß damit die Tasten spürbar 
zäh reagieren. Ich hab das durch bei einer ausreichenden Anzahl von 
Kunden. Die hauen nämlich auf die Tasten und wenn es nicht reagiert, 
dann hauen sie stärker drauf, anstatt einfach länger zu drücken. Und 
diese Lektion hab ich vor sehr langer Zeit ausreichend gelernt - Ersatz 
für durchgedroschene Frontplatten mit Folientastern ist nämlich nicht 
billig. Und deshalb bin ich seitdem absolut beratungsresistent gegenüber 
allen Leuten, die mir von irgend etwas Anderem herumfaseln, denn Ersatz 
in der Garantiezeit ist mir zu teuer und Herumdiskutieren wegen "sie 
haben falsch draufgedrückt" ruiniert das Firmenansehen.

W.S.

von A. S. (Gast)


Lesenswert?

Matthias S. schrieb:
> Ich finde den Code gar nicht komplex.

A. S. schrieb:
> diesen Anfängern

ich kann den auch lesen ohne im Debugger im Einzelschritt dadurch zu 
gehen. Und sicher gibt es kaum effizienteren Code. Ändert aber nichts 
daran, dass er komplexer ist als ein "PortA & 0x70".

Die Leute machen zum Teil erste Gehversuche in C und erstmals im µC. Und 
dann kommen wir und sagen: "Nimm dass hier" und gleichzeitig "kopier Dir 
aber nichts einfach so zusammen".

Beitrag #6585355 wurde von einem Moderator gelöscht.
von A. S. (Gast)


Lesenswert?

Teo schrieb:
> A. S. schrieb:
>> Wenn Taster beim Loslassen nicht prellen (normal)
>
> Und von was träumst du Nachts?

Dann zeig doch mal ein paar Oszi-Mitschnitte, bei welchen vielen Tastern 
das bei Dir der Fall ist. Es ist nicht immer aber bei den meisten 
meistens

Das Umschalter keine Taster sind, sollte klar sein.

Teo schrieb:
>> und beim Drücken eine
>> Aktion ausgelöst wird, die länger (>30ms) dauert (oft bei Anfängern).
>
> Das ist der selbe Blödsinn wie vom TO!
Das ist aber die Realität: Nochmal, es geht um Anfänger. Und dort es es 
durchaus üblich, auf der Stelle zu warten oder irgendeine Schleife zu 
durchlaufen. Und wenn dann ein Tastendruck erfolgt, geht es meist 
irgendwo hin, wo dann Berechnungen (sehr kurz) durchgeführt werden UND 
DANN das Display aktualisiert wird. Egal ob blockierendes Senden an den 
UART oder ans LCD.

Es bricht Dir keinen Zacken aus der Krone, wenn Du einen Anfänger darauf 
hinweist, dass es in diesem Fall hier funktioniert, dass es aber 
trotzdem nur deswegen so ist und er sich unbedingt mit 
Tastenentsprellung beschäftigen soll.

von A. S. (Gast)


Lesenswert?

W.S. schrieb:
> Noch ein Wort zu Peters Entprell-Ideen: Er sieht eine Entprellung des
> Gedrücktwerdens als nötig an, weil er Störungen befürchtet. Das sehe ich
> nicht so, weil so etwas allenfalls bei sehr hochohmigen Hochziehern (bei
> den AVR's wohl nur per chipinternem Hochziehstrom) und/oder sehr langen
> Leitungen zum Taster zu befürchten ist. Dem kann man abhelfen durch
> einen passenden Widestand zum Hochziehen.
>
> Der Nachteil von Peters Ideen ist nämlich, daß damit die Tasten spürbar
> zäh reagieren.

Das kann ich nur bestätigen. Eine HW-Störung auf der Taste kann ich 
sowieso nicht wirklich beheben, die kommt auch mehrmals, wenn sie einmal 
kommt.

Und ein Tastendruck muss auch unter 30ms erkannt werden. Wenn ich eine 
Taste 10 Mal drücken will, muss dass in 1s möglich sein. Ich kenne sogar 
eine Anwendung, wo die Kunden in der Praxis deutlich mehr Tastendrücke 
ausführen, (wenn auch nicht mehr mitzählend) um in einem Menü rasch 
vorwärts zu kommen.

Beitrag #6585388 wurde von einem Moderator gelöscht.
von Peter D. (peda)


Lesenswert?

W.S. schrieb:
> Er sieht eine Entprellung des
> Gedrücktwerdens als nötig an, weil er Störungen befürchtet.

Die sind nicht befürchtet sondern real. Z.B. wenn sich jemand 
elektrostatisch aufgeladen hat und dann in die Nähe der Taste kommt. 
Gerade im Winter (trockene Luft) ist das ein Problem. Ein niederohmiger 
Pullup hilft da nur ungenügend.

W.S. schrieb:
> Die hauen nämlich auf die Tasten und wenn es nicht reagiert,
> dann hauen sie stärker drauf

Dann probier mal, so auf ne Taste zu hauen, daß sie kürzer als 40ms 
gedrückt ist. Dazu muß man schon sehr kräftig und mit einem Werkzeug 
draufhauen.

W.S. schrieb:
> Ersatz
> für durchgedroschene Frontplatten mit Folientastern ist nämlich nicht
> billig.

Das Problem an billigen Folientastern liegt vor dem IO-Pin des MCs. Die 
schalten wirklich unzuverlässig. Sogar billige Gummitasten schalten 
besser.

: Bearbeitet durch User
von MuckyFuck (Gast)


Lesenswert?

A. S. schrieb:
> Das kann ich nur bestätigen. Eine HW-Störung auf der Taste kann ich
> sowieso nicht wirklich beheben, die kommt auch mehrmals, wenn sie einmal
> kommt.

Die ultimative Lösung hab mal bei einem speziellen HP Keyboard (als das 
noch ne "richtige" Firma war) gefunden..

Die hatten das so gemacht das die Tastenmatrix erst mal abgefragt wurde. 
Wenn dann eine Taste als gedrückt erkannt wurde (Prellzeit abgelaufen) 
haben die ein Rechtecksignal auf die X/Y Port gelegt und geschaut ob die 
Pegelwechsel 3 oder 4 mal korrekt zurück kamen. Damit sind Störungen so 
gut wie ausgeschlossen weil die Treiberimpedanz alles weg drückt.

Fand ich ein super Verfahren, funzt mit normalen IO Ports und braucht 
keinerlei zusätzliche Hardware.

von Val D. (valeri_d)


Lesenswert?

W.S. schrieb:
> Ich hab das durch bei einer ausreichenden Anzahl von
> Kunden. Die hauen nämlich auf die Tasten und wenn es nicht reagiert,
> dann hauen sie stärker drauf, anstatt einfach länger zu drücken.

Deswegen versuche ich auch zu sagen, dass das nur entprellen zu können 
nicht die Lösung des Sache sein kann. Denn in deinem Beispiel hauen die 
Kunden auf die Tasten nicht, weil die Tasten nicht funktionieren. 
Sondern, dass was sie verursachen sollen als Ganzes nicht funktioniert 
bzw. reagiert. Und dazu gehört viel mehr in Einklang zu bringen, als nur 
die Tasten-Schläge zu entprellen.

Beitrag #6585428 wurde von einem Moderator gelöscht.
von A. S. (Gast)


Lesenswert?

Peter D. schrieb:
> Dann probier mal, so auf ne Taste zu hauen, daß sie kürzer als 40ms
> gedrückt ist. Dazu muß man schon sehr kräftig und mit einem Werkzeug
> draufhauen.

Ein kompletter Tastendruck (Drücken und Loslassen) dauert 100ms. Wenn 
die Taste nicht prellt, sind Deine 30-40ms OK. Wenn die Taste prellt, 
wird es eng.

von Joachim B. (jar)


Lesenswert?

Peter D. schrieb:
> Danke für die Blumen.

nein wir danken dir für Tastenentprellung und Abfrage und für 
Drehencoder Routinen im IRQ

von Peter D. (peda)


Lesenswert?

W.S. schrieb:
> Der Nachteil von Peters Ideen ist nämlich, daß damit die Tasten spürbar
> zäh reagieren.

Die 10ms Raster bei der 4-fach Entprellung sind ja nicht in Stein 
gemeißelt, sondern nur meine ganz persönliche Erfahrung. Jeder darf die 
Zeit nach Belieben verlängern oder verkürzen. Z.B. 1ms Interrupt ergeben 
4ms Entprellzeit.
Man muß sich also nicht länger über die lahme Entprellung beklagen, 
sondern kann ganz einfach eine andere Zahl hinschreiben. Ich hätte aber 
angenommen, daß das für jeden Programmierer offensichtlich ist.

von Rainer V. (a_zip)


Lesenswert?

Peter D. schrieb:
> Ich hätte aber
> angenommen, daß das für jeden Programmierer offensichtlich ist

Die Hoffnung stirbt zuletzt...wie auch dieses Forum immer wieder 
eindrucksvoll demonstriert!
Gruß Rainer

Beitrag #6585632 wurde von einem Moderator gelöscht.
Beitrag #6585647 wurde von einem Moderator gelöscht.
Beitrag #6585836 wurde von einem Moderator gelöscht.
von Teo (Gast)


Lesenswert?

A. S. schrieb:
> Teo schrieb:
>> A. S. schrieb:
>>> Wenn Taster beim Loslassen nicht prellen (normal)
>>
>> Und von was träumst du Nachts?
>
> Dann zeig doch mal ein paar Oszi-Mitschnitte, bei welchen vielen Tastern
> das bei Dir der Fall ist. Es ist nicht immer aber bei den meisten
> meistens

Ja, das war nicht die feine Englische... Sorry (Aber dieses Thema...)
KA, interessiert mich auch nicht wirklich, denn ich hab keine Ahnung wie 
das nach einigen Jahren aussieht. Ich geh einfach mal davon aus, das sie 
prellen (werden), kost nix, schadet nich...
Ich hatte allerdings noch keinen am Oszi, der nicht prellte (OK, bin 
kein Tasten-Tester-Freak ;). Selbst diese (damals vor >25J, gibts aber 
sicher immer noch (Die ohne Elektronik!)) "Digital-Taster" die angeblich 
nicht prellten. Irgend wann taten sie es dann doch.


Peter D. schrieb:
> Ich hätte aber
> angenommen, daß das für jeden Programmierer offensichtlich ist.

Sorry, aber "Leute" die Code zum Endprellen(-stören) kopieren.....
Hättest lieber noch Luftballons mit hübschen Bildchen, dranhängen 
sollen! ;D

von W.S. (Gast)


Lesenswert?

Peter D. schrieb:
> Die sind nicht befürchtet sondern real. Z.B. wenn sich jemand
> elektrostatisch aufgeladen hat und dann in die Nähe der Taste kommt.

Nana, ich halte das für doch recht weit hergeholt - es sei denn, du 
zeigst mir mal ein Konstrukt aus Gehäuse, Frontplatte und Tasten, wo 
eine derartige Entladung tatsächlich einen falschen Tastendruck bewirkt. 
Sowas ist mir seit Jahrzehnten noch nie begegnet.

Peter D. schrieb:
> Die 10ms Raster bei der 4-fach Entprellung sind ja nicht in Stein
> gemeißelt, sondern nur meine ganz persönliche Erfahrung.

Dies sei dir gegönnt, aber in Summe 40 ms ist in der Tat ganz schön 
lahm, ich hab das wie gesagt durch. Wenn du mal sehen würdest, wie die 
Kunden, die ich so kenne, auf den Geräten herumklopfen, dann würdest du 
umdenken.

W.S.

von M. K. (sylaina)


Lesenswert?

Peter D. schrieb:
> Ich hätte aber
> angenommen, daß das für jeden Programmierer offensichtlich ist.

Zumindest für jeden mitdenkenden Programmierer ist das offensichtlich. 
Ich hatte damals deine Methode erst gefunden, nachdem ich selbst eine 
entwickelt hatte und fand die sehr interessant. Unsere Methoden sind 
recht ähnlich, ich frag nur nicht vier mal sondern nur zwei mal.

von Gerald O. (garry)


Lesenswert?

W.S. schrieb:
> Dies sei dir gegönnt, aber in Summe 40 ms ist in der Tat ganz schön
> lahm, ich hab das wie gesagt durch. Wenn du mal sehen würdest, wie die
> Kunden, die ich so kenne, auf den Geräten herumklopfen, dann würdest du
> umdenken.

Es kommt immer auch darauf an für was und für wen die Tasten gedacht 
sind. Daher ist es gut wenn man die Entprellzeit konfigurierbar macht. 
Der eine Kunde hat mehr die betagteren Herrschaften im Auge die bei der 
Eingabe auch mal zittrig sein können. Bei kurzen Entprellzeiten kommt 
man dann schnell zu unerwünschten mehrfach-Erkennungen. Der andere Kunde 
hat mehr den sportlichen reaktionsschnellen Bediener im Auge. So können 
Entprellzeiten zwischen 10ms und 10ms sinnvoll sein. Dabei auch daran 
denken, dass dies nur die Entprellzeiten sind, nicht die 
Verzögerungszeiten bis eine Reaktion des Gesamtsystems erfolgt!

Garry

von Peter D. (peda)


Lesenswert?

W.S. schrieb:
> Nana, ich halte das für doch recht weit hergeholt - es sei denn, du
> zeigst mir mal ein Konstrukt aus Gehäuse, Frontplatte und Tasten, wo
> eine derartige Entladung tatsächlich einen falschen Tastendruck bewirkt.

Z.B. alle Aufzüge eines namhaften Herstellers hier im Gewerbepark. Ist 
schon nervig, wenn die Türen immer 2-mal aufgehen. Wer länger hier 
arbeitet, erdet sich erstmal an der Fahrstuhltür.
Die Etagenkontakte sind auch nicht entstört, daher hält er gerne mal 
einige cm versetzt. Ich wär fast mal gestürzt beim Aussteigen.
Die neuen Kontakte halten nach der Reparatur auch nicht lange, da ja die 
eigentliche Ursache (Softwarefehler) nicht beseitigt wird.
Vermutlich haben die nichtmal mehr den Sourcecode der Steuerung. Daher 
können sie auch nicht mehr ausgefallene Displays ersetzen.

von Frostiger Frusty (Gast)


Lesenswert?

Oh was fürn Mist. Da ist Software gar überflüssig!

von Peter D. (peda)


Lesenswert?

W.S. schrieb:
> Wenn du mal sehen würdest, wie die
> Kunden, die ich so kenne, auf den Geräten herumklopfen, dann würdest du
> umdenken.

Nö.
Wir hatten uns auch mal den Folientastenschrott vorführen lassen, aber 
nicht genommen.
Wer den Kunden respektiert, der nimmt Tasten mit Hub, Druckpunkt und 
Klick, dann muß keiner mehr verärgert draufdreschen. Es müssen keine 
vandalensicheren Tasten sein, sondern nur vernünftige.
An den Tasten sparen ist Sparen am falschen Ende.

von Gerald O. (garry)


Lesenswert?

Peter D. schrieb:
> Wir hatten uns auch mal den Folientastenschrott vorführen lassen, aber
> nicht genommen.

Man kann auch Folientasten in hoher Qualität fertigen. Ist immer eine 
Frage der Anwendung und des Arbeitsumfeldes welche Tasten "gut" sind.

Garry

von Teo (Gast)


Lesenswert?

Es ist nicht immer wünschenswert, auf kurze Tastenbetätigungen zu 
reagieren. Ich möchte zB. nicht, das mein Belichter bei versehentlicher 
Betätigung "Zündet". Und das trifft für mich auch auf Menüs, Eingabe von 
Werten... Eigentlich bei allem!
Und was soll der Scheiß mit 10/20/40ms?-O
Das sind 25-100 TASTENDRÜCKE/WERTÄNDERUNGEN PRO S E K U N D E... Seit 
Ihr Schimpansen?! ;D

von A. S. (Gast)


Lesenswert?

Teo schrieb:
> Ich möchte zB. nicht, das mein Belichter bei versehentlicher Betätigung
> "Zündet". Und das trifft für mich auch auf Menüs, Eingabe von Werten...
> Eigentlich bei allem!
Deshalb sind (abgesehen vom cancel) immer 2 Tastendrücke nacheinander 
notwendig. Z.b. Funktion / Start

> Und was soll der Scheiß mit 10/20/40ms?-O
> Das sind 25-100 TASTENDRÜCKE/WERTÄNDERUNGEN PRO S E K U N D E...

Irrtum.

Beim Raster 10 ms sind 4 Mal hintereinander 30 bis 40 ms. Dazu kommt 
Loslassen in gleicher Länge, sind 70-80 ms im optimalen Fall. Das ist 
ok, wenn es nicht prellt und sind 12 Änderungen pro Sekunde. Es ist aber 
eine Entprellung, weil es eben prellt!

Es mag auch für viele Geräte ok sein, benutzerfreundlich ist aber wenn 
es jeden Tastendruck (Knackfrosch Rückmeldung) auch erkennt.

von Frostiger Frusty (Gast)


Lesenswert?

Das ist so wenn die Softies meinen es selber zu können ohne eine 
geringste Ahnung zu haben.

von Peter D. (peda)


Lesenswert?

Vermutlich bin ich schon viel zu alt (60a).
Ich hab das mal mit einem leichtgängigen Taster probiert und auf dem 
Oszi angeschaut. Da mußte ich mich schon extrem anstrengen, um unter 
300ms zu kommen. Im Prinzip ist da kein herkömmlicher Tastendruck mehr 
möglich. Man muß von der Seite her über den Taster wischen, um kürzere 
Zeiten zu erreichen. Ein normaler senkrechter Druck ist 
automatisch >300ms. Das entspricht auch in etwa der Reaktionsszeit des 
Gehirns. D.h. man läßt wieder los, wenn man den Klick hört oder den 
Druckpunkt fühlt.

: Bearbeitet durch User
von A. S. (Gast)


Lesenswert?

Peter D. schrieb:
> Da mußte ich mich schon extrem anstrengen, um unter 300ms zu kommen. Im
> Prinzip ist da kein herkömmlicher Tastendruck mehr möglich. Man muß von
> der Seite her über den Taster wischen, um kürzere Zeiten zu erreichen.

Du meinst 30 ms, oder?

10 Tastendrücke pro Sekunde,nicht 2.oder wie sind die 300ms zu 
verstehen?

von MuckyFuck (Gast)


Lesenswert?

Mal was ketzerisches. Vom Prinzip her muss man doch gar nicht 
entprellen. Es genügt wenn man einen Tastendruck von einem Störsignal 
unterscheiden kann.

Das zweite was man noch wissen will ist ob die Taste wieder losgelassen 
wurde.

Wenn einem das loslassen egal ist dann kann die Gurke so lange prellen 
wie Sie will. Man muss nur ein paar positive (Ein) und evtl. negative 
(Aus) Zeiten erwischen und gut ist. Wenn man jetzt noch die beiden 
Zustände misst dann ist das Verhältnis von Ein zu Aus ein guter weg um 
festzustellen ob die Taste gedrückt wurde. Mehr will man ja gar nicht 
wissen. Lass Sie weiter prellen so lange Sie lustig ist, die Taste wurde 
gedrückt und gut ist.

Mit anderen Worten, wenn man die Prellcharakteristik erfasst kann man 
schnell und sicher den Tastendruck ermitteln. Schneller auf jeden Fall 
als auf das abklingen zu warten. Das Prellverhalten der Taste wird zu 
einer Eigenschaft selbiger die man nutzt um diese abzufragen.

Wäre doch möglich, oder?

von Frostiger Frusty (Gast)


Lesenswert?

Natürlich!

von Einer K. (Gast)


Lesenswert?

MuckyFuck schrieb:
> Man muss nur ein paar positive (Ein) und evtl. negative
> (Aus) Zeiten erwischen und gut ist.
So baut man Zufallsgeneratoren.

MuckyFuck schrieb:
> Wäre doch möglich, oder?
Möglich ist vieles, aber die Anzahl sinnvoller Möglichkeiten ist 
begrenzt.

von Gerald O. (garry)


Lesenswert?

Gerald O. schrieb:
> Entprellzeiten zwischen 10ms und 10ms sinnvoll sein. Dabei auch daran

Sollte natürlich heissen
"Entprellzeiten zwischen 10ms und 100ms sinnvoll sein."

Garry

von Gerald O. (garry)


Lesenswert?

A. S. schrieb:
> Es mag auch für viele Geräte ok sein, benutzerfreundlich ist aber wenn
> es jeden Tastendruck (Knackfrosch Rückmeldung) auch erkennt.

Das ist zu pauschal, benutzerfreundlich ist es, wenn der Benutzer 
zuverlässig das Gerät bedienen kann. Das Feedback kann man auch 
elektronisch geben (Piepser, Piezo,Vibrationsmotor..). Hat den Vorteil 
dass dann die Entprellung auch mit berüchsichtigt wird und man so einen 
"deutlichen" Tastendruck erzwingen kann ("hast Du mich nur versehentlich 
berührt oder willst Du eine Funktion ausführen")...

Darum sollte man die Prellzeit konfigurierbar machen - nicht unbedingt 
für den Benutzer, aber für den, der das System kundenfreundlich 
konfigurieren muss.

Garry

von Gerald O. (garry)


Lesenswert?

Peter D. schrieb:
> Ich hab das mal mit einem leichtgängigen Taster probiert und auf dem
> Oszi angeschaut. Da mußte ich mich schon extrem anstrengen, um unter
> 300ms zu kommen. Im Prinzip ist da kein herkömmlicher Tastendruck mehr
> möglich. Man muß von der Seite her über den Taster wischen, um kürzere
> Zeiten zu erreichen. Ein normaler senkrechter Druck ist
> automatisch >300ms. Das entspricht auch in etwa der Reaktionsszeit des
> Gehirns. D.h. man läßt wieder los, wenn man den Klick hört oder den
> Druckpunkt fühlt.

Das kommt ganz auf den Taster an.
Und hier kommt es nicht auf die Reaktionszeit an. Wenn ich z.B. eine Uhr 
10 Schritte (Sekunden, Minuten, Stunden,... ) verstellen möchte dann 
warte ich nicht bei jedem einzelnen Tastendruck bis ich die Änderung am 
Display erkannt habe sondern drück blind mitzählend 10x hintereinander. 
"Gut" ausgelegte Systeme  können das, "schlecht" ausgelegte akzeptieren 
vielleicht nur einen Tastendruck pro Sekunde. "Gut" und "schlecht" ist 
hier eine Wissenschaft für sich. Im Flugzeug beim einstellen von 
Parametern hat man da andere Anforderungen und ansprüche als am 
Radiowecker neben dem Bett.

Garry

von A. S. (Gast)


Lesenswert?

Gerald O. schrieb:
> Sollte natürlich heissen
> "Entprellzeiten zwischen 10ms und 100ms sinnvoll sein."

Es tut mir leid, wenn ich das quasi am Ende erst sage, aber prinzipiell 
sind die konventionellen Entprellungen suboptimal.

10 Tastendrücke pro Sekunde ist ein muß, alles andere ist nervig.

Reagieren kann ich beim ersten erkennen (make) wenn ich keine 
sporadischen Störungen habe (das hat nichts mit prellen zu tun)

Das einzige, was ich sauber erkennen muss, ist das Loslassen: hat der 
Benutzer wirklich die Taste losgelassen?

Dann kann die Taste beim Drücken so lange prellen, wie sie will, den 
Druck erkenne ich sofort, das Loslassen nach x ms, mit x > als die 
maximale Pause beim prellen, z.b. 30ms.
In anderen Worten: wenn ich 40ms drücke und 60 man loslasse, dann darf 
die Taste so lange prellen dass ich genau 1 Sample sicher mitkriege.

In der Praxis darf sie nicht zu lange prellen, da  ich bei Abtastung 
alle 10ms prellen nicht von dauernd gedrückt oder dauernd losgelassen 
unterscheiden kann.


Das Kriterium muss der Knackfrosch sein: wenn der knackt, muss die Taste 
erkannt werden.

von Maxe (Gast)


Lesenswert?

A. S. schrieb:
> Peter D. schrieb:
>> Da mußte ich mich schon extrem anstrengen, um unter 300ms zu kommen.
> Du meinst 30 ms, oder?
> 10 Tastendrücke pro Sekunde,nicht 2.oder wie sind die 300ms zu
> verstehen?
Die 300ms scheinen mir schon plausibel. Die Tage hab ich wieder mal eibe 
klassische Stoppuhr (digital) in der Hand gehabt und einen "Doppelklick" 
gemessen. Also die Stopuhr startet beim ersten Druck, beim zweiten 
stoppt sie. Mit dem Daumen komm ich da auf etwa 30 Hundertstel, also 
300ms. Mit Anstrengung waren die Bestwerte bei 140ms. Noch schneller 
ging es mit der flachen Hand durch Ausholen, Draufschlagen und Nutzung 
der Rueckfederung, um eine kurze Entlastung des Knopfes zu erreichen. 
Der Bestwert mit dieser Methode waren 60ms. D.h. die Entprellzeit muss 
darunter liegen. Ich denke aber fuer die Reaktionszeit ist nicht 
wichtig, wie schnell die Hand ist, sondern wie schnell das Gehirn ist. 
Ich wuerde mich da an der Bildwiederholrate orientieren, ich denke ine 
Verzoegerung von 10ms ist nicht wahrnehmbar.

von Spess53 (Gast)


Lesenswert?

Hi

>Es tut mir leid, wenn ich das quasi am Ende erst sage, aber prinzipiell
>sind die konventionellen Entprellungen suboptimal.

Na dann warten wir jetzt alle ganz gespannt auf deine unkonventionelle 
optimale Entprellung. Ich bin schon ganz heiß drauf.

MfG Spess

von Gerald O. (garry)


Lesenswert?

A. S. schrieb:
> Gerald O. schrieb:
>> Sollte natürlich heissen
>> "Entprellzeiten zwischen 10ms und 100ms sinnvoll sein."
>
> Es tut mir leid, wenn ich das quasi am Ende erst sage, aber prinzipiell
> sind die konventionellen Entprellungen suboptimal.
>
> 10 Tastendrücke pro Sekunde ist ein muß, alles andere ist nervig.

Falsch ausgedrückt, eine Reaktionszeit > 100ms ist ein muß damit es 
nicht nervig wird. An den Fall "Langdruck" muss man ggf. auch noch 
denken.

> Reagieren kann ich beim ersten erkennen (make) wenn ich keine
> sporadischen Störungen habe (das hat nichts mit prellen zu tun)
Veto.
Ob ich sporadische Störungen haben werde kann ich nicht vorhersehen. 
Damit ist der Ausschluß grob fahrlässig wenn man ein zuverlässiges 
System möchte.

> Das einzige, was ich sauber erkennen muss, ist das Loslassen: hat der
> Benutzer wirklich die Taste losgelassen?
>
> Dann kann die Taste beim Drücken so lange prellen, wie sie will, den
> Druck erkenne ich sofort, das Loslassen nach x ms, mit x > als die
> maximale Pause beim prellen, z.b. 30ms.
> In anderen Worten: wenn ich 40ms drücke und 60 man loslasse, dann darf
> die Taste so lange prellen dass ich genau 1 Sample sicher mitkriege.
Siehe oben. 2 Samples sollten es mindestens sein, besser 3.
> In der Praxis darf sie nicht zu lange prellen, da  ich bei Abtastung
> alle 10ms prellen nicht von dauernd gedrückt oder dauernd losgelassen
> unterscheiden kann.
Die Prellzeit muss kürzer sein als de Abstand zwischen dem ersten und 
dem letzen Sample das gleich sein muss.
> Das Kriterium muss der Knackfrosch sein: wenn der knackt, muss die Taste
> erkannt werden.
Nein, das Knacken ist ehr das Startsignal dass jetzt das Prellen 
beginnt. Bei ganz schlechten Tasten muss man sogar noch nachdrücken 
damit es überhaupt einen Kontakt gibt. Wenn nach dem Knacken noch 
20ms-40ms Entprellzeit kommen bekommt das der Bediener kaum mit.

von Gerald O. (garry)


Lesenswert?

Maxe schrieb:
> ich denke ine
> Verzoegerung von 10ms ist nicht wahrnehmbar.

Richtig.
So ca. zwischen 50ms und 100ms wird eine Gesamtverzögerung zwischen 
Tastendruck und Reaktion in der Anwendung für die Mehrheit wahrnehmbar. 
Hängt auch davon ab ob man sich jetzt durch ein Menü durchhangeln und 
die Reaktionen erkennen muss bevor der nächste Schritt kommt oder ob man 
ein ehr ein Morsesignal abgeben möchte.

Garry

von Teo (Gast)


Lesenswert?

Gerald O. schrieb:
> So ca. zwischen 50ms und 100ms wird eine Gesamtverzögerung zwischen
> Tastendruck und Reaktion in der Anwendung für die Mehrheit wahrnehmbar.
> Hängt auch davon ab ob man sich jetzt durch ein Menü durchhangeln und
> die Reaktionen erkennen muss bevor der nächste Schritt kommt oder ob man
> ein ehr ein Morsesignal abgeben möchte.

10x oder Öfter pro Sekunde (wie hier ja schon geschrieben wurde) eine 
Taste drücken, ist einfach nur idiotisch³!
Stellen die Damen und Herren SO Ihren Wecker ein? Nein, die haben 
gelernt den Finger drauf zu lassen und ~0,3s zu warten bis der Zähler 
(natürlich dynamisch) anläuft....

Beitrag #6587482 wurde von einem Moderator gelöscht.
von Martin V. (oldmax)


Lesenswert?

Hi
Man, ihr macht aber auch gleich um die "Piep" eine Wissenschaft. Taster 
und Schalter sind in meinen Augen in der Regel für manuelle Eingaben 
zuständig. Haben sie mechanische Kontakte, prellen sie. Das Prellen ist 
unerwünscht, weil damit möglicherweise  Signale unkontrollierbar 
bearbeitet werden. Darin sind sich doch letztendlich alle einig.
Wenn überhaupt, findet Kontaktprellen im einstelligen MS _Bereich statt 
aber eher wohl im μs-Bereich. Wenn ich also manuelle Signalwechsel von 
100Hz hinbekomme, könnte ich diese Signale nicht wirklich sicher 
erfassen und auswerten, es sei denn, ich erfassen sie mit einem 
Interrupt. Hier würde ich den Programmierer fragen, ob er am Wettbewerb 
der schnellsten Tastendrücker teilnehmen will. Alles andere ist so 
ziemlich sinnfrei. Selbst 10 Hz ist hochgegriffen und unrealistisch, 
aber denkbar. Doch 10 Hz lassen sich sicher erfassen, auch mit den 
üblichen Entprellroutinen.
Alles andere, Diskussionen über Taster und "1"-Flanke oder "0"-Flanke 
sind doch hier nicht relevant. Vielleicht, wenn man geeignete Meßmittel 
verfügbar hat, kann man vielleicht feststellen, das ein Prellen beim 
Schließen länger andauert, als beim Öffnen und dann die Auswertung eben 
darauf legt.
Sicherlich sind Grenzwertigkeiten zu betrachten, aber man muß schon die 
Kirche im Dorf lassen. Wenn ein Anwender ein Gerät schlecht macht, in 
dem er wie von Sinnen eine Tastatur bearbeitet und dann auf 
Fehlverhalten der Software tippt, dann schaut ihm je nach Wichtigkeit 
als Kunde mehr oder weniger lang in die Augen und evtl.ergänzt ihr das 
dann noch mit einem angemessenen Kommentar.
(Alter Spruch: Was nützt der Tiger im Tank, wenn der Esel am Steuer 
sitzt)
Also, bleibt gesund
Gruß oldmax

von Lediglich nur ein Benutzer (Gast)


Lesenswert?

Nein , so einfach ist es doch nicht.

- manuell bedienter Schalter
- Schalter durch Anlage betätigt

— Schalter mit mechanischen Kontakten
- Schalter ohne mechanische Kontakte

Also ein Prellverhalten per Software zu eliminieren ist doch etwas 
vielfältiger.

von HildeK (Gast)


Lesenswert?

Peter D. schrieb:
> Ich hab das mal mit einem leichtgängigen Taster probiert und auf dem
> Oszi angeschaut. Da mußte ich mich schon extrem anstrengen, um unter
> 300ms zu kommen.

jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj

Das sind 31 Zeichen, in 5 Sekunden einzeln gedrückt, mit dem 
Zeigefinger. Macht ≈160ms/Tastendruck. BTW: ich bin 60++ 😀

Aber es geht ggf. auch mal nur um einen einzelnen Tastendruck und da 
schafft man ON-Zeiten von durchaus deutlich unter 100ms.
So schaffe ich es immer wieder, an Aufzügen, an meiner Kaffeemaschine 
u.ä. die Tasten so kurz zu drücken, dass die Geräte nicht reagieren. Und 
das ist lästig. Wenn eine schnelle Reaktion gewünscht ist, darf das 
Erkennen nicht viel länger als 20ms dauern. Andererseits wäre ein 
Störung mit der Dauer auch ein extrem schmutziges Umfeld, da hat man 
dann auch an anderen Stellen Probleme.

Aber Prellen ist i.a. wesentlich kürzer. Um das Kontaktflattern 
wegzubekommen, reichen 10-30ms Entprellzeit üblicherweise locker aus.
Mit deiner Entprellroutine ist das ja auch problemlos anpassbar. An der 
kann ich nur kritisieren, dass sie nicht auf Anhieb von jedem zu 
verstehen ist 😀.
In HW wäre es wohl ein 4-Bit-Shiftregister mit UND und NOR an den 
Ausgängen und einem RS-FF. (Eine Skizze könnte ich liefern)

Und letztlich hängt es auch von der Aufgabe ab, siehe
Teo schrieb:
> Es ist nicht immer wünschenswert, auf kurze Tastenbetätigungen zu
> reagieren.
ob man schnell (sofort) oder eben verzögert reagieren will/soll.
Und ob Störungen auf die Taste einwirken können oder nicht.
Ich hab z.B. eine Anwendung, da wird per Tastendruck nur eine Anzeige 
für die Dauer des Drucks aktiviert. INT0 zum Aufwecken, anzeigen und 
wieder schlafen gehen. Das geht ohne Entprellung genauso gut, weil 
nichts Negatives passieren kann.

Beitrag #6587527 wurde von einem Moderator gelöscht.
von Tastertör (Gast)


Lesenswert?

HildeK schrieb:
> In HW wäre es wohl ein 4-Bit-Shiftregister mit UND und NOR an den
> Ausgängen und einem RS-FF. (Eine Skizze könnte ich liefern)

Das mußt du nicht. Einfach ins Datenbaltt vom MC14490 sehen.

Die vielen Angaben zu optimalen Zeiten sind einfach viel zu pauschal.
Die Taste an einer Stoppuhr muß sicherlich gedrückt werden, eine 
Tastatur möchte ich nur antippen. Letzteres geht deutlich schneller.
Manche Taste soll beim Aktivieren erkannt werden, manch andere erst beim 
Loslassen, weil ggf. noch eine 2. Taste dazu betätigt werden kann.
Die Taste einer Türklingel, welche feucht und oxidiert sein kann, kann 
gemächlich entprellt werden. Ein Reedkontakt hingegen sehr schnell im 
ms-Bereich.

Wie oben angesprochen ist auch die Zielgruppe ausschlaggebend. Für 
ältere Menschen ist ein deutlich längerer Tastendruck einzuplanen, zum 
Beispiel Aufzug oder med. Hilfsmittel.

von Martin V. (oldmax)


Lesenswert?

Hi
Gut, ihr seid immer noch nicht fertig und ja, es gibt immer wieder 
Tasten,, die mal nicht reagieren. Wobei ich da auch mal wieder bei "E" 
von "EVA" bin und die Zykluszeit eines Programmes aunsprechen möchte. 
Nicht immer ist eine Entprellroutine Ursache von nicht erkannten 
Eingaben, sondern schlichtweg die Tatsache, das der Programmierer seine 
Programmlaufzeit nicht im Blick hat und seine manuellen Eingänge eben 
nur pollt. Was ja auch in der Regel völlig ok ist. Man kann aufs 
Entprellen verzichten, wenn man Taster mit Umsschaltkontakt nimmt. So 
ist der Tastendruck sofort beim ersten Kontakt in der Lage ein Bit zuu 
setzen und beim Loslassen löscht der andere Kontakt das gesetzte Bit. 
Kostet halt einen weiteren Eingang, spart aber Entprellzeit, da schon 
das erste Anzeichen eines Signals eine Aktion ausführt. Aber, was ist 
mit Störungen? Die werden natürlich nicht erkannt und können auch 
unerwünschte Fehlfunktionen auslösen.

Lediglich nur ein Benutzer schrieb:
> Nein , so einfach ist es doch nicht.
>
> - manuell bedienter Schalter
> - Schalter durch Anlage betätigt
>
> — Schalter mit mechanischen Kontakten
> - Schalter ohne mechanische Kontakte
>
> Also ein Prellverhalten per Software zu eliminieren ist doch etwas
> vielfältiger.

Gut, das du auch was dazu beisteuerst, in dem du nochmal auf meine 
bereits hinlänglichen Hinweise auf das Prellverhalten von Eingängen bei 
mech. Kontakten und elektronischen Sensoren hinweist. So kann man diesen 
Thread auch am Leben erhalten.
Also, Konzeptfehler sind nicht nur in der Software sondern auch in der 
Bauart eines Gerätes zu finden. So sind Störeinflüsse durch statische 
Ladung durchaus keine Seltenheit, aber durch entsprechende Ausführung 
der Hardware auszugrenzen. Wird ja auch gemacht, dennn ich glaube nicht, 
das ein Pilot , wenn er von der Toilette kommt, sich erst durch einen 
Kupferschleier kämpfen muß, um nicht durch eine mögliche statische 
Ladung den Landeanflug auszulösen. (shit, wo sind die Ironie-Tags ?)
ok, mir reichts jetzt erst mal.
Gruß oldmax

von Georg (Gast)


Lesenswert?

Tastertör schrieb:
> Wie oben angesprochen ist auch die Zielgruppe ausschlaggebend

Ein fanatischer Gamer wird wohl kaum an einer Tastatur spielen, die mit 
Peters Software entprellt ist. Eine Maschinensteuerung dagegen sollte 
definitiv nicht auf nervöses Herumhacken reagieren. Und die hier übliche 
Angeberei "ich kann schneller tippen als alle anderen" ist sowieso nur 
kindisch und eine Qualifizierung als IT-Spezialist ist das auch nicht.

Georg

von M. K. (sylaina)


Lesenswert?

Georg schrieb:
> Ein fanatischer Gamer wird wohl kaum an einer Tastatur spielen, die mit
> Peters Software entprellt ist.

Du hast also Peters Software auch nicht verstanden und dir ist auch 
nicht klar, dass man mit Peters Software Entprellzeiten von 100ms 
genauso einfach realisieren kann wie Entprellzeiten von 0.1ms, wie 
sinnvoll das auch immer sein mag.

von Philipp K. (philipp_k59)


Lesenswert?

Es gibt doch garnicht die Perfekte entprellung, wieso wollt ihr die 
jetzt ausdiskutieren.. ist das vielleicht eher der Noob in euch?

Peter D. hat sich da irgendwie rausgehalten und hat da mal das Tutorial 
geschrieben über das bestimmt viele Dankbar waren.

Wie man es nun macht für welche Anwendungen auch immer.. liegt in der 
Umsetzung im Sinne der Betrachtung der eigenen Ansprüche, Hohe Ansprüche 
sind da nicht Professioneller als weniger Hohe Ansprüche. Vielleicht ist 
es Pfusch oder Professionell bei einem relativen festen 10ms Mainloop 
die Entprellung ohne Zeit und Timer zu machen da die paar Ticks auch 
nicht mehr interessieren.

von Stefan F. (Gast)


Lesenswert?

A. S. schrieb:
> Dann kann die Taste beim Drücken so lange prellen, wie sie will, den
> Druck erkenne ich sofort, das Loslassen nach x ms, mit x > als die
> maximale Pause beim prellen, z.b. 30ms.
> In anderen Worten: wenn ich 40ms drücke und 60 man loslasse, dann darf
> die Taste so lange prellen dass ich genau 1 Sample sicher mitkriege.

Beim Drücken kommt irgendwann der Zeitpunkt, wo der Kontakt nicht mehr 
prellt. Danach kann man auch das Loslassen sofort bei der ersten Flanke 
erkennen - wenn man denn meint, es schnell zu brauchen.

von Stefan F. (Gast)


Lesenswert?

Teo schrieb:
> 10x oder Öfter pro Sekunde (wie hier ja schon geschrieben wurde) eine
> Taste drücken, ist einfach nur idiotisch!

Meine Wellensittiche sehen das anders :-)

von A. S. (Gast)


Lesenswert?

Spess53 schrieb:
> Na dann warten wir jetzt alle ganz gespannt auf deine unkonventionelle
> optimale Entprellung. Ich bin schon ganz heiß drauf.

Die ist genau wie beschrieben. Nur macht es keinen Sinn, sie so zu 
optimieren, wie Peter es gemacht hat. Könnte ich auch gar nicht.

Eine Taste ist gedrückt, solange sie nicht 4 x hintereinander AUS ist.

Taste=0 wenn 4*AUS
Taste=1 wenn 1*EIN
Make sofort auf das erste EIN, Break beim 4ten AUS.

Wenn man Entstören will/muss, muss man halt irgendeinen Schwelle 
zwischen Signal to Noise ziehen. Z.B. EIN wenn 2 von 4, AUS wenn 0 von 
4.

Peters Routine ist für 4 von 4 perfekt optimiert. Es wird kaum gelingen, 
dass so universell irgendwie zu toppen. Der Nachteil ist, dass es kaum 
jemandem gelingt, die Schwelle hier beliebig zu justieren.

Gerald O. schrieb:
> Falsch ausgedrückt, eine Reaktionszeit > 100ms ist ein muß damit es
> nicht nervig wird. An den Fall "Langdruck" muss man ggf. auch noch
> denken.

Das ist wieder ein ganz anderes Thema. Die wichtigsten Auswertungen (in 
absteigender Reihenfolge) sind:

A) Taste gedrückt (Make)
B) Taste losgelassen (Break)
C) Taste gedrückt gehalten / Repetierend
D) Tastendruck-Länge unterscheiden (Kurz / lang)

Für A) brauche ich keine Verzögerung oder Entprellung beim Erkennen. 
Höchstens eine Entstörung, das ist ein anderes Thema.

Ob erzwungene Langsamkeit nervt, hängt fast nur davon ab, wie viele 
Tasten ich drücke. Für den Wecker einmal am Tag 5 Tasten: geschenkt.

Für eine Computer-Tastatur oder ein Gerät, wo ich 20-30 Tasten 
nacheinander Drücke, mehrmals täglich mit festen Menüverläufen: nervig.

Teo schrieb:
> Stellen die Damen und Herren SO Ihren Wecker ein? Nein, die haben
> gelernt den Finger drauf zu lassen und ~0,3s zu warten bis der Zähler
> (natürlich dynamisch) anläuft....

Bei solchen Geräten spielt das keine Rolle. Es gibt aber auch embedded 
Geräte, mit denen Kunden professionell arbeiten.

Georg schrieb:
> Eine Maschinensteuerung dagegen sollte
> definitiv nicht auf nervöses Herumhacken reagieren. Und die hier übliche
> Angeberei "ich kann schneller tippen als alle anderen" ist sowieso nur
> kindisch und eine Qualifizierung als IT-Spezialist ist das auch nicht.

Georg, jeder von uns hat etwas anderes beim Begriff "Maschinensteuerung" 
im Sinn. Unsere (gewerblichen) Kunden drücken ständig Tasten auf unseren 
Steuerungen und das relativ blind, also ohne die Rückmeldungen 
(Knackfrosch, Tastenpiep, TastenLED und Display-Reaktion) abzuwarten. 
Dort muss eine Taste halt ähnlich schnell funktionieren wie bei einer 
PC-Tastatur.

Es nützt auch nichts, zu sagen, der Kunde ist halt doof und muss erzogen 
werden. Wenn wir ihm nicht liefern, was er möchte, dann kauft er 
woanders.

Ich finde es auch meistens verkehrt, den Kunden zu disziplinieren, wo es 
nicht notwendig ist.

Philipp K. schrieb:
> Vielleicht ist
> es Pfusch oder Professionell bei einem relativen festen 10ms Mainloop
> die Entprellung ohne Zeit und Timer zu machen da die paar Ticks auch
> nicht mehr interessieren.

Hier sind zwei Dinge zu unterscheiden:
A) Tasten nicht erkennen, weil zu schnell gedrückt, obwohl der 
Knackfrosch geknackt hat: No Go für eine professionelle Tastatur (siehe 
Computer)

B) Eine Verzögerung von z.B. 50ms bei der Tastenerkennung (Im ersten 
Takt gedrückt, im zweiten durch Prellen nicht erkannt, im Dritten bis 
sechsten wieder erkennen = 50ms später). Das spielt natürlich keine 
Rolle, da es im Rauschen untergeht.

Andererseits habe ich das gleiche gedacht, als damals LED-Bremslichter 
gegenüber Glühlampen favorisiert wurden, weil sie 100ms früher 
leuchten... So schnell reagiert ja eh keiner, habe ich gedacht.

von A. S. (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Beim Drücken kommt irgendwann der Zeitpunkt, wo der Kontakt nicht mehr
> prellt. Danach kann man auch das Loslassen sofort bei der ersten Flanke
> erkennen - wenn man denn meint, es schnell zu brauchen.

Das ist richtig. Da am Break aber meistens weniger Aktionen hängen UND 
Du ja irgendwo die Mindestzeit (30-40ms) abbilden musst, wird es damit 
nicht einfacher. Ich habe das mal durchexerziert und bin auf keine 
sinnvolle Realisierung gekommen.

von Rainer V. (a_zip)


Lesenswert?

A. S. schrieb:
> Ich finde es auch meistens verkehrt, den Kunden zu disziplinieren, wo es
> nicht notwendig ist.

...solange du Konkurrenten hast, wird das eh nix mit dem Disziplinieren. 
Wenn der Bediener deines Geräts "was zu sagen hat", wirst du schön seine 
Wünsche berücksichtigen. Wenn er "nur" Bediener ist, wirst du mit 
Fehlbedienungen und den Folgen leben müssen. Beides kann extrem nervig 
sein und hinterläßt auch immer einen schlechten Eindruck!
Gruß Rainer

von Gerald O. (garry)


Lesenswert?

Martin V. schrieb:
> Man, ihr macht aber auch gleich um die "Piep" eine Wissenschaft. Taster
> und Schalter sind in meinen Augen in der Regel für manuelle Eingaben
> zuständig. Haben sie mechanische Kontakte, prellen sie. Das Prellen ist

Man muss unterscheiden ob man sich als Hobbyprogrammierer an einem 
Arduino-Projekt erfreut oder ob Millionen Kunden mit einem Produkt 
zufrieden gestellt werden müssen. Bei letzterem muss man eine 
Wissenschaft daraus machen

> unerwünscht, weil damit möglicherweise  Signale unkontrollierbar
> bearbeitet werden. Darin sind sich doch letztendlich alle einig.
> Wenn überhaupt, findet Kontaktprellen im einstelligen MS _Bereich statt
> aber eher wohl im μs-Bereich. Wenn ich also manuelle Signalwechsel von
> 100Hz hinbekomme, könnte ich diese Signale nicht wirklich sicher
> erfassen und auswerten, es sei denn, ich erfassen sie mit einem
> Interrupt. Hier würde ich den Programmierer fragen, ob er am Wettbewerb
> der schnellsten Tastendrücker teilnehmen will. Alles andere ist so
> ziemlich sinnfrei. Selbst 10 Hz ist hochgegriffen und unrealistisch,
> aber denkbar. Doch 10 Hz lassen sich sicher erfassen, auch mit den
> üblichen Entprellroutinen.
Die Aufgabenstellung heisst oftmals nicht nur einfach "Entprellen einer 
Taste" sondern "Entprellen einer Tastenmatrix über die 
Produktlebensdauer über den gesamten Temperatur- und 
Luftfeuchtigkeitsbereich" - und das ganze nicht als Hauptaufgabe des 
Controllers sondern mit möglichst geringer Rechenzeit.

> Alles andere, Diskussionen über Taster und "1"-Flanke oder "0"-Flanke
> sind doch hier nicht relevant. Vielleicht, wenn man geeignete Meßmittel
> verfügbar hat, kann man vielleicht feststellen, das ein Prellen beim
> Schließen länger andauert, als beim Öffnen und dann die Auswertung eben
> darauf legt.
> Sicherlich sind Grenzwertigkeiten zu betrachten, aber man muß schon die
> Kirche im Dorf lassen. Wenn ein Anwender ein Gerät schlecht macht, in
> dem er wie von Sinnen eine Tastatur bearbeitet und dann auf
> Fehlverhalten der Software tippt, dann schaut ihm je nach Wichtigkeit
> als Kunde mehr oder weniger lang in die Augen und evtl.ergänzt ihr das
> dann noch mit einem angemessenen Kommentar.
Das kann man zu seinem Enkel, Neffen,.. sagen dem man eine Arduino-Uhr 
gebastelt hat aber keinem Geschäftskunden. Üblicherweise hat der 
Programmierer auch keinen Endkundenkontakt sondern einen Auftraggeber 
mit genauen Vorgaben.

Garry

von Stefan F. (Gast)


Angehängte Dateien:

Lesenswert?

Martin V. schrieb:
> Wenn überhaupt, findet Kontaktprellen im einstelligen MS _Bereich statt
> aber eher wohl im μs-Bereich.

Das kommt doch sehr auf den Kontakt an. Taster der abgebildeten Bauart 
prellen ganz besonders lange, da sind 100ms keine Seltenheit.

von Gerald O. (garry)


Lesenswert?

Stefan ⛄ F. schrieb:
> Beim Drücken kommt irgendwann der Zeitpunkt, wo der Kontakt nicht mehr
> prellt. Danach kann man auch das Loslassen sofort bei der ersten Flanke
> erkennen - wenn man denn meint, es schnell zu brauchen.

Nein, eine Flanke kann immer auch eine Störung sein.
Eine zuverlässige Software muss das abfangen können.

Garry

von Stefan F. (Gast)


Lesenswert?

Gerald O. schrieb:
> Nein, eine Flanke kann immer auch eine Störung sein.
> Eine zuverlässige Software muss das abfangen können.

Weil jede Schaltung stets derartigen Störungen ausgesetzt ist und keine 
Anwendung sie tolerieren kann?

Wenn wir unseren persönlichen Fall zum allgemeinen machen, können wir 
uns auf ewig um die einzig richtige Lösung streiten.

von Gerald O. (garry)


Lesenswert?

Philipp K. schrieb:
> Wie man es nun macht für welche Anwendungen auch immer.. liegt in der
> Umsetzung im Sinne der Betrachtung der eigenen Ansprüche, Hohe Ansprüche
> sind da nicht Professioneller als weniger Hohe Ansprüche. Vielleicht ist
> es Pfusch oder Professionell bei einem relativen festen 10ms Mainloop
> die Entprellung ohne Zeit und Timer zu machen da die paar Ticks auch
> nicht mehr interessieren.

Ein 10ms Mainloop (ganz niedrige Taktraten ausgenommen)heißt dass man 
mit viel Delay-Aufrufen arbeitet, dann mag der Mainloop-Zyklus halbwegs 
konstant sein oder der uC hat schon einiges zu tun - dann wird es ehr 
nicht mehr so konstant.
Als Einsteiger kann man das so machen, sollte dann aber ganz schnell 
lernen wie man es richtig macht sonst kämpft man hier nur noch mit 
unnötiger Fehlersuche wenn der Code dann doch langsam wächst.

Garry

von W.S. (Gast)


Lesenswert?

Gerald O. schrieb:
> Es kommt immer auch darauf an für was und für wen die Tasten gedacht
> sind. Daher ist es gut wenn man die Entprellzeit konfigurierbar macht.

Du hast mich falsch verstanden.
Ich meine ausdrücklich NICHT die Entprellzeit, also die Zeit NACH dem 
erkannten Tastendruck, bis die Taste wieder als ungedrückt gelten darf.

Ich meine die Zeit BIS zum Erkennen eines Tastendruckes bei einer zuvor 
als ungedrückt geltenden Taste.

Wenn jemand draufkloppt, dann ist die gesamte Gedrückt-Zeit elendiglich 
kurz. Ich hatte das vor Zeiten mal ausgemessen, wenn ich mich recht 
erinnere lag das alles im Bereich von so etwa 10..20 ms und nicht mehr. 
Wenn man da 20 oder gar 40 ms Zeit verstreichen läßt, bis man einen 
Tastendruck als gültig anerkennt, dann ist man zu langsam und der ganze 
Tastendruck schon längst vorbei. Ergebnis: derjenige haut nochmal und 
stärker drauf (anstelle einfach länger zu drücken). Es ist die Ungeduld 
bei den Benutzern.

W.S.

von W.S. (Gast)


Lesenswert?

Peter D. schrieb:
> Wir hatten uns auch mal den Folientastenschrott vorführen lassen, aber
> nicht genommen.

Nanana, nicht so abfällig. Ich habe eigentlich gute Erfahrungen mit 
Folientastaturen: wasserdicht, Design nach Kundenwunsch und gut 
verarbeit- und montierbar. Man muß ja auch dran denken, daß die Bauteile 
bezahlbar bleiben, daß Geräte montiert werden müssen und daß das keine 
halbe Ewigkeit dauern darf.

W.S.

von Stefan F. (Gast)


Lesenswert?

W.S. schrieb:
> Man muß ja auch dran denken, daß die Bauteile
> bezahlbar bleiben, daß Geräte montiert werden müssen und daß das keine
> halbe Ewigkeit dauern darf.

Man als Kunde auch daran denken, dass diese Tastaturen nach ein paar 
Jahren erneuert werden müssen.

von Gerald O. (garry)


Lesenswert?

Stefan ⛄ F. schrieb:
> Weil jede Schaltung stets derartigen Störungen ausgesetzt ist und keine
> Anwendung sie tolerieren kann?
Das gemeine ist dass solche Störungen gerade nicht "stets" sind. Dadurch 
sind sie dann sehr schwer zu finden wenn sie auftreten.
Z.B. wenn man sich eine tolle Lichtsteuerung fürs Schlafzimmer gebastelt 
hat die super funktioniert aber ab und zu mitten in der Nacht auf volles 
Licht geht weil der Taster meint in einer Störung einen Tastendruck 
erkannt zu haben. Als Programmierer meint man vielleicht noch mit diesen 
sporadischen Störungen leben zu können, die Frau ist dann aber 
vielleicht doch anderer Meinung..

> Wenn wir unseren persönlichen Fall zum allgemeinen machen, können wir
> uns auf ewig um die einzig richtige Lösung streiten.

Streiten? Immer gut wenn man über ein Problem diskutiert und sich 
verschiedene Blinkwinkel anhört.
Letztlich kann man dabei nur gewinnen wenn man seine Funktionen stetig 
verbessert in dem man weiterer Aspekte berücksichtigt.

Garry

von W.S. (Gast)


Lesenswert?

A. S. schrieb:
> Es tut mir leid, wenn ich das quasi am Ende erst sage, aber prinzipiell
> sind die konventionellen Entprellungen suboptimal.
>
> 10 Tastendrücke pro Sekunde ist ein muß, alles andere ist nervig.
>
> Reagieren kann ich beim ersten erkennen (make) wenn ich keine
> sporadischen Störungen habe (das hat nichts mit prellen zu tun)
>
> Das einzige, was ich sauber erkennen muss, ist das Loslassen: hat der
> Benutzer wirklich die Taste losgelassen?
>
> Dann kann die Taste beim Drücken so lange prellen, wie sie will, den
> Druck erkenne ich sofort, das Loslassen nach x ms

Du sprichst mir aus der Seele. Ich hab genau DAS weiter oben schon ein 
paarmal ausgeführt, aber es gibt immer wieder Leute, die es nicht 
gerafft haben (oder nicht wollen).

W.S.

von HildeK (Gast)


Lesenswert?

W.S. schrieb:
> Wenn jemand draufkloppt, dann ist die gesamte Gedrückt-Zeit elendiglich
> kurz. Ich hatte das vor Zeiten mal ausgemessen, wenn ich mich recht
> erinnere lag das alles im Bereich von so etwa 10..20 ms und nicht mehr.

Ich hätte zwar eher die doppelte Zeit genannt, aber das hängt auch 
direkt von der mechanischen Ausführung der Taste ab.
Genau das ist auch mein Problem bei manchen Bedienelementen - in 
20ms-30ms sollte ein kurzer Tastendruck sicher erkannt werden. Sonst 
fluche ich auf den, der die Entprellung eingebaut hat - ob in SW oder in 
HW.
Ich bin mir sicher, auf meiner PC-Tastatur erfolgt das in noch kürzere 
Zeit zuverlässig. Also ist es machbar und noch nie hat diese auf Grund 
einer externen Störung von selber zu schreiben begonnen.

von W.S. (Gast)


Lesenswert?

HildeK schrieb:
> So schaffe ich es immer wieder, an Aufzügen, an meiner Kaffeemaschine
> u.ä. die Tasten so kurz zu drücken, dass die Geräte nicht reagieren. Und
> das ist lästig.

Eben. Und genau deswegen habe ich weiter oben geschrieben, daß Peters 
Methode, den Vorgang des Gedrückt-WERDENS entprellen zu wollen, zu einer 
zähen Taste führt, die die Mehrzahl der Kunden nicht akzeptieren.

Und all diejenigen, die hier von Affen usw. schreiben, wollen auf eine 
Vielzahl von Tastendrücken pro Sekunde hinaus und haben das hier 
angerissene Problem einfach nicht verstanden.

Aber jetzt ist das hoffentlich endlich kapiert worden.

W.S.

von Stefan F. (Gast)


Lesenswert?

Gerald O. schrieb:
> Z.B. wenn man sich eine tolle Lichtsteuerung fürs Schlafzimmer gebastelt
> hat die super funktioniert aber ab und zu mitten in der Nacht auf volles
> Licht geht

Das Argument zählt nicht. Es ging darum, das Loslassen bei der ersten 
Flanke zu erkennen. Dafür muss man unmittelbar vorher auf den Taster 
gedrückt haben und die dazu gehörige Entprellung/Entstörung überwunden 
haben.

von Gerald O. (garry)


Lesenswert?

Stefan ⛄ F. schrieb:
> W.S. schrieb:
>> Man muß ja auch dran denken, daß die Bauteile
>> bezahlbar bleiben, daß Geräte montiert werden müssen und daß das keine
>> halbe Ewigkeit dauern darf.
>
> Man als Kunde auch daran denken, dass diese Tastaturen nach ein paar
> Jahren erneuert werden müssen.

Kommt darauf an ob es z.B. eine PC-Tastatur ist die man als 
Verschleißteil bei Bedarf austauscht oder ein Gerät das für z.B. 10Jahre 
Lebensdauer konzipiert ist  und alle Komponenten diese Zeitspanne bei 
bestimmungsgemässen Gebrauch funktionieren müssen.

Garry

von Stefan F. (Gast)


Angehängte Dateien:

Lesenswert?

Stefan ⛄ F. schrieb:
> Man wird als Kunde auch daran denken, dass diese Tastaturen nach ein paar
> Jahren erneuert werden müssen.

Gerald O. schrieb:
> Kommt darauf an ob es z.B. eine PC-Tastatur ist die man als
> Verschleißteil bei Bedarf austauscht oder ein Gerät das für z.B. 10Jahre
> Lebensdauer konzipiert ist  und alle Komponenten diese Zeitspanne bei
> bestimmungsgemässen Gebrauch funktionieren müssen.

Klar. Einer 15€ PC Tastatur würde ich nicht lange hinterher trauern.

Es ging jedoch um anwendungsspezifische Folientastaturen, wie die 
abgebildete. Die kann man nicht mal eben schnell bei Saturn nachkaufen.

von Gerald O. (garry)


Lesenswert?

Stefan ⛄ F. schrieb:
> Gerald O. schrieb:
>> Z.B. wenn man sich eine tolle Lichtsteuerung fürs Schlafzimmer gebastelt
>> hat die super funktioniert aber ab und zu mitten in der Nacht auf volles
>> Licht geht
>
> Das Argument zählt nicht. Es ging darum, das Loslassen bei der ersten
> Flanke zu erkennen. Dafür muss man unmittelbar vorher auf den Taster
> gedrückt haben und die dazu gehörige Entprellung/Entstörung überwunden
> haben.

Hier hast Du recht, weiter oben war das mal Thema auf die erste Flanke 
zu auch beim Einschalten zu reagieren.

Damit es wieder passt, denk an einen Türkontakt der beim öffnen und beim 
schließen jeweils eine Aktion auslösen soll. Wer jetzt beim 
programmieren nur den Taster im Kopf hatte der fängt jetzt wieder von 
vorne an über seine Routine nachzudenken.

Garry

von Gerald O. (garry)


Lesenswert?

Stefan ⛄ F. schrieb:
> Stefan ⛄ F. schrieb:
>> Man wird als Kunde auch daran denken, dass diese Tastaturen nach ein paar
>> Jahren erneuert werden müssen.
>
> Gerald O. schrieb:
>> Kommt darauf an ob es z.B. eine PC-Tastatur ist die man als
>> Verschleißteil bei Bedarf austauscht oder ein Gerät das für z.B. 10Jahre
>> Lebensdauer konzipiert ist  und alle Komponenten diese Zeitspanne bei
>> bestimmungsgemässen Gebrauch funktionieren müssen.
>
> Klar. Einer 15€ PC Tastatur würde ich nicht lange hinterher trauern.
>
> Es ging jedoch um anwendungsspezifische Folientastaturen, wie die
> abgebildete. Die kann man nicht mal eben schnell bei Saturn nachkaufen.

Da muss es dann mit dem Auftraggeber geklärt werden wie man damit 
umgeht: Billigere Tastatur die während der Produktlebensdauer 
ausgetauscht werden kann oder teure die die gesamte Lebensdauer 
durchhält.
Ersteres macht man gerne um mit Wartungsverträgen nach dem Verkauf auch 
noch Geld zu verdienen, letzteres wenn eine Wartung ehr nicht in 
Betracht kommt.

Garry

von Tastertör (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Es ging darum, das Loslassen bei der ersten
> Flanke zu erkennen. Dafür muss man unmittelbar vorher auf den Taster
> gedrückt haben und die dazu gehörige Entprellung/Entstörung überwunden
> haben.

Das Loslassen bei der 1. Flanke erkennen zu wollen ist genau so 
fehlerhaft, wie das Drücken mit der 1. Flanke zu bewerten. Es gibt 
Taster, die auch im gedrückten Zustand noch wackeligen Kontakt haben. 
Eine einzelne Flanke würde damit ein erneutes Drücken signalisieren. Ein 
symmetriche Entprellen von Drücken-Loslassen ist ein gute Wahl.

In meinen Routinen warte ich sogar 5 Zyklen je 10 ms ab. Zäh ist da 
garnichts und Probleme mit Prellen gibt es auch nicht.

von Stefan F. (Gast)


Lesenswert?

Gerald O. schrieb:
> Damit es wieder passt, denk an einen Türkontakt

Das passt gar nicht, denn bei einem Türkontakt wäre es extrem albern, um 
Millisekunden zu feilschen.

von Joachim B. (jar)


Lesenswert?

HildeK schrieb:
> Aber Prellen ist i.a. wesentlich kürzer. Um das Kontaktflattern
> wegzubekommen, reichen 10-30ms Entprellzeit üblicherweise locker aus.
> Mit deiner Entprellroutine ist das ja auch problemlos anpassbar. An der
> kann ich nur kritisieren, dass sie nicht auf Anhieb von jedem zu
> verstehen ist 😀.

4x 10ms ist ja auch bullet proof für auch die grottigsten Taster.
Funktioniert bei mir super, aber wer hindert uns auf 4x 5ms 
runterzugehen, oder mit IRMP den IRQ auf 15000/s 64µs zu setzen, bis 150 
zu zählen und dann zu entprellen?
Bei Zähler 15 (oder früher) kann sogar noch der Drehencoder abgefragt 
werden.

von A. S. (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Es ging jedoch um anwendungsspezifische Folientastaturen, wie die
> abgebildete. Die kann man nicht mal eben schnell bei Saturn nachkaufen.

Was geht denn daran kaputt? Knackfrösche, mit oder ohne Dom, mit oder 
ohne Nasen, mit richtiger spacer-folie und Footprint sind eine 
Wissenschaft für sich. Manche kennen die aber und bauen die so, dass sie 
10 Jahre problemlos halten. Und legen sich ein paar in Reserve.

von Stefan F. (Gast)


Lesenswert?

> Wer jetzt beim programmieren nur den Taster im Kopf hatte der
> fängt jetzt wieder von vorne an über seine Routine nachzudenken.

Wer sich einbildet, mit einer Routine alle denkbaren Anwendungsfälle 
optimal abzudecken, der ist auf dem Holzweg. Und zwar sowohl im kleinen 
(µC) als auch im Großen (Geschäftsanwednungen).

von Stefan F. (Gast)


Lesenswert?

Joachim B. schrieb:
> 4x 10ms ist ja auch bullet proof für auch die grottigsten Taster.

Nicht für den, den ich gerade abgebildet habe. Scrolle nochmal hoch.

von Stefan F. (Gast)


Lesenswert?

A. S. schrieb:
>> Es ging jedoch um anwendungsspezifische Folientastaturen, wie die
>> abgebildete.
> Was geht denn daran kaputt?

Die Kontakte. Abgesehen davon ist egal, was da kaputt geht. Sie gehen 
kaputt und sind extrem schwer auszutauschen, nachdem der Hersteller 
keinen Ersatzteilservice mehr anbietet. Ich kenne einige Leute, die 
Geräte mit solchen Tastaturen aufgrund negativer Erfahrungen 
grundsätzlich nicht mehr kaufen.

Verstehe ich nicht falsch: Das die Tastaturen nicht ewig halten ist an 
sich kein Problem. Dass sie aber in Produkten verbaut werden, zu denen 
man keinen  angemessenen Ersatzteilservice bekommt, das finde ich 
schlecht.

von Tastertör (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Joachim B. schrieb:
>> 4x 10ms ist ja auch bullet proof für auch die grottigsten Taster.
>
> Nicht für den, den ich gerade abgebildet habe. Scrolle nochmal hoch.

Gerade für den nehme ich ja 5 x 10 ms - für Drücken UND Loslassen.

von Joachim B. (jar)


Lesenswert?

Stefan ⛄ F. schrieb:
> Nicht für den, den ich gerade abgebildet habe

machst halt 4x 15ms oder 4x 25ms

Ich sehe gerade das Problem nicht, auf dem Teil 150 Anschläge pro Minute 
machen zu müssen.
Helena Matouskova 
https://de.wikipedia.org/wiki/Anschl%C3%A4ge_pro_Minute
wird eh keiner schlagen können oder wollen mit so einer Tastatur.

von Stefan F. (Gast)


Lesenswert?

Joachim B. schrieb:
> Ich sehe gerade das Problem nicht, auf dem Teil 150 Anschläge pro Minute
> machen zu müssen.

Da bin ich voll bei dir.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

W.S. schrieb:
> Nanana, nicht so abfällig.

Nanana, da spricht wieder der Richtige ;)
In Kicad Threads kannste ja nur abfällig, also warum prangerst das jetzt 
bei Anderen an?
Dabei war sein Beitrag nichtmal abfällig, du zeigst eben nur wieder 
deine Doppelstandards.

Auf Taste loslassen detektieren?
Es gibt wohl nix nervigereres als dass man eine Taste drückt und nix 
passiert.

Pedas Vorgehensweise ist super was Tasten entprellen angeht.
Da kann ich mich bei meinen Projekten sehr schnell durch meine Menüs 
drücken.

von Gerald O. (garry)


Lesenswert?

W.S. schrieb:
> HildeK schrieb:
>> So schaffe ich es immer wieder, an Aufzügen, an meiner Kaffeemaschine
>> u.ä. die Tasten so kurz zu drücken, dass die Geräte nicht reagieren. Und
>> das ist lästig.
>
> Eben. Und genau deswegen habe ich weiter oben geschrieben, daß Peters
> Methode, den Vorgang des Gedrückt-WERDENS entprellen zu wollen, zu einer
> zähen Taste führt, die die Mehrzahl der Kunden nicht akzeptieren.
>
> Und all diejenigen, die hier von Affen usw. schreiben, wollen auf eine
> Vielzahl von Tastendrücken pro Sekunde hinaus und haben das hier
> angerissene Problem einfach nicht verstanden.
>
> Aber jetzt ist das hoffentlich endlich kapiert worden.

Man kann entprellen ohne dass es zu einer sich zäh anfühlende Taste 
kommt insofern die Tastenmechanik dafür geeignet ist. 50ms Reaktionszeit 
fühlen sich nicht zäh an.

Beim Aufzug gibt es vermutlich andere Gründe als die Entprellung. Da 
wird der Tastendruck vermutlich erst in ein Protokoll verpackt, an den 
Steuerrechner geschickt,.. je nachdem von wann die Steuerung ist und wie 
das gelöst wurde können da ettliche weitere 10ms zusammenkommen.

Die Kaffemaschine muss billig sein, eventuell ist die Verzögerung auch 
aus Sicherheitsgründen gewollt (z.B. kein Einschalten durch abwischen).

Garry

von Lediglich nur ein Benutzer (Gast)


Lesenswert?

Also, unabhängig von dem Palaver hier hasse ich nicht funktionierende 
Tastaturen! Egal welche.

von Gerald O. (garry)


Lesenswert?

Stefan ⛄ F. schrieb:
>> Wer jetzt beim programmieren nur den Taster im Kopf hatte der
>> fängt jetzt wieder von vorne an über seine Routine nachzudenken.
>
> Wer sich einbildet, mit einer Routine alle denkbaren Anwendungsfälle
> optimal abzudecken, der ist auf dem Holzweg. Und zwar sowohl im kleinen
> (µC) als auch im Großen (Geschäftsanwednungen).

Heruntergebrochen ist hier die Aufgabenstellung "detektieren von 
mechanischen Schaltkontakten". Die macht man parametrierbar in 
Abtastfrequenz, Anzahl der zu erkennenden "Gleichzuständen" damit ein 
Pegelwechsel gültig gewertet wird und natürlich Anzahl der Tasten. Dann 
hat man auf der Ebene so ziemlich alles abgedeckt oder weiss zumindest 
wo die Grenzen liegen.

Garry

von Stefan F. (Gast)


Lesenswert?

Wenn du alle Eventualitäten abdeckst, läufst du Gefahr, dass dein Code 
zu groß wird oder zu viel CPU Last kostet. Einen Tod muss man sterben.

Beitrag #6587956 wurde von einem Moderator gelöscht.
von Martin V. (oldmax)


Lesenswert?

Hi
Ist schon interessant, wie ihr hier euer Profiwissen wehement zu Tage 
tragt. Sorry.
Ihr habt in einem Punkt Recht und das war glaub ich schon nach dem 
10.Beitrag klar, eine Tastatur muß funktionieren, nicht mehrfach bei 
einem Tastendruck und nicht erst nach gefühlten Tagen. Druck und 
unmittelbar gewünschte Reaktion. Sowas ist in meiner kleinen Assembler 
Routine implementiert. Zur Zeit zyklusabhängig 5 Zyklen stabilen Zustand 
abfragen. D.h., es kõnnen durchaus 10 aber auch 100 Zyklen sein. Merke 
ich, das der Taster nicht mehr angemessen reagiert, schmeiß ich ihn weg. 
So einfach ist das. Was soll man dann da noch großartig mit Programm 
dran rumfummeln. Was nicht taugt, gehört in die Tonne.
Man muß aber nicht Assembler können, um die Funktion zu verstehen, sie 
ist ausführlich kommentiert.
Auch eine Vorgehensweise ohne zeitraubende Entprellroutinen mittels 
Schalter mit Öffner und Schließer hab ich erwähnt. Sollte doch nun allen 
klar sein, zumal diese Probleme scheinbar euer Tagesgeschäft ist.
Und was hat das mit Arduino zu tun. Oder Hobby oder Bastelprojekt. 
Taster oder besser Schalterkontakte gehören eben zu den üblichen 
Eingabegeräten. Da reicht das Wissen, das Kontakte prellen und das man 
das irgendwie abfangen muß, um zuverlässig darauf zu reagieren.
 Es würde mich aber doch mächtig wundern, wenn industriell gefertigte 
Produkte da noch Probleme mit haben. Wenn das so ist, dann hat 
vielleicht ein frisch von der Uni entfleuchter Jung-Ing seine Finger im 
Spiel, aber gestandene Profis dürften bei vielen Beiträgen ein leichtes 
Schmunzeln bis hin zum breiten Grinsen im Gesicht haben.
Gruß oldmax

von Stefan F. (Gast)


Lesenswert?

Martin V. schrieb:
> Es würde mich aber doch mächtig wundern, wenn industriell gefertigte
> Produkte da noch Probleme mit haben.

Du glaubst gar nicht, wie schlecht manche Produkte sind. Ich hatte mal 
eine Uhr, die man ohne nachgerüstete Tiefpässe unmöglich einstellen 
konnte. Verkauft wurde sie trotzdem.

von Martin V. (oldmax)


Lesenswert?

Hi
Stefan ⛄ F. schrieb:
> Wenn du alle Eventualitäten abdeckst, läufst du Gefahr, dass dein Code
> zu groß wird oder zu viel CPU Last kostet. Einen Tod muss man sterben.

Na ja, ich weiß nicht,ob du bei deiner Meinung bleibst, wenn durch eine 
Fehlfunktion dein Konto geplündert oder die Gesundheit eines Mitmenschen 
gefährdet wird. Oder die Chemiefabrik nebenan abfackelt.
Sicher kann man das abwägen, ob Aufwand größer Nutzen und den ein- oder 
anderen Kompromiss zulassen/eingehen. Aber kontaktbehaftete Eingaben 
sicher zu erfassen sollte doch wirklich nicht zu Kompromissen führen, 
sondern zu zuverlässiger Erfassung einer Information.
Gruß oldmax

von Joachim B. (jar)


Lesenswert?

Lediglich nur ein Benutzer schrieb:
> Also, unabhängig von dem Palaver hier hasse ich nicht funktionierende
> Tastaturen! Egal welche.

bei meinem Antennenmessgerät KWS AMA 210 ist es nun fast unmöglich ein 
Menü oder einen Programmspeicher zu wählen, entweder kommt die Ziffer 
nicht oder doppelt was recht nervig ist.

Ich bin nur zu faul das Teil total auseiander zu nehmen und alle Tasten 
raauszuwerfen oder mit einem Arduino miniPRO PeDas Routine und neue 
Tasten einzubauen!
Die EL Folie schwächelt auch, wie einfach wäre doch LED Tausch.

von Stefan F. (Gast)


Lesenswert?

Martin V. schrieb:
> Na ja, ich weiß nicht,ob du bei deiner Meinung bleibst, wenn durch eine
> Fehlfunktion dein Konto geplündert oder die Gesundheit eines Mitmenschen
> gefährdet wird

Das ist schon wieder ein spezieller Fall. Der Code muss immer zum 
Anwendungsfall passen. Wenn es so wichtig ist, dann muss man auch die 
nötigen Kosten hin nehmen.

Doch derart hohe Sicherheitsmaßstäbe sind für viele Anwendungen wiederum 
völlig unangemessen. Viele Produkte sollen nämlich möglichst viel Gewinn 
abwerfen.

Die ehemals deutsche Haltung, nur Spitzenqualität liefern zu wollen, hat 
dazu geführt, dass Elektronik Entwicklung inzwischen weitgehend an 
anderen Orten stattfindet. AEG, Grundig, Uher, Loewe, Telefunken, Braun, 
... sie alle sind schon lange verloren.

Glaube mir, dein Stichwort "Konto plündern" ist mir nicht unbekannt. Im 
echten Leben entwickle ich nämlich Payment Systeme, Fraud Prevention und 
Software für Vertragsverwaltung bei Versicherungen, Online Händlern und 
Mobilfunknetzen. Wenn ich Software entwickle, muss ich zwischen den 
Anwendungsfällen unterscheiden, sonst werde ich (und die Systeme) 
insgesamt zu langsam.

von Torsten (Gast)


Lesenswert?

Mw E. schrieb:
> Auf Taste loslassen detektieren?
> Es gibt wohl nix nervigereres als dass man eine Taste drückt und nix
> passiert.

Meine linke Maustaste funktioniert so - und das ist prima!
In meinen Anwendungen frage ich die Tasten genauso ab, mit der Länge des 
Tastendrucks kann man wunderbar Doppelfunktionen realisieren. Als 
"langen Tastendruck" haben sich bei mir 400ms bewährt.
Viele Grüße
Torsten

von Gerald O. (garry)


Lesenswert?

Stefan ⛄ F. schrieb:
> Wenn du alle Eventualitäten abdeckst, läufst du Gefahr, dass dein Code
> zu groß wird oder zu viel CPU Last kostet. Einen Tod muss man sterben.

Die Kunst ist es dabei den Code trotzdem schlank und die Rechenzeit kurz 
zu halten.
Eine vergessene Eventualität kann schnell sehr viel teurerer werden als 
eine nicht benötigte implementierte Eventualität.

Garry

von Stefan F. (Gast)


Lesenswert?

Gerald O. schrieb:
> Eine vergessene Eventualität kann schnell sehr viel teurerer werden als
> eine nicht benötigte implementierte Eventualität.

Sicher. Aber die allumfassende ultimative Bibliothek kann nicht 
verhindern, falsch angewendet zu werden. Je komplexer der Code, umso 
höher ist das Risiko, dass sich darin oder in seiner Anwendung Fehler 
verstecken.

von Gerald O. (garry)


Lesenswert?

Torsten schrieb:

> Meine linke Maustaste funktioniert so - und das ist prima!
> In meinen Anwendungen frage ich die Tasten genauso ab, mit der Länge des
> Tastendrucks kann man wunderbar Doppelfunktionen realisieren. Als
> "langen Tastendruck" haben sich bei mir 400ms bewährt.

Das ist dann aber schon die nächste Ebene / Applikation, das hat dann 
nichts mehr mit dem Entprellen / Entstören zu tun.

Garry

von Stefan F. (Gast)


Lesenswert?

Gerald O. schrieb:
>> Meine linke Maustaste
> Das ist dann aber schon die nächste Ebene / Applikation, das hat dann
> nichts mehr mit dem Entprellen / Entstören zu tun.

Es ist aber ein gute Beispiel, wo wir uns alle gut daran gewöhnt haben, 
dass die Taste erst beim Loslassen eine Aktion auslöst.

von Torsten (Gast)


Lesenswert?

Entprellt, entstört und lässt 2 Funktionen zu:
1
void Taster(int &P, unsigned long &Z, int Taster, int Zeitmin, int Zeitmax, char Anschluss) {
2
  switch (P) {
3
    //Schritt 1: Entprellen mit der kurzen Zeit (Zeitmin)
4
    case 1:
5
      if (((millis() - Z) > Zeitmin) && (digitalRead(Taster) == LOW)) {
6
        P = 2;
7
        Z = millis();
8
      }
9
      break;
10
    //Schritt 2: Auswertung der Funktion des Tastendrucks über die Zeit
11
    case 2:
12
      //Auswertung kurzer Tastendruck, Zeit zwischen Zeitmin und Zeitmax
13
      if (((millis() - Z) > Zeitmin) && ((millis() - Z) < Zeitmax) && (digitalRead(Taster) == HIGH)) {
14
        P = 3;
15
        Z = millis();
16
        //Aktionen bei einem kurzen Tastendruck
17
      }
18
      //Auswertung langer Tastendruck, Zeit größer als Zeitmax
19
      if (((millis() - Z) > Zeitmax) && (digitalRead(Taster) == LOW)) {
20
        P = 3;
21
        Z = millis();
22
        //Aktionen bei einem langen Tastendruck
23
      }
24
      break;
25
    //Schritt 3: Entprellen mit der kurzen Zeit (Zeitmin)
26
    case 3:
27
      if (((millis() - Z) > Zeitmin) && (digitalRead(Taster) == HIGH)) {
28
        P = 1;
29
        Z = millis();
30
      }
31
      break;
32
    //Bei keiner gültigen Schrittnummer bei Schritt 1 wieder anfangen
33
    default:
34
      P = 1;
35
      break;
36
  }
37
}
Viele Grüße
Torsten

(Mod: C-Formatierung hinzugefügt)

: Bearbeitet durch Moderator
von Gerald O. (garry)


Lesenswert?

Stefan ⛄ F. schrieb:
> Je komplexer der Code, umso
> höher ist das Risiko, dass sich darin oder in seiner Anwendung Fehler
> verstecken.

Methode und Codequalität sollte man nicht durcheinander würfeln.

Garry

von Stefan F. (Gast)


Lesenswert?

Gerald O. schrieb:
> Methode und Codequalität sollte man nicht durcheinander würfeln.

Wie gesagt: Wenn Geld keine Rolle spielt, kann man es perfekt lösen. Nur 
spielt Geld leider immer eine Rolle. Meistens eine sehr viel größere, 
als uns lieb ist.

Ganz ehrlich, ich kann auf ein gutes Programm von mir stolz sein und 
mich daran erfreuen. Ich habe mich aber noch nie daran erfreut, für 
irgend einen reichen Kerl, der es gar nicht nötig hat, Geld gespart zu 
haben. Und doch ist es das, was ich jeden Tag tun muss. Sonst wäre ich 
längst vom Fenster.

Beitrag #6588119 wurde von einem Moderator gelöscht.
von Lediglich nur ein Benutzer (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Gerald O. schrieb:
>> Methode und Codequalität sollte man nicht durcheinander würfeln.
>
> Wie gesagt: Wenn Geld keine Rolle spielt, kann man es perfekt lösen. Nur
> spielt Geld leider immer eine Rolle. Meistens eine sehr viel größere,
> als uns lieb ist.
>
> Ganz ehrlich, ich kann auf ein gutes Programm von mir stolz sein und
> mich daran erfreuen. Ich habe mich aber noch nie daran erfreut, für
> irgend einen reichen Kerl, der es gar nicht nötig hat, Geld gespart zu
> haben. Und doch ist es das, was ich jeden Tag tun muss. Sonst wäre ich
> längst vom Fenster.

Dann bist Du völlig normal. :)

von Gerald O. (garry)


Lesenswert?

Stefan ⛄ F. schrieb:
> Martin V. schrieb:
>> Na ja, ich weiß nicht,ob du bei deiner Meinung bleibst, wenn durch eine
>> Fehlfunktion dein Konto geplündert oder die Gesundheit eines Mitmenschen
>> gefährdet wird
>
> Das ist schon wieder ein spezieller Fall. Der Code muss immer zum
> Anwendungsfall passen. Wenn es so wichtig ist, dann muss man auch die
> nötigen Kosten hin nehmen.

Die Routine fürs Tastenentprellen muss man nur einmal richtig machen, 
dann ist es egal was für ein Anwendungsfall dahinter steht, dann kann 
man die auch für billig Anwendungen nehmen -> Auftraggeber zufrieden, 
Kunde zufrieden, Mitbewerber ausgestochen der schnell eine billige 
Routine neu implementiert hat.

> Doch derart hohe Sicherheitsmaßstäbe sind für viele Anwendungen wiederum
> völlig unangemessen. Viele Produkte sollen nämlich möglichst viel Gewinn
> abwerfen.
Sowas fällt dann unter Stand der Technik. Schlechte Bedienqualität durch 
magelhafte Tastenroutinen sollte man heute nicht mehr diskutieren, auch 
unter Kostenaspekt.

> Die ehemals deutsche Haltung, nur Spitzenqualität liefern zu wollen, hat
> dazu geführt, dass Elektronik Entwicklung inzwischen weitgehend an
> anderen Orten stattfindet. AEG, Grundig, Uher, Loewe, Telefunken, Braun,
> ... sie alle sind schon lange verloren.
Das hat aber was mit den hohen Lohnkosten zu tun, nicht mit den 
Qualitätsansprüchen.

Garry

von Gerald O. (garry)


Lesenswert?

Stefan ⛄ F. schrieb:
>> Methode und Codequalität sollte man nicht durcheinander würfeln.
>
> Wie gesagt: Wenn Geld keine Rolle spielt, kann man es perfekt lösen. Nur
> spielt Geld leider immer eine Rolle. Meistens eine sehr viel größere,
> als uns lieb ist.

Perfekt ist relativ.
Man muss aufpassen dass man nicht am falschen Ende spart und den Kunden 
wegen sowas verärgert bzw. dann viel Zeit investieren muss einen Fehler 
zu finden und zu beheben.

Garry

von Peter D. (peda)


Lesenswert?

Martin V. schrieb:
> Es würde mich aber doch mächtig wundern, wenn industriell gefertigte
> Produkte da noch Probleme mit haben. Wenn das so ist, dann hat
> vielleicht ein frisch von der Uni entfleuchter Jung-Ing seine Finger im
> Spiel, aber gestandene Profis dürften bei vielen Beiträgen ein leichtes
> Schmunzeln bis hin zum breiten Grinsen im Gesicht haben.

Dann hast Du zu wenig Geräte mit MCs in Gebrauch. Geschätzt sind 50% der 
Tastenabfragen mangelhaft. Die genannte Aufzugssteuerung ist nur die 
Spitze des Eisbergs. Kaffeemaschine, Funkuhr, Oszi, Funktionsgenerator 
und und und.
Das Oszi schaltet z.B. den Bereich um, wenn ich das Labornetzteil 
daneben einschalte.

Die Programmierprofis mögen zwar mit Labview, Python, Java usw. die 
super Cracks sein, von realer Hardware haben sie aber keinen blassen 
Schimmer. Das Problem wird auch dadurch verschärft, daß die Hardware- 
und die Softwareentwicklung verschiedene Abteilungen machen.

von Gerald O. (garry)


Lesenswert?

Torsten schrieb:
> Entprellt, entstört und lässt 2 Funktionen zu:
>
> void Taster(int &P, unsigned long &Z, int Taster, int Zeitmin, int
> Zeitmax, char Anschluss) {
[Code]
Für Hobbyprogrammierer am Arduino & Co OK, im Profibereich viel Luft 
nach oben... Für Zeitmessungen reicht da ein 8-Bit-Wert, verschachtelte 
Funktionsaufrufe für jeden Taster extra notwendig,...

Garry

von Martin V. (oldmax)


Lesenswert?

Hi
Stefan ⛄ F. schrieb:
> Martin V. schrieb:
>> Na ja, ich weiß nicht,ob du bei deiner Meinung bleibst, wenn durch eine
>> Fehlfunktion dein Konto geplündert oder die Gesundheit eines Mitmenschen
>> gefährdet wird
>
> Das ist schon wieder ein spezieller Fall. Der Code muss immer zum
> Anwendungsfall passen. Wenn es so wichtig ist, dann muss man auch die
> nötigen Kosten hin nehmen.
>
> Doch derart hohe Sicherheitsmaßstäbe sind für viele Anwendungen wiederum
> völlig unangemessen. Viele Produkte sollen nämlich möglichst viel Gewinn
> abwerfen

Ich hab nicht gedacht, das ich so schwer zu verstehen bin. Daher noch 
einmal
Ich denke, das ein Profi so was banales wie eine kontaktbehaftete 
Eingabe im Griff hat und weiß, wann die Kontakte so schlecht sind, das 
Softwaremäßig keine sichere Verarbeitung mehr machbar ist. Auch 
hardwaremäßig ist dann auch Schluß und die einzig sinnvolle Maßnahme ist 
ein Austausch. Entprellung ist kein Hexenwerk und muß auch nicht 
unterschiedlich sicher sein. OK, bei Maschinensteuerungen kenn ich 
spezielle Eingabegeräte, aber da reden wir nicht vom Prellen, sondern 
von anderen Sicherheitskriterien. Hier geht es um mechanische Kontakte, 
die eingelesen werden müssen. Da hat man eine Entprellroutinen , 
erfindet eine oder kupfert eine ab. Aber nur einmal und nicht für zig 
Kontaktformen extra.
Du hast da so einen schönen Taster abgebildet. Gut, ich hab auch solche 
eingesetzt und meine Entprellroutine kommt damit klar. Wobei ich jetzt 
nicht den Anspruch erhebe, die beste Methode erfunden zu haben. 
Vermutlich haben zig Programmierer vor mir schon auf diese Weise ihre 
Kontakte entprellt.
Aber, wenn der Taster so grottenschlecht ist, wirf ihn weg, es sind nur 
0.50€. Ein anderer Taster, der zuverlässiger ist, spart im Endeffekt 
wesentlich mehr ein.
Gruß oldmax

von Torsten (Gast)


Lesenswert?

Ja, genau, der Hobbyprogrammierer mit z.B. Arduino sollte angesprochen 
werden. Der TO tats ja auch.
Flash und RAM kann man sicher auch noch sparen..., und natürlich 
professionellere Programmiertechniken verwenden.
Ich habs für mich, passend zu meinen Kenntnissen, gerne lesbar.
Vielleicht kann ja der ein oder andere daraus seine eigene Lösung 
ableiten.
Viele Grüße
Torsten

von Peter D. (peda)


Lesenswert?

Ich hab noch nen alten Weltempfänger aus den 90-ern RF-B45 als 
Weckradio. Damals konnte man noch sauber programmieren und gute Tasten 
einsetzen (leichtgängig, Druckpunkt). Der funktioniert immer noch völlig 
prellfrei. Man kann ihn daher auch im Dunkeln bedienen (z.B. Weckzeit 
ändern).

von Gerald O. (garry)


Lesenswert?

Torsten schrieb:
> Ja, genau, der Hobbyprogrammierer mit z.B. Arduino sollte angesprochen
> werden. Der TO tats ja auch.
> Flash und RAM kann man sicher auch noch sparen..., und natürlich
> professionellere Programmiertechniken verwenden.
> Ich habs für mich, passend zu meinen Kenntnissen, gerne lesbar.
> Vielleicht kann ja der ein oder andere daraus seine eigene Lösung
> ableiten.
> Viele Grüße
> Torsten

Absolut OK in dem Zusammenhang.
Tipp zur Lesbarkeit: Wenn man den Datentyp im Variablennamen mit 
aufführt (z.B. "ui8Taster" statt "Taster") weiss man immer gleich mit 
was man es bei der Variablen zu tun hat.

Gruß
Garry

von Einer K. (Gast)


Lesenswert?

Gerald O. schrieb:
> Tipp zur Lesbarkeit: Wenn man den Datentyp im Variablennamen mit
> aufführt (z.B. "ui8Taster" statt "Taster") weiss man immer gleich mit
> was man es bei der Variablen zu tun hat.

Aua...
Die ungarische Notation!

Kann ich nicht, will ich nicht, tue ich nicht.
Nur unter Zwang.

von Joachim B. (jar)


Lesenswert?

Stefan ⛄ F. schrieb:
> wo wir uns alle gut daran gewöhnt haben,
> dass die Taste erst beim Loslassen eine Aktion auslöst.

stimmt ja auch, wenn ich mich recht erinnere hatte PeDa dafür auch mal 
eine Lösung.

Bei der MAUS sind das auch 2 verknüpfte Funktionen,
Tastendruck selektieren und Fenster verschieben solange gedrückt und 
Fenster loslassen erst nach Taste lösen.
Im Prinzip sind da 2 Entprellungen, 1 drücken und dann 2 loslassen

Irgendwo findet man diese Lösung auch noch.

: Bearbeitet durch User
von Gerald O. (garry)


Lesenswert?

Arduino Fanboy D. schrieb:
> Gerald O. schrieb:
>> Tipp zur Lesbarkeit: Wenn man den Datentyp im Variablennamen mit
>> aufführt (z.B. "ui8Taster" statt "Taster") weiss man immer gleich mit
>> was man es bei der Variablen zu tun hat.
>
> Aua...
> Die ungarische Notation!
>
> Kann ich nicht, will ich nicht, tue ich nicht.
> Nur unter Zwang.

Auf dem 8-Biter bei hardwarenaher Programmierung ist es ein Vorteil 
leicht zu erkennen ob man es mit einer 8 oder 16 Bit Variable zu tun 
hat. Viele Fehler passieren hier durch die Vermischung und zu 
großzügigen Umgang mit 16Bit Variablen in IRQ-Routinen.

von M. K. (sylaina)


Lesenswert?

Martin V. schrieb:
> Na ja, ich weiß nicht,ob du bei deiner Meinung bleibst, wenn durch eine
> Fehlfunktion dein Konto geplündert oder die Gesundheit eines Mitmenschen
> gefährdet wird. Oder die Chemiefabrik nebenan abfackelt.

Meine Fresse, jetzt wirklich? Immer solche völlig abstrusen 
Extrembeispiele, macht ihr das auch im RL so? Alter Schwede

von Martin V. (oldmax)


Lesenswert?

Hi
M. K. schrieb:
> Martin V. schrieb:
>> Na ja, ich weiß nicht,ob du bei deiner Meinung bleibst, wenn durch eine
>> Fehlfunktion dein Konto geplündert oder die Gesundheit eines Mitmenschen
>> gefährdet wird. Oder die Chemiefabrik nebenan abfackelt.
>
> Meine Fresse, jetzt wirklich? Immer solche völlig abstrusen
> Extrembeispiele, macht ihr das auch im RL so? Alter Schwede

Ja. Auch wenn ich Rentner und jetzt nur noch hobbymäßig unterwegs bin, 
Versuche ich alle Eventualitäten zu erwischen und gut, das du das 
zugibst, das du dir da weniger Gedanken machst. Damit wärest du bei mir 
auf der schwarzen Liste als Programmierer und Gerätehersteller. Es ist 
nicht der Punkt, das du nie 100% erreichst, es ist der Punkt, das du es 
scheinbar gar nicht erreichen willst.
Aber jetzt habt ihr Mal wieder Diskussionsstoff und werdet meinen 
Beitrag wieder zerpflücken so von wegen, ich würde euch etwas 
unterstellen und so ist es nie gesagt worden. Richtig, so ist es nicht 
gesagt worden, aber so kommt es bei mir und viel schlimmer, vielleicht 
an einer anderen, wichtigen Person an. Also, denkt auch Mal bei euren 
öffentlichen Beiträgen darüber nach.
Gruß oldmax

von Joachim B. (jar)


Lesenswert?

Martin V. schrieb:
> Versuche ich alle Eventualitäten zu erwischen

kenne ich trotzdem fällt man mal rein, wie war das mit den Pferden und 
der Apotheke?
Manches hast du selber auch nicht in der Hand um "alle Eventualitäten" 
zu erwischen.
Wenn Bauteile nicht dem Datenblatt entsprechen oder das DB falsch ist, 
wenn gefälschte Bauteile geliefert werden, oder sich das Innenleben von 
Bauteilen ändert, kleinere DIE.
https://de.wikipedia.org/wiki/Die_(Halbleitertechnik)

Der 2N3055 von heute soll ja auch nicht mehr dem von 1975 entsprechen.

von M. K. (sylaina)


Lesenswert?

Martin V. schrieb:
> Ja. Auch wenn ich Rentner und jetzt nur noch hobbymäßig unterwegs bin,
> Versuche ich alle Eventualitäten zu erwischen und gut, das du das
> zugibst, das du dir da weniger Gedanken machst.

Und woraus schließt du, dass ich mir darüber weniger Gedanken mache? Du 
findest es also blöd wenn ich mich bei meinen Projekten auf das 
wesentliche konzentriere, ja? Vielleicht hast du auch nur meinen Post 
nicht verstanden aber keine falsche Scheu, als Rentner dürftest du 
genügend Zeit haben meinen Post mehrfach zu lesen und darüber 
nachzudenken, was ich noch damit gemeint haben könnte. Ich bin mir 
sicher, auch dir wird dabei ein Licht aufgehen ;)

von Teo (Gast)


Lesenswert?

M. K. schrieb:
> Martin V. schrieb:
>> Ja. Auch wenn ich Rentner und jetzt nur noch hobbymäßig unterwegs bin,
>> Versuche ich alle Eventualitäten zu erwischen und gut, das du das
>> zugibst, das du dir da weniger Gedanken machst.
>
> Und woraus schließt du, dass ich mir darüber weniger Gedanken mache?

Wie jetzt, ALLE für das aktuelle Projekt, oder ALLE im sinne von 
"LED-Lampen-Schlüsselanhänger bis Schleudersitz-Auslöser"?-/

von Martin V. (oldmax)


Lesenswert?

Hi
M. K. schrieb:
> Du
> findest es also blöd

Sorry, ich find überhaupt nix blöd und nutze meine Zeit auch nicht, um 
beiträge mehrfach zu lesen, um zu verstehen. zugegeben, manche schon, 
das kommt schon mal vor.

Martin V. schrieb:
> Aber jetzt habt ihr Mal wieder Diskussionsstoff und werdet meinen
> Beitrag wieder zerpflücken

Mach ich selten, aber so wie ich es geahnt hab. Hättet ihr den Beitrag 
zuende gelesen und verstanden...

Teo schrieb:
> Wie jetzt, ALLE

Bezieht sich das auf "alle Eventualitäten"? Ja, so hab ich es 
geschrieben und auch gemeint, ich "versuche". Das heißt nicht, das ich 
es immer schaffe, was sich dann irgendwann einmal in einer Fehlfunktion 
bemerkbar macht. Aber daraus lerne ich und auch wenns vielleicht blöd 
klingt, es ist wichtig, Fehler zu machen und ja, das auch zuzugeben. Nur 
so steht man zur Verantwortung und lernt daraus. Und bitte, wenn ich mal 
übertriebene Vergleiche ansetze, nehmt das nicht immer "wörtlich". 
Trotzdem können Fehler durchaus schwerwiegend sein. Ich hab in meiner 
über 30jährigen Tätigkeit als Anlagenprogrammierer auch ein paar Fehler 
gemacht und jeder verursachte einen Schaden in 5 stelliger Höhe. 
Gottseidank gab es nur Sach- und keine Personenschäden.Ich habe mich 
aber immer der Verantwortung gestellt und nie die Schuld irgendeinem 
Bauteil oder einer Software zugeschoben, obwohl es zu 90% so war. Aber 
es war meine Schuld, es eben nicht richtig geprüft zu haben und eben 
diese Eventualität nicht erkannt habe. Klar, meine Basteleien sind 
überhaupt nicht mehr so zu betrachten, aber trotzdem ärgern mich 
Fehlfunktionen und ich will nicht mit unzulänglichen und unzuverlässigen 
Geräten arbeiten. Also, noch mal, ich bin kein 1005tiger und auch nicht 
95%, aber ich versuche, dahin zu kommen und auch, wenn die Länge meines 
Lebens dafür nicht ausreichen wird, ich versuche es trotzdem.
Gruß oldmax

von M. K. (sylaina)


Lesenswert?

Martin V. schrieb:
> Ja, so hab ich es
> geschrieben und auch gemeint

Martin V. schrieb:
> Und bitte, wenn ich mal
> übertriebene Vergleiche ansetze, nehmt das nicht immer "wörtlich".

Ja was denn nun? Mal meinst du was du schreibst, mal übertreibst du. Wie 
sollen das andere Leser denn differenzieren? Wie soll man dich denn so 
verstehen?

von Teo (Gast)


Lesenswert?

Ja so ist das halt, Jeder will recht behalten. Da werden die Argumente 
halt immer obskurer, bzw. die Rahmenbedingungen ausgeweitet. ;D

von M. K. (sylaina)


Lesenswert?

Martin V. schrieb:
> Ich hab in meiner
> über 30jährigen Tätigkeit als Anlagenprogrammierer auch ein paar Fehler
> gemacht und jeder verursachte einen Schaden in 5 stelliger Höhe.
> Gottseidank gab es nur Sach- und keine Personenschäden.Ich habe mich
> aber immer der Verantwortung gestellt und nie die Schuld irgendeinem
> Bauteil oder einer Software zugeschoben, obwohl es zu 90% so war.

Oh bitte nicht so einen Quatsch schreiben. Wie sag bei dir die 
Verantwortung aus? Hast du gesagt es war dein Fehler oder hast du die 
Schäden dafür bezahlt? Nichts gegen dich aber mich kotzt diese Phrase 
"Ich stelle mich meiner Verantwortung" in letzter Zeit einfach nur an da 
nichts als hohle Worte dahinter stehen.

von W.S. (Gast)


Lesenswert?

Teo schrieb:
> Ja so ist das halt, Jeder will recht behalten. Da werden die Argumente
> halt immer obskurer,...

Tja, das ist in diesem Forum so.
Der TO hat sich inzwischen zurückgezogen.

Vielleicht hilft es, mal eine Rückkehr zu den Prinzipien zu versuchen:

1. Taster sind mechanisch und prellen. Also müssen sie entprellt werden.
Ich denke, dem dürften alle hier zustimmen.

2. Das Entprellen nach dem Tastendruck, also das Loslassen muß sein.
Das werden wohl auch alle bejahen.

3. Das Entprellen vor dem Tastendruck muß nach Ansicht einiger sein, 
weil man Entladungen und Störungen befürchtet.
Ich teile diese Ansicht nicht, denn das Entprellen gemäß Punkt 2 reicht 
für die sichere Bedienung aus und die Zeitverzögerung vor dem 
Tastendruck ist kundenseitig unerwünscht.

4. Das Diskutieren von Entprellzeiten ist fallabhängig, dürfte aber im 
Bereich von 20..50 ms wohl für alles, was sich Taster nennen darf, 
zutreffen. Schaltkontakte an Türen, Fahrstühlen, Atombomben oder 
Schiffswerften und allem was dazwischen liegt, klammern wir hier mal 
aus.

So, und nun kann man sich auf das Diskutieren des Punktes 3 
konzentrieren. Das dürfte wohl das Sinnvollste sein, wenn dieser Thread 
nicht in purem Gezänk enden soll.

W.S.

von Stefan F. (Gast)


Lesenswert?

W.S. schrieb:
> So, und nun kann man sich auf das Diskutieren des Punktes 3
> konzentrieren.

Manche Leute (wie ich) schalten einfach einen Kondensator parallel zum 
Taster anstatt zu diskutieren.

von A. S. (Gast)


Lesenswert?

M. K. schrieb:
> mich kotzt diese Phrase "Ich stelle mich meiner Verantwortung" in
> letzter Zeit einfach nur an da nichts als hohle Worte dahinter stehen

Das Problem hab ich auch. Vor allem im vorraus, "auf meine 
Verantwortung" Ein Kollege fragte dann immer zurück "mit wie vielen 
Monatsgehältern". Manche verstanden nicht Mal die Frage.

Noch schlimmer sind jene, die reine Entscheidungen treffen und nicht 
einmal Antworten auf die sich daraus ergebenden Fragen geben können. 
Also weder im wörtlichen, noch im übertragenen Sinn Verantwortung 
übernehmen trotz aufrichtiger Beteuerung

von Peter D. (peda)


Lesenswert?

W.S. schrieb:
> die Zeitverzögerung vor dem
> Tastendruck ist kundenseitig unerwünscht.

Würde mich mal interessieren, was für nervöse Kunden das sind. Und 
welche Bedienmenüs es erfordern, 10* je s auf ne Taste zu hämmern.

Bei uns hat sich noch kein Kunde beschwert oder Tasten zerdroschen. Im 
Gegenteil, die sind erstaunt, wie schnell die Tasten im Gegensatz zu 
einer PC-Steuerung reagieren.
Beim PC muß sich ja der Tastendruck vom Controller über USB-Polling über 
Treiber-Libs über die Applikation bis zum Bildschirm kämpfen. Das dauert 
erheblich länger, als läppische 40ms.

von Stefan F. (Gast)


Lesenswert?

Martin V. schrieb:
> Du hast da so einen schönen Taster abgebildet...
> Aber, wenn der Taster so grottenschlecht ist, wirf ihn weg, es sind nur
> 0.50€.

Habe ich gemacht.

> Ein anderer Taster, der zuverlässiger ist, spart im Endeffekt
> wesentlich mehr ein.

Eben deswegen.

von A. S. (Gast)


Lesenswert?

Peter D. schrieb:
> Würde mich mal interessieren, was für nervöse Kunden das sind. Und
> welche Bedienmenüs es erfordern, 10* je s auf ne Taste zu hämmern.

Wie schon gesagt, im wesentlichen wenn man es häufig und blind bedient. 
Ein Handgerät übrigens kaum. Nur wenn die Tasten fest an einem Fest 
montierten Bedienteil sind, (oder flach aufliegen wie eine PC-Tastatur).
Bei einem Handgerät (ich hab Mal Handmessgeräte gemacht) ist das kein 
Thema. Bei Bedienteilen am Schwanenhals auch nicht.

Und was auch mehrfach missverstanden wird: selbst ein Tastendruck muss 
dann trotz prellen bei < 40ms erkannt werden.

Nimm einfach Mal eine Folientastatur und klebe sie an den Türrahmen. Und 
dann stell dir vor, du musst alle 11 sek mit enter bestätigen

von Val D. (valeri_d)


Lesenswert?

W.S. schrieb:
> Teo schrieb:
>> Ja so ist das halt, Jeder will recht behalten. Da werden die Argumente
>> halt immer obskurer,...
>
> Tja, das ist in diesem Forum so.
> Der TO hat sich inzwischen zurückgezogen.
>
Alles gut :). Ich bin noch da und habe für mich sehr viel dabei gelernt. 
Muss ich aber feststellen, dass für mich sehr oft ein generelles 
Vorgehen in Frage kommt. Doch das soll nicht bedeutet, dass es für 
speziellere Fälle nichts besseres gibt. Und, "leider" sehe ich wenig 
Diskussion in diesem Dialog, sondern mehr unterschiedliche Verfahren. 
Und je nach dem, ob man eine normale Taste entprellt, eine 
Drehreglertaste zum Navigieren im Menü, Fensterkontakte oder 
Feuchtigkeits- oder Näherunsssensor wahrgenommen wird usw. - überall 
kann die Methode ein wenig eine Andere sein. Für mich persönlich gilt. 
Wenn die Taste für sich alleine wichtig ist
z.B. in der Sicherheitt, dann ist es auch im separaten Kontext zu lösen. 
Wenn es um die Tasten oder um die Tasten-ähnliche Aktionen handelt, die 
eine Reaktion verursachen, dann ist das Ganze zu betrachten und nicht 
nur die Taste für sich, und z.B. zweitrangig, ob es sich im Menü 
wiederspiegelt.... Evtl. wird von manchen es anders gesehen, und so soll 
es auch so sein.

von Einer K. (Gast)


Lesenswert?

Valeri D. schrieb:
> Muss ich aber feststellen, dass für mich sehr oft ein generelles
> Vorgehen in Frage kommt.

Bist du denn jetzt von deiner eingangs vorgestellten "Entprellung" 
runter?

von Peter D. (peda)


Lesenswert?

A. S. schrieb:
> Nimm einfach Mal eine Folientastatur und klebe sie an den Türrahmen. Und
> dann stell dir vor, du musst alle 11 sek mit enter bestätigen

Für solche Anwendungen sind Pilztaster üblich, z.B. Bedienung der 
Laufkatze.
Es gibt zwar auch Folientasten mit fühlbarer Erhebung und Knackfrosch, 
aber die brauchen eine recht hohe Betätigungskraft. Da kann ich gut 
verstehen, daß es zu Beschädigungen kommt.
Man sollte sich genau überlegen, ob die schlechte Haptik von 
Folientasten zumutbar ist. Man kann den Kunden auch schnell wieder los 
sein.

von Teo (Gast)


Lesenswert?

Valeri D. schrieb:
> Und je nach dem, ob man eine normale Taste entprellt, eine
> Drehreglertaste

Letzteres vergiss mal schnell wieder!
Dank des Gray-Code könnte durch das Prellen höchsten ein Schritt 
verloren gehen. Deshalb und nicht weniger der Bedienfreundlichkeit 
wegen, tastet man die Dinger mit knapp 1kHz(*) ab, und gut is dat. :)


*) >200Hz "reichen" auch, nur "Zwirbler" werden da meckern! ;D

von Gerald O. (garry)


Lesenswert?

Teo schrieb:
> Valeri D. schrieb:
>> Und je nach dem, ob man eine normale Taste entprellt, eine
>> Drehreglertaste
>
> Letzteres vergiss mal schnell wieder!
> Dank des Gray-Code könnte durch das Prellen höchsten ein Schritt

Gray-Code ist schon fast wieder ein Besonderheit bei den 
Drehdrückstellern/Rotary Encoder (Zum Regler werden sie erst bedingt in 
der Gesamtfunktion).
Zu Unterscheiden ist da u.a. zwischen den mechanischen, optischen und 
magnetischen Varianten. Da gibt es dann unterschiedliche Ausgangssignale 
für die man unterschiedliche Auswertroutinen benötigt.

> verloren gehen. Deshalb und nicht weniger der Bedienfreundlichkeit
> wegen, tastet man die Dinger mit knapp 1kHz(*) ab, und gut is dat. :)

Schlimmer als verlorene Impulse sind plötzlich gegenläufig detektierte 
Impulse. Konnte man z.b. bei manchen Autoradios beobachten die man 
schnell leise drehen wollte aber dabei unkontrolliert lauter wurden.

> *) >200Hz "reichen" auch, nur "Zwirbler" werden da meckern! ;D
Wenn man sich damit beim Basteln zufrieden gibt vielleicht. Ansonsten 
kann man damit wieder leicht auf die Nase fallen, siehe Beispiel 
Autoradio.

von Gerald O. (garry)


Lesenswert?

Peter D. schrieb:
> Man sollte sich genau überlegen, ob die schlechte Haptik von
> Folientasten zumutbar ist. Man kann den Kunden auch schnell wieder los
> sein.

Man sollte die Folientastatur nicht zu schlecht reden, sie hat durchaus 
ihre Daseinsberechtigung, z.b. wenn leichte Reinigung / 
Desinfizierbarkeit eine Rolle spielt, dabei auch mit Handschuhe bedient 
werden muss. Da sind die genau die Eigenschaften wie höhere 
Betätigungskraft, rillenfreie Oberfläche,... gefordert.

von Gerald O. (garry)


Lesenswert?

Valeri D. schrieb:
> Für mich persönlich gilt.
> Wenn die Taste für sich alleine wichtig ist
> z.B. in der Sicherheitt, dann ist es auch im separaten Kontext zu lösen.
> Wenn es um die Tasten oder um die Tasten-ähnliche Aktionen handelt, die
> eine Reaktion verursachen, dann ist das Ganze zu betrachten und nicht
> nur die Taste für sich, und z.B. zweitrangig, ob es sich im Menü
> wiederspiegelt.... Evtl. wird von manchen es anders gesehen, und so soll
> es auch so sein.

Im realen Leben hat der "Tastenprogrammierer" oft gar nichts mit der 
Anwendung zu tun. Siehe z.B. PC-Tastatur. Da schaut man auch nicht drauf 
ob man die Tastatur mehr für Excel oder mehr für Word benötigt.

Garry

von Teo (Gast)


Lesenswert?

Gerald O. schrieb:
> Schlimmer als verlorene Impulse sind plötzlich gegenläufig detektierte
> Impulse. Konnte man z.b. bei manchen Autoradios beobachten die man
> schnell leise drehen wollte aber dabei unkontrolliert lauter wurden.

Klar, kenn ich auch "LNT springt bei 0,1V Schritten plötzlich von 3V auf 
16"...
Nur wie programmiert man das?-O
Ist das die (von mir nie näher betrachtete) Interrupt gesteuerte 
Methode, wo bei ein Kanal als "Takt" angesehen wird und dabei dann 
natürlich auch auf eine Entprellung verzichtet wird?³³³
Wi bekommt man so nen Scheiß nur hin.... Wie zum Teufel kann man so 
einen Schrott nur programmieren und auch noch VERKAUFEN. Das ist wie 
beim Schleudersitz auslösen! Da steckt schnell mal die obere Hälfte 
eines TO3 Transistors im Auge...
Wenn ich könnte, wie ich wollte.... WAFFELEISEN! Dann hätte er/sie 
wenigsten mehr Zeit zum nachdenken, denn mit der Zunge....

...

Ja, Sorry aber das ... Aaaaaa

von Einer K. (Gast)


Lesenswert?

Teo schrieb:
> Nur wie programmiert man das?-O
Am besten gar nicht!

Viele ARM haben Timer mit Decoder im Bauch.
Zwei recht prominente Beispiele:
ATSAM3X8E
STM32F103C8

Für andere µC und Handbediente Encoder ist meist ein 1ms Tick/ISR eine 
gute Wahl

von Veit D. (devil-elec)


Lesenswert?

>> Schlimmer als verlorene Impulse sind plötzlich gegenläufig detektierte
>> Impulse. Konnte man z.b. bei manchen Autoradios beobachten die man
>> schnell leise drehen wollte aber dabei unkontrolliert lauter wurden.

Dieser Mist ist gar nicht mal so wenig verbreitet. Wie man sowas 
abliefern kann frage ich mich auch.

Diesen Effekt hat mein:

harman/kardon AVR 507 Limited Edition am Lautstärkeregler, lauter geht 
einwandfrei, leiser wird auch lauter, zum Glück funktioniert die 
Fernbedienung einwandfrei. Das Problem trat damals kurz nach der 
Garantie auf, obwohl ich nie großartig daran gedreht hatte. Das Teil ist 
mittlerweile schon viele Jahre alt

Philips DAB+ Radio beim Weckzeit einstellen springt Stunde und Minute 
hin- und her. Ist eben auch nur noch der Name übrig.

und meine PC Maus am Mausrad (Trust 22879), Seiten hochscrollen 
einwandfrei, beim runtersrollen springts manchmal zurück, fing vor paar 
Wochen "langsam" an

Daran sieht man nur Eines. Die Produkte werden nicht lange genug 
getestet und die Entwickler haben keine Erfahrung mit sowas. Die wissen 
scheinbar nicht das Kontakte verschleißen und die Prellzeit mit der Zeit 
ansteigt.

von Gerald O. (garry)


Lesenswert?

Peter D. schrieb:
> W.S. schrieb:
>> die Zeitverzögerung vor dem
>> Tastendruck ist kundenseitig unerwünscht.
>
> Würde mich mal interessieren, was für nervöse Kunden das sind. Und
> welche Bedienmenüs es erfordern, 10* je s auf ne Taste zu hämmern.
Auto: Du willst 10 Titel weiterspringen, also drückst Du 10x 
hintereinander schnell auf die Taste. Auch wenn Du es nicht in einer 
Sekunde schaffst so wird der Tastendruck elektrisch gesehen doch schnell 
mal kürzer als 100ms. Nervig wenn der Druck dann nicht mehr erkannt 
wird.
Gleiches am Tempomat: Paar km/h schneller oder langsamer - da wartet man 
nicht nach jedem Tipp dass das das Auto wirklich 1km/h schneller 
geworden ist sondern tickert schnell paar Impulse hoch oder runter.


> Bei uns hat sich noch kein Kunde beschwert oder Tasten zerdroschen. Im
> Gegenteil, die sind erstaunt, wie schnell die Tasten im Gegensatz zu
> einer PC-Steuerung reagieren.
> Beim PC muß sich ja der Tastendruck vom Controller über USB-Polling über
> Treiber-Libs über die Applikation bis zum Bildschirm kämpfen. Das dauert
> erheblich länger, als läppische 40ms.
Mhm... da läuft dann aber was sparsam... Ein Gamer würde Dir das Teil um 
die Ohren hauen wenn er so lange warten müsste bis sich am Bildschirm 
was tut so wie Du es beschreibst...
Inzwischen ist das ja sehr verbreitet dass ein Eingabesignal von einem 
Tastaturcontroller über serielle Datenleitungen und Treiber, Host,... 
seinen weg bis zum Display finden muss. Wer da noch ein träges 
Reaktionsverhalten zeigt hat am Markt schon so gut wie verloren. 
Smartphones haben da bis in die betagte Seniorengruppe die Meßlatte für 
die Erwartungshaltung sehr hoch gelegt...
Garry

von Gerald O. (garry)


Lesenswert?

Veit D. schrieb:
> Daran sieht man nur Eines. Die Produkte werden nicht lange genug
> getestet und die Entwickler haben keine Erfahrung mit sowas. Die wissen
> scheinbar nicht das Kontakte verschleißen und die Prellzeit mit der Zeit
> ansteigt.

Dazu fallen mir die schönen Werbesprüche ein "Gut ist uns nicht gut 
genug" und "Jeden Tag ein bischen besser". Sollten sich mal diejenigen 
zu Herzen nehmen die meinen "es tut doch", warum soll ich da mehr 
Aufwand reinstecken? Jedenfalls wenn sie damit Geld verdienen.

Garry

von Maxe (Gast)


Lesenswert?

Ich weiss nicht, obs schon gesagt wurde, hat auch nur indirekt mit der 
Entprellung selbst zu tun, aber viele Taster brauchen einen 
Mindestschaltstrom, um dauerhaft zuverlaessig zu funktionieren. Ich bin 
da schon reingefallen und ein 10k-Pullup (bei 5V) war zu gross. Bei 1k 
hat der Taster dann dauerhaft sauber funktioniert. Ich denke das sollte 
man im Entprellzusammenhang der Vollstaendigkeit halber immer erwaehnen.

von Lediglich nur ein Benutzer (Gast)


Lesenswert?


von Gerald O. (garry)


Lesenswert?

Stefan ⛄ F. schrieb:
> W.S. schrieb:
>> So, und nun kann man sich auf das Diskutieren des Punktes 3
>> konzentrieren.
>
> Manche Leute (wie ich) schalten einfach einen Kondensator parallel zum
> Taster anstatt zu diskutieren.

Schon verloren wenn es um eine Tastenmatrix geht, da sind die 
Kondensatoren tödlich in der Auswertung...

Garry

von Gerald O. (garry)


Lesenswert?

M. K. schrieb:
> Oh bitte nicht so einen Quatsch schreiben. Wie sag bei dir die
> Verantwortung aus? Hast du gesagt es war dein Fehler oder hast du die
> Schäden dafür bezahlt? Nichts gegen dich aber mich kotzt diese Phrase
> "Ich stelle mich meiner Verantwortung" in letzter Zeit einfach nur an da
> nichts als hohle Worte dahinter stehen.

Völlig falsches Signal!
Wesentlich ist dass man einen Fehler zugeben kann um dann schnell eine 
Lösung dafür zu finden. Man stellt sich doch auch seiner Verantwortung 
in dem man dafür sorgt dass der Schaden begrenzt bleibt und sich nicht 
erst noch richtig ausdehnt - nur weil man versucht den Fehler anderen in 
die Schuhe zu schieben. Wo gearbeitet wird passieren Fehler.

von MiroWierdo (Gast)


Lesenswert?

Hab nicht alles gelesen,

aber gab es schon irgendwelche Auto-Metaphern oder Klassendiskussionen 
von verschiedenen Obstsorten?

Wie soll der TE das verstehen, wenn man ihm so fundamentale Diskussionen 
vorenthält???

von Stefan F. (Gast)


Lesenswert?

Gerald O. schrieb:
> Siehe z.B. PC-Tastatur. Da schaut man auch nicht drauf
> ob man die Tastatur mehr für Excel oder mehr für Word benötigt.

Frage mal die Gamer. Die geben teilweise viel Geld für spezielle 
Tastaturen aus, die schneller reagieren und mehr Tastendrücke 
gleichzeitig erfassen können.

von Peter D. (peda)


Lesenswert?

Gerald O. schrieb:
> Gleiches am Tempomat: Paar km/h schneller oder langsamer - da wartet man
> nicht nach jedem Tipp dass das das Auto wirklich 1km/h schneller
> geworden ist sondern tickert schnell paar Impulse hoch oder runter.

Bei meinem Auto ist da eine Dynamik einprogrammiert, bei mehrfacher 
Betätigung erhöht sich die Schrittweite. Auch haben die Tasten so eine 
Haptik, daß man sie gar nicht 10*/s betätigen kann. Man hat einen 
deutlichen Druckpunkt, der die Betätigung rückmeldet.
Auch die Radiotasten sind so programmiert, daß sie beim gedrückt Halten 
automatisch weiterzählen (Lautstärke, Sender usw.).
Man muß also nicht drauf rumdreschen und ich hab auch noch nie einen 
Autofahrer gesehen, der so die Tasten bedient.

von Stefan F. (Gast)


Lesenswert?

Maxe schrieb:
> viele Taster brauchen einen
> Mindestschaltstrom, um dauerhaft zuverlaessig zu funktionieren.

Leider steht das nur in sehr wenigen Datenblättern, so dass man raten 
muss, welcher Mindest-Strom denn nun notwendig ist.

Mit viel das zum ersten mal als Teenager auf, als wir deinen 
elektromechanischen Gong durch einen elektronischen austauschten. Kurze 
Zeit später reagierte der Klingelknopf nur noch mit Gewalt. Damals hatte 
ich die Problemursache nicht verstanden, daher den Klingeltaster 
ausgetauscht und später (weil es wieder passierte) wieder den alten 
elektromechanischen Gong eingebaut.

Ich hatte einen Receiver von Technics, bei dem nach vielen Jahren der 
Drehencoder für die Quellen-Umschaltung hakelig wurde. Da hatte ich 
diesen mit einem anderen getauscht, den ich nicht benutzte - hat aber 
nichts gebraucht (staun). Es waren nämlich beide kaputt (hatte ich 
vorher testen sollen).

Ich habe dann die Pull-Up Widerstände von 47kΩ auf 2,2kΩ reduziert und 
10nF Kondensatoren parallel zu den Kontakten geschaltet. Und siehe da, 
die Teile regenerierten sich allmählich wieder. Das ist jetzt etwa 3 
Jahre her, die funktionieren immer noch prima.

von Lediglich nur ein Benutzer (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Maxe schrieb:
>> viele Taster brauchen einen
>> Mindestschaltstrom, um dauerhaft zuverlaessig zu funktionieren.
>
> Leider steht das nur in sehr wenigen Datenblättern, so dass man raten
> muss, welcher Mindest-Strom denn nun notwendig ist.
>
Und die Taster mit Gleichstrom zu betreiben zeugt vom technischen 
Unverständnis!

Das wurd3 hier noch nicht angesprochen.

von Stefan F. (Gast)


Lesenswert?

Lediglich nur ein Benutzer schrieb:
> Und die Taster mit Gleichstrom zu betreiben zeugt vom technischen
> Unverständnis!

Kannst du das etwas mehr erläutern? Ich hatte bisher keine Hemmungen, 
Taster mit Gleichstrom zu betreiben. Du meinst den Klingeltaster, oder? 
Warum ist Gleichstrom für solche Taster nicht gut?

von Lediglich nur ein Benutzer (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Lediglich nur ein Benutzer schrieb:
>> Und die Taster mit Gleichstrom zu betreiben zeugt vom technischen
>> Unverständnis!
>
> Kannst du das etwas mehr erläutern? Ich hatte bisher keine Hemmungen,
> Taster mit Gleichstrom zu betreiben. Du meinst den Klingeltaster, oder?
> Warum ist Gleichstrom für solche Taster nicht gut?

Dann bist Du halt jung und unerfahren. Dieses Wissen ist nicht neu 
sondern altbekannt.

Jedes Schalten ist mit einem Funken verbunden, d.h. es entsteht ein 
Plasma. Dabei wird Material transportiert. Bei Gleichstrom immer in die 
selbe Richtung.

Soweit verständlich?

von Peter D. (peda)


Lesenswert?

Maxe schrieb:
> Ich weiss nicht, obs schon gesagt wurde, hat auch nur indirekt mit der
> Entprellung selbst zu tun, aber viele Taster brauchen einen
> Mindestschaltstrom, um dauerhaft zuverlaessig zu funktionieren.

Es gibt für jede Anwendung den richtigen Taster. Steuerungstaster, die 
große Schütze direkt schalten können, sind für MC-Eingabe nicht 
geeignet.
Es gibt Bedientaster mit Goldbeschichtung, die brauchen keinen 
Mindeststrom, können aber auch nur wenige mA ab, damit die Beschichtung 
nicht verdampft. Ein Kondensator parallel ist für die tödlich.

von M. K. (sylaina)


Lesenswert?

Lediglich nur ein Benutzer schrieb:
> Jedes Schalten ist mit einem Funken verbunden, d.h. es entsteht ein
> Plasma.

Das Plasma will ich sehen, dass bei 1mA entsteht und den Taster 
signifikant beschädigt. Hier gehts ja nicht um Schalter, die zig Ampere 
trennen sollen sondern um "Tastaturen". Wer hier mehr als 1mA durch nen 
Taster jagt hat zugegebener Maßen etwas beim Taster nicht verstanden.

: Bearbeitet durch User
von Tastertör (Gast)


Lesenswert?

Lediglich nur ein Benutzer schrieb:
> Jedes Schalten ist mit einem Funken verbunden, d.h. es entsteht ein
> Plasma.

Geheimdienste werten diese Funken aus und können damit die 
Tastatureingaben nachvollziehen. In den USA ist das schon über 5 km 
Entfernung gelungen.
Profi-Hacker vertauschen deshalb die Tastkappen täglich.
Wo bleibt der Kommentar von (garry)?

von Teo (Gast)


Lesenswert?

Peter D. schrieb:
> Es gibt Bedientaster mit Goldbeschichtung, die brauchen keinen
> Mindeststrom, können aber auch nur wenige mA ab, damit die Beschichtung
> nicht verdampft. Ein Kondensator parallel ist für die tödlich.

Hast die AltGr. Taste nich erwischt µA.
Laut altgedienter Erfahrung (irgend ein Prof. nich ich;) reichen um die 
2mA um unbekannte 08/15 Taster, am leben zu erhalten sind. Für alles was 
deutlich weniger braucht, sollten auch Angaben dazu im Dabla zu finden 
sein.


M. K. schrieb:
> Das Plasma will ich sehen, dass bei 1mA entsteht und den Taster
> signifikant beschädigt.

Naja ist ja Uraltwissen. Da gabs noch Edison und seiner (Patentierten) 
Gleichstromleidenschft. Da im feuchtem Keller ne 50W Funzel zu 
schalten....
Das ist doch nur ein Dummschwätzer! Sein "Problem" hat hier genauso 
wenig etwas zu suchen, wie mein Schleudersitz-Auslöser.

von Le X. (lex_91)


Lesenswert?

Peter D. schrieb:
> Nur ist in der Regel die Durchlaufzeit der Mainloop keine Konstante,
> sondern in einem weiten Bereich schwankend, abhängig von den gerade
> auszuführenden Tasks. Daher ist die Mainloop der denkbar ungünstigste
> Platz.

In der Regel ist (im professionellen Umfeld) die Zykluszeit der Mainloop 
sehr wohl eine Konstante.
Sowohl bei einfachen Zeitscheibenbetriebssystemen als auch bei RTOSen 
hast du ein oder mehrere "Tasks" die deinen Software-Komponenten 
verschiedene Zykluszeiten zur Verfügung stellen, z.B. 5ms, 10ms, 
100ms...
Deine Lösung, eine Mainloop die ungebremst durchrattert und mal öfter, 
mal weniger oft kommt, ist ein Nischenfall.

> Ein Timerinterrupt ist dagegen der ideale Platz für eine konstante
> Zykluszeit.

Keineswegs.
Kann man zwar in kleinen, überschaubaren Projekten die nie mehr 
erweitert werden so machen. Professionell macht das aber niemand so.
Für zyklische Aufgaben gibt es zyklisch aufgerufene Zeitscheiben / Tasks 
/ WasAuchImmer.
Der Timerinterrupt selbst stellt im Idealfall lediglich den Tick für das 
Weiterschalten der Zeitscheibe / des Tasks zur Verfügung.

Nur so kriegst du ein einigermasen zeitdeterministisches System hin.
Klar, bei den meisten kleinen Bastelprojekten hier kann man's auch so 
wie du machen.
Dann braucht man sich aber nicht wundern wenn nach einer kleinen 
Änderung in der SW das Gesamtsystem nicht mehr läuft weil man sich sein 
komplettes Timing zerschossen hat.

: Bearbeitet durch User
von W.S. (Gast)


Lesenswert?

Lediglich nur ein Benutzer schrieb:
> Dann bist Du halt jung und unerfahren. Dieses Wissen ist nicht neu
> sondern altbekannt.
> Jedes Schalten ist mit einem Funken verbunden...

Peter D. schrieb:
> Es gibt Bedientaster mit Goldbeschichtung, die brauchen keinen
> Mindeststrom, können aber auch nur wenige mA ab, damit die Beschichtung
> nicht verdampft. Ein Kondensator parallel ist für die tödlich.

Ja sagt mal - ihr beide ! - Sind wir hier inzwischen im Esoterischen 
angekommen ???

Also: den Mindeststrom brauchen alle Taster, die irgendwie mit Luft in 
Kontakt kommen, sei es durch Oxidation, Adhäsion, simplen Dreck/Staub 
oder sonstwas. Lediglich quecksilberbenetzte Reedkontakte brauchen 
keinen Mindeststrom, aber die sind ja auch gekapselt.

Und bei 3.3V oder 5V und 10nF sollte man sich mal 2 Dinge ausrechnen:
1. ab welcher Annäherung (in Relation zur Oberflächenrauhigkeit) die 
Feldstärke groß genug ist, um überhaupt eine Ionisierung der Luft 
bewirken zu können. Nehmt dazu einfach mal die Bindungsenergie der 
"obersten" Elektronen von Stickstoff und Sauerstoff als Schwelle an - 
ihr Pappnasen! Wir sind ja hier nicht beim Erodieren.

2. wie groß der Energiemenge ist, die ein auf 3.3V oder 5V aufgeladener 
10nF beinhaltet und dann rechnet mal aus, um wieviel Kelvin die 
Kontaktstelle sich damit erwärmen läßt.

Wer sowas wie eure Behauptungen hier einwirft, von dem erwarte ich, daß 
er das Ganze mal öffentlich durchrechnet.

Also bleibt mal auf dem Teppich!

W.S.

von Stefan F. (Gast)


Lesenswert?

Lediglich nur ein Benutzer schrieb:
> Jedes Schalten ist mit einem Funken verbunden, d.h. es entsteht ein
> Plasma. Dabei wird Material transportiert. Bei Gleichstrom immer in die
> selbe Richtung.
>
> Soweit verständlich?

Ja klingt verständlich. Wobei ich den Effekt als geringfügig einschätze, 
wenn wir im Bereich unter 10mA bleiben. Das ist vielleicht der Grund, 
warum ich damit noch kein Problem erlebt habe.

von Stefan F. (Gast)


Lesenswert?

W.S. schrieb:
> wie groß der Energiemenge ist, die ein auf 3.3V
> oder 5V aufgeladener 10nF beinhaltet

Ich finde den Hinweis dennoch nicht ganz falsch. Denn 10nF reichen zum 
Entprellen nur mit viel Glück aus. Deswegen benutzen die meisten Leute 
eher 100nF, und das tut manchen Kontakten wirklich weh.

Ich habe die 10nF zu den Drehencodern meines Receivers ja auch nur 
hinzugefügt, um die vorhandene unzureichende Software-Entprellung ein 
bisschen zu unterstützen. Damit funktionieren die verschlissenen Teile 
viel besser, als ohne. Das wird nicht ewig halten - ist mir klar. Wenn 
es so weit ist, kaufe ich neue Encoder und nehme die Kondensatoren 
wieder raus.

von Lediglich nur ein Benutzer (Gast)


Lesenswert?

W.S. schrieb:
> Lediglich nur ein Benutzer schrieb:
>> Dann bist Du halt jung und unerfahren. Dieses Wissen ist nicht neu
>> sondern altbekannt.
>> Jedes Schalten ist mit einem Funken verbunden...
>
> Peter D. schrieb:
>> Es gibt Bedientaster mit Goldbeschichtung, die brauchen keinen
>> Mindeststrom, können aber auch nur wenige mA ab, damit die Beschichtung
>> nicht verdampft. Ein Kondensator parallel ist für die tödlich.
>
> Ja sagt mal - ihr beide ! - Sind wir hier inzwischen im Esoterischen
> angekommen ???
>
> Also: den Mindeststrom brauchen alle Taster, die irgendwie mit Luft in
> Kontakt kommen, sei es durch Oxidation, Adhäsion, simplen Dreck/Staub
> oder sonstwas.

Ich bescheinige Dir hiermit völlige Unwissenheit in Dingen die Schalter 
betreffen!

Testat nicht bestanden.

von Peter D. (peda)


Lesenswert?

Man braucht natürlich einen Strom, der den Eingang bei offenem Kontakt 
auf high zieht. Dazu nimmt man die internen Pullups des MCs (wenige µA). 
Tastaturen und Fernbedienungen benötigen keine extra Widerstände dafür.

von Martin V. (oldmax)


Lesenswert?

Hi
Tastertör schrieb:
> Wo bleibt der Kommentar von (garry)?

Der kugelt sich noch vor Lachen... kommt bestimmt, sobald er sich wieder 
gefangen hat.
Gruß oldmax

von Lediglich nur ein Benutzer (Gast)


Lesenswert?

M. K. schrieb:
> Lediglich nur ein Benutzer schrieb:
>> Jedes Schalten ist mit einem Funken verbunden, d.h. es entsteht ein
>> Plasma.
>
> Das Plasma will ich sehen, dass bei 1mA entsteht und den Taster
> signifikant beschädigt. Hier gehts ja nicht um Schalter, die zig Ampere
> trennen sollen sondern um "Tastaturen". Wer hier mehr als 1mA durch nen
> Taster jagt hat zugegebener Maßen etwas beim Taster nicht verstanden.

Nichts einfacher als das!

Schnapp dir ne Webcam, 9 V Batterie, Widerstandsdekade, 2 blanke Drähte 
und simuliere den Kontakt. Das ganze bei Dunkelheit und beobachte was du 
siehst. Die Kamera hat nur! die Kontakte im Sichtbereich.

von Lediglich nur ein Benutzer (Gast)


Lesenswert?

Nach 100.000 Schaltvorgängen schaust Du Dir die Kontakte mit einem 
Elektronenmikroskop an.

Dann vergleiche die Kontakte die Gleichstrom oder Wechselstrom 
geschaltet haben.

von Lediglich nur ein Benutzer (Gast)


Lesenswert?

Ja, und was hat das mit dem Prellen der Kontakte zu tun?

Überlegt mal............

von Stefan F. (Gast)


Lesenswert?

Die Gummi-Kontakte von IR Fernbedienungen brauchen keinen Mindeststrom 
(vermute ich mal), richtig?

von Tastertör (Gast)


Lesenswert?

Lediglich nur ein Benutzer schrieb:
> Nach 100.000 Schaltvorgängen schaust Du Dir die Kontakte mit einem
> Elektronenmikroskop an.
>
> Dann vergleiche die Kontakte die Gleichstrom oder Wechselstrom
> geschaltet haben.

Das ist aber nur sinnvoll, wenn man genau auf dem Südpol steht. 
Anderfalls könnte der Stuhlgang von Fliegen das Ergebnis total 
verfälschen.
Verstehe ja, Fasching und Corona sind eine schwierige Zeit.

von Joachim B. (jar)


Lesenswert?

Stefan ⛄ F. schrieb:
> Deswegen benutzen die meisten Leute
> eher 100nF, und das tut manchen Kontakten wirklich weh.

und wenn das nicht funktioniert kommen viele auf die Idee "viel hilft 
viel" und wenn sie bei 1000µF Elkos angekommen sind werden die 
Tasteroberflächen massiv beleidigt!
Da reinigt der "Mindeststrom" auch alle Beschichtungen weg.

: Bearbeitet durch User
von Lediglich nur ein Benutzer (Gast)


Lesenswert?

Tastertör schrieb:
> Lediglich nur ein Benutzer schrieb:
>> Nach 100.000 Schaltvorgängen schaust Du Dir die Kontakte mit einem
>> Elektronenmikroskop an.
>>
>> Dann vergleiche die Kontakte die Gleichstrom oder Wechselstrom
>> geschaltet haben.
>
> Das ist aber nur sinnvoll, wenn man genau auf dem Südpol steht.
> Anderfalls könnte der Stuhlgang von Fliegen das Ergebnis total
> verfälschen.
> Verstehe ja, Fasching und Corona sind eine schwierige Zeit.

Nun gut, ein usb Mikroskop tut es vielleicht auch.

von Lediglich nur ein Benutzer (Gast)


Lesenswert?

Tastertör schrieb:
> Lediglich nur ein Benutzer schrieb:
>> Nach 100.000 Schaltvorgängen schaust Du Dir die Kontakte mit einem
>> Elektronenmikroskop an.
>>
>> Dann vergleiche die Kontakte die Gleichstrom oder Wechselstrom
>> geschaltet haben.
>
> Das ist aber nur sinnvoll, wenn man genau auf dem Südpol steht.
> Anderfalls könnte der Stuhlgang von Fliegen das Ergebnis total
> verfälschen.
> Verstehe ja, Fasching und Corona sind eine schwierige Zeit.

Nun gut, ein usb Mikroskop tut es vielleicht auch.

Stefan ⛄ F. schrieb:
> Die Gummi-Kontakte von IR Fernbedienungen brauchen keinen
> Mindeststrom
> (vermute ich mal), richtig?

Datenblatt befragen vielleicht?

von Stefan F. (Gast)


Lesenswert?

Lediglich nur ein Benutzer schrieb:
> Datenblatt befragen vielleicht?

Welches Datenblatt? Für meine 20 Jahre alten Consumer Fernbedienungen 
werde ich wohl kaum eins finden. Einzeln kaufen kann man diese Kontakte 
sowieso nicht (leider).

von Lediglich nur ein Benutzer (Gast)


Lesenswert?

Weiter geht es mit der geplanten Obsoleszenz...

von Georg (Gast)


Lesenswert?

Lediglich nur ein Benutzer schrieb:
> Datenblatt befragen vielleicht?

Normalerweise stammen die Leiterplatte und die Gummimatten aus 
verschiedenen Quellen, und Datenblätter würden nur für beides zusammen 
aussagekräftig sein.

Da helfen nur eigene Langzeitversuche.

Georg

von M. K. (sylaina)


Lesenswert?

Lediglich nur ein Benutzer schrieb:
> Schnapp dir ne Webcam, 9 V Batterie, Widerstandsdekade, 2 blanke Drähte
> und simuliere den Kontakt. Das ganze bei Dunkelheit und beobachte was du
> siehst. Die Kamera hat nur! die Kontakte im Sichtbereich.

Wäre bestimmt noch umsetzbar aber schaun wir mal, ne Webcam die mit 60 
Hz aufnimmt kann also einen Funkenabriss wie gut wahrscheinlich 
aufnehmen?

Lediglich nur ein Benutzer schrieb:
> Nach 100.000 Schaltvorgängen schaust Du Dir die Kontakte mit einem
> Elektronenmikroskop an.

Yo, moment...ich geh kurz in den Keller zum REM...

Völlig blödsinnige Forderungen. Wenn man nur mal bedenkt: Jede 
bescheuerte Computermaus wird mit DC betrieben aber klar, zum einem 
wissen die Hersteller da nicht was sie tun und zum anderen hört man es 
auch immer wieder, dass die Computermäuse reihenweise wegen abgebrannter 
Taster ausfallen.

von Joachim B. (jar)


Lesenswert?

M. K. schrieb:
> zum anderen hört man es
> auch immer wieder, dass die Computermäuse reihenweise wegen abgebrannter
> Taster ausfallen.

ne wegen mieser Minitaster.....
Ich musste schon mal einige tauschen.

von Roland F. (rhf)


Lesenswert?

Hallo,
Joachim B. schrieb:
> ne wegen mieser Minitaster.....
> Ich musste schon mal einige tauschen.

Ich habe in über 30 Jahren "Mausgeschubse" erst einmal einen Taster in 
einer Maus getauscht (eine Laptopmaus von IBM). Ansonsten verwende ich 
ausschließlich Logitech-Mäuse und hatte mit denen bis jetzt keinen 
einzigen Ausfall.

rhf

von Lediglich nur ein Benutzer (Gast)


Lesenswert?

Roland F. schrieb:
> Hallo,
> Joachim B. schrieb:
>> ne wegen mieser Minitaster.....
>> Ich musste schon mal einige tauschen.
>
> Ich habe in über 30 Jahren "Mausgeschubse" erst einmal einen Taster in
> einer Maus getauscht (eine Laptopmaus von IBM). Ansonsten verwende ich
> ausschließlich Logitech-Mäuse und hatte mit denen bis jetzt keinen
> einzigen Ausfall.
>
> rhf

Ich schon viele, besonders diese Kabellosen.

von Stefan F. (Gast)


Lesenswert?

Joachim B. schrieb:
> ne wegen mieser Minitaster.....
> Ich musste schon mal einige tauschen.

Ist schon komisch, dass die Taster meist eher kaputt gehen, als das 
Kabel bricht.

(auch bei Logitech, nach meiner Erfahrung)

von Wolle G. (wolleg)


Lesenswert?

M. K. schrieb:
> .... aber keine falsche Scheu, als Rentner dürftest du
> genügend Zeit haben meinen Post mehrfach zu lesen und darüber
> nachzudenken,.....
a)schlimmer geht nimmer!!
b)alte Weisheit: Rentner haben niemals Zeit

von Wolle G. (wolleg)


Lesenswert?

Stefan ⛄ F. schrieb:
> Manche Leute (wie ich) schalten einfach einen Kondensator parallel
Wie viel F (Kondensator) sind empfehlenswert?

von Stefan F. (Gast)


Lesenswert?

Wolle G. schrieb:
> Wie viel F (Kondensator) sind empfehlenswert?

Ich würde maximal 47nF nehmen, um die Kontakte nicht zu gefährden.

100 kΩ und 100 nF ergeben ungefähr 5 ms. Für die meisten Taster mit 
Einrast-Effekt reicht das.

Wenn du einen größeren Kondensator verwenden willst, dann mach 100Ω dazu 
in Reihe, um die Stromstärke (beim Schließen des Kontaktes) zu 
begrenzen.

von Gerald O. (garry)


Lesenswert?

Stefan ⛄ F. schrieb:
> Gerald O. schrieb:
>> Siehe z.B. PC-Tastatur. Da schaut man auch nicht drauf
>> ob man die Tastatur mehr für Excel oder mehr für Word benötigt.
>
> Frage mal die Gamer. Die geben teilweise viel Geld für spezielle
> Tastaturen aus, die schneller reagieren und mehr Tastendrücke
> gleichzeitig erfassen können.

Da geht es dann aber hauptsächlich um die mechanischen Eigenschaften der 
Tasten. Bzgl. mehr Tasten gleichzeitig habe ich mir das noch nicht 
angeschaut was die Tasturen anders machen.

Garry

von Gerald O. (garry)


Lesenswert?

Le X. schrieb:
> Peter D. schrieb:
>> Nur ist in der Regel die Durchlaufzeit der Mainloop keine Konstante,
>> sondern in einem weiten Bereich schwankend, abhängig von den gerade
>> auszuführenden Tasks. Daher ist die Mainloop der denkbar ungünstigste
>> Platz.
>
> In der Regel ist (im professionellen Umfeld) die Zykluszeit der Mainloop
> sehr wohl eine Konstante.
> Sowohl bei einfachen Zeitscheibenbetriebssystemen als auch bei RTOSen
> hast du ein oder mehrere "Tasks" die deinen Software-Komponenten
> verschiedene Zykluszeiten zur Verfügung stellen, z.B. 5ms, 10ms,
> 100ms...
> Deine Lösung, eine Mainloop die ungebremst durchrattert und mal öfter,
> mal weniger oft kommt, ist ein Nischenfall.
Würde ich so Pauschal nicht stehen lassen, kommt darauf an was der uC 
für Aufgaben hat.

>> Ein Timerinterrupt ist dagegen der ideale Platz für eine konstante
>> Zykluszeit.
Ja, aber dort sollte man nur das aller notwendigste machen wie z.B. den 
Tastenzustand in ein "Schieberegister" einlesen um es dann in der 
Mainloop auszuwerten.

> Keineswegs.
> Kann man zwar in kleinen, überschaubaren Projekten die nie mehr
> erweitert werden so machen. Professionell macht das aber niemand so.
> Für zyklische Aufgaben gibt es zyklisch aufgerufene Zeitscheiben / Tasks
> / WasAuchImmer.
> Der Timerinterrupt selbst stellt im Idealfall lediglich den Tick für das
> Weiterschalten der Zeitscheibe / des Tasks zur Verfügung.

Kommt auf den Kostendruck an, gerade im professionellen Bereich. Da ist 
man schnell gezwungen den kleinst möglichen (billigsten) uC für 
Teilaufgaben (Powercontroller, Tastencontroller,...) zu verwenden. Das 
leistet man sich nicht unbedingt den Luxus eine Art Betriebssystem 
aufzubauen.

> Nur so kriegst du ein einigermasen zeitdeterministisches System hin.
> Klar, bei den meisten kleinen Bastelprojekten hier kann man's auch so
> wie du machen.
> Dann braucht man sich aber nicht wundern wenn nach einer kleinen
> Änderung in der SW das Gesamtsystem nicht mehr läuft weil man sich sein
> komplettes Timing zerschossen hat.

Das kann einem mit Zeitscheiben auch passieren, die Laufzeiten sollte 
man immer im Auge behalten.

Garry

von Tastertör (Gast)


Lesenswert?

Gerald O. schrieb:
> Viele Fehler passieren hier durch die Vermischung und zu
> großzügigen Umgang mit 16Bit Variablen in IRQ-Routinen.

Gerald O. schrieb:
>>> Ein Timerinterrupt ist dagegen der ideale Platz für eine konstante
>>> Zykluszeit.
> Ja, aber dort sollte man nur das aller notwendigste machen wie z.B. den
> Tastenzustand in ein "Schieberegister" einlesen um es dann in der
> Mainloop auszuwerten.

Du solltest Interrupts grundsätzlich meiden. Wenn du Pech hast, kommt in 
einer ISR sogar eine 32 Bit Variable vor, was absolut tödlich ist.

Für den Rest der Welt:
Da eine Tastenauswertung in einer ISR nicht mehr Zeit braucht als in 
(neudeutsch) loop(), gibt es keinen Grund, die ISR nicht dafür zu 
nutzen!

Gerald O. schrieb:
> Das kann einem mit Zeitscheiben auch passieren, die Laufzeiten sollte
> man immer im Auge behalten.

Ach nee.

von Stefan F. (Gast)


Lesenswert?

Gerald O. schrieb:
> Bzgl. mehr Tasten gleichzeitig habe ich mir das noch nicht
> angeschaut was die Tasturen anders machen.

Normale PC Tastaturen haben keine Dioden in der Matrix. Es dürfen daher 
nicht beliebige Tasten gleichzeitig gedrückt werden, weil sonst falsche 
"phantom" Tasten erkannt werden.

Bei Gaming Tastaturen sind je nach Bauart Dioden eingefügt oder die 
Anordnung der Tasten in der Matrix verändert, um bestimmte für Spiele 
relevante Konstellationen zuzulassen.

Viele Hersteller werben auch damit, dass die Tastendrücke schneller 
erkannt werden, als üblich.

Das ist wie bei 1600 dpi Mäusen am 100 dpi Bildschirm: Manche Leute 
glauben, es zu brauchen.

von Karl B. (gustav)


Lesenswert?

Stefan ⛄ F. schrieb:
> Es dürfen daher
> nicht beliebige Tasten gleichzeitig gedrückt werden, weil sonst falsche
> "phantom" Tasten erkannt werden.

Stichwort "Scan code". Sonst könnte ich nicht <strg><alt><entf> drücken.

Quelle:
http://www.winfaq.de/faq_html/Content/tip1500/onlinefaq.php?h=tip1576.htm

ciao
gustav

von Bauform B. (bauformb)


Angehängte Dateien:

Lesenswert?

Gerald O. schrieb:
>> Manche Leute (wie ich) schalten einfach einen Kondensator parallel zum
>> Taster anstatt zu diskutieren.
>
> Schon verloren wenn es um eine Tastenmatrix geht, da sind die
> Kondensatoren tödlich in der Auswertung...

Was haltet ihr denn von einer statischen(?) analogen(?) Matrix wie im 
Bild? Die Kondensatoren filtern Störimpulse, die Software darf also auf 
die erste Flanke reagieren. Bonus: nur 4 Pins für 20 Tasten und weniger 
Umweltverschmutzung durch rein statische Signale.

Wenn der ADC Daten in einem von (hier) 5 Fenstern liefert, gilt die 
Taste als gedrückt und kann von einer normalen Entprellroutine 
verarbeitet werden.

von Stefan F. (Gast)


Lesenswert?

Bauform B. schrieb:
> Was haltet ihr denn von einer statischen(?) analogen(?)
> Matrix wie im Bild?

Ist durchaus gebräuchlich. Die Tasten meines Receivers sind so ähnlich 
beschaltet.

Die Kondensatoren halte ich da allerdings für kontraproduktiv, weil sie 
sich langsam aufladen und damit eine ganze Reihe von möglichen Tasten 
durchlaufen. Die Software muss warten, bis der Messwert stabil ist, da 
kann sie dann auch gleich selbst entprellen.

von Joachim B. (jar)


Lesenswert?

Wolle G. schrieb:
> b)alte Weisheit: Rentner haben niemals Zeit

genauer gesagt zu wenig Restlebenszeit weswegen sie hektisch werden.

von Joachim B. (jar)


Lesenswert?

Stefan ⛄ F. schrieb:
> Die Kondensatoren halte ich da allerdings für kontraproduktiv

und dann stimmen alle Annahmen nicht mehr wenn R x C nicht mehr stimmt.
Miese Schaltungdesigns gibt es genug! PeDa erwähnte es ja schon.
Entweder wird Alterung und Verschleiß nicht eingeplant oder 
Fehlfunktionen billigend in Kauf genommen, schliesslich soll ein Kunde 
auch mal neu kaufen, hohe Reparaturpreise mit Phantasie Ersatzteilpreise 
tun dann ein Übriges.

: Bearbeitet durch User
von W.S. (Gast)


Lesenswert?

Peter D. schrieb:
> Man braucht natürlich einen Strom, der den Eingang bei offenem Kontakt
> auf high zieht. Dazu nimmt man die internen Pullups des MCs (wenige µA).
> Tastaturen und Fernbedienungen benötigen keine extra Widerstände dafür.

Ach Peter, was MAN dazu nimmt, das bestimmst nicht du, sondern eben 
'man'. Also schreibe lieber, daß du keine echten Hochzieh-Widestände 
nimmst, sondern dich auf den geringen Strom aus den Ports verläßt.

Das hättest du auch schon früher beichten sollen, denn das dürfte der 
Grund sein, weswegen du auf die doppelte Entprellung beim 
Drücken+Loslassen gekommen bist. Normale Leute gönnen sich da lieber 
einen echten Widerstand und Stefan obendrein noch einen 10nF 
Kondensator.

Und ich halte das, was du da vorschlägst, schlichtweg für Pfusch. Das 
ist genau so, als wenn jemand mit dem Sperrstrom einer Diode seine 
Vorspannung machen will.


Tastertör schrieb:
> Du solltest Interrupts grundsätzlich meiden. Wenn du Pech hast, kommt in
> einer ISR sogar eine 32 Bit Variable vor, was absolut tödlich ist.

Wie bitte?
Interrupts grundsätzlich meiden?
ne long in der ISR ist tödlich? Und dan auch noch absolut?

Leute, macht mal ne Pause zum Abkühlen.

W.S.

von A. S. (Gast)


Lesenswert?

W.S. schrieb:
> Wie bitte?
> Interrupts grundsätzlich meiden?
> ne long in der ISR ist tödlich? Und dan auch noch absolut?
> Leute, macht mal ne Pause zum Abkühlen.
> W.S.

Ironie-Detektor dejustiert? Der Rat galt nur jener zitierten Person, die 
Angst vor 16bit-Variablen in ISRs hatte.

von kannAlllesBesser?! (Gast)


Lesenswert?

Bauform B. schrieb:
> Was haltet ihr denn von einer statischen(?) analogen(?) Matrix wie im
> Bild?

... üblich, aber das geht noch besser hinsichlich, dass auch jede taste 
einen interrupt auslösen kann bei betätigung, trotzdem diese dann via 
adc identifiziert wird.

von Gerald O. (garry)


Lesenswert?

Stefan ⛄ F. schrieb:
> Bauform B. schrieb:
>> Was haltet ihr denn von einer statischen(?) analogen(?)
>> Matrix wie im Bild?
>
> Ist durchaus gebräuchlich. Die Tasten meines Receivers sind so ähnlich
> beschaltet.
>
> Die Kondensatoren halte ich da allerdings für kontraproduktiv, weil sie
> sich langsam aufladen und damit eine ganze Reihe von möglichen Tasten
> durchlaufen. Die Software muss warten, bis der Messwert stabil ist, da
> kann sie dann auch gleich selbst entprellen.

Weiterer Nachteil:
Für Low-Power-Anwendungen mit Weckfähigkeit per Tastatur ist die 
Beschaltung nicht geeignet.


Garry

von Gerald O. (garry)


Lesenswert?

Stefan ⛄ F. schrieb:

> Normale PC Tastaturen haben keine Dioden in der Matrix. Es dürfen daher
> nicht beliebige Tasten gleichzeitig gedrückt werden, weil sonst falsche
> "phantom" Tasten erkannt werden.

> Bei Gaming Tastaturen sind je nach Bauart Dioden eingefügt oder die
Würde ich ehr umgekehrt sehen dass sie bei einfachen Tastaturen 
weggespart wurden.
> Anordnung der Tasten in der Matrix verändert, um bestimmte für Spiele
> relevante Konstellationen zuzulassen.
Gibt es da bei zwei gleichzeitig lang-gedrückten Buchstaben ein 
Unterschied zur normalen Tastatur? (Geht mir die um Kombinationen von 
Shift/Ctrl/ALT,.. mit Buchstaben).

> Viele Hersteller werben auch damit, dass die Tastendrücke schneller
> erkannt werden, als üblich.
>
> Das ist wie bei 1600 dpi Mäusen am 100 dpi Bildschirm: Manche Leute
> glauben, es zu brauchen.

Tastenreaktionszeiten sind messbar, das hat nichts mit glaube zu tun. Ob 
es in einer Anwendung sinnvoll ist steht auf einem anderen Blatt. Bei 
Spielen macht es  statistisch sicher einen Unterschied wenn eine Eingabe 
schneller kommt - unabhängig von der Reaktionszeit des Spielers wird die 
Signallaufzeit kürzer.

Garry

von Gerald O. (garry)


Lesenswert?

A. S. schrieb:
> W.S. schrieb:
>> Wie bitte?
>> Interrupts grundsätzlich meiden?
>> ne long in der ISR ist tödlich? Und dan auch noch absolut?
>> Leute, macht mal ne Pause zum Abkühlen.
>> W.S.
>
> Ironie-Detektor dejustiert? Der Rat galt nur jener zitierten Person, die
> Angst vor 16bit-Variablen in ISRs hatte.

Da war ehr der Ironie-Sender kaputt und hat es nicht eindeutig genug 
kodiert.

Garry

von Tastertör (Gast)


Lesenswert?

Gerald O. schrieb:
>> Ironie-Detektor dejustiert? Der Rat galt nur jener zitierten Person, die
>> Angst vor 16bit-Variablen in ISRs hatte.
>
> Da war ehr der Ironie-Sender kaputt und hat es nicht eindeutig genug
> kodiert.

Jemand, der 16 Bit Variablen in ISRs als Bedrohung empfindet, ist schon 
ein wenig dejustiert.
Solltest du mal Cortex-M3/M4/M7 Prozessoren einsetzen, ein kleiner Tipp 
für dich: verwende nach Möglichkeit nur 32 Bit Variablen, damit das 
Programm nicht ausgebremst wird ;-)

W.S. schrieb:
> Normale Leute gönnen sich da lieber
> einen echten Widerstand und Stefan obendrein noch einen 10nF
> Kondensator.

Dafür gibt es auch die Fachbegriffe "Angstwiderstand" und 
"Angstkondensator". Wer Erfahrung mit diversen Tastern, deren Kontakten 
und deren Schaltverhalten hat, entprellt das Schliessen und das Öffnen 
der Kontakte. Andernfalls würde ein kurzes Prellen im gedrückten Zustand 
als neuer Tatendruck gewertet. Ist denn das so schwer zu verstehen?

von Stefan F. (Gast)


Lesenswert?

Gerald O. schrieb:
> Würde ich ehr umgekehrt sehen dass sie bei einfachen Tastaturen
> weggespart wurden.

Nee, das war schon von Anfang an so. Deswegen entsprach die Matrix (und 
die sich daraus entstehenden Scan-codes) nie der physischen Anordnung 
der Tasten.

Gerald O. schrieb:
> Gibt es da bei zwei gleichzeitig lang-gedrückten Buchstaben ein
> Unterschied zur normalen Tastatur?

Ja! Die Idee ist, dass mehrere gleichzeitig gedrückte Buchstaben alle 
erkannt werden und auch korrekt erkannt wird, wann sie wieder 
losgelassen wurden.

Wenn du auf einer normalen Tastatur zum Beispiel "c" und "b" 
gleichzeitig drückst und fest hältst, wird nur einer davon als gedrückt 
gehalten erkannt. Wenn du drei drückst, kann eine vierte "phantom" Taste 
dazu kommen, je nach Kombination.

Das ist bei den "guten" Gaming Tastaturen anders. Ich weiß allerdings 
nicht, ob die Unterschiede auch bei der Texteingabe auffallen oder nur 
in Spielen.

von Stefan F. (Gast)


Lesenswert?

Tastertör schrieb:
> Solltest du mal Cortex-M3/M4/M7 Prozessoren einsetzen, ein kleiner Tipp
> für dich: verwende nach Möglichkeit nur 32 Bit Variablen, damit das
> Programm nicht ausgebremst wird

Nach meinem Kenntnisstand ist der Zugriff auf 8/16 bit Variablen im RAM 
nicht langsamer, als 32 bit. Nur wenn Parameter über CPU Register (an 
Funktionen) übergeben werden, kommt ein extra Konvertier-Schritt dazu.

von Tastertör (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Nach meinem Kenntnisstand ist der Zugriff auf 8/16 bit Variablen im RAM
> nicht langsamer, als 32 bit.

Darum geht es nicht. Bei Berechnungen, Vergleichen, ... müssen 8 Bit 
Werte zuerst auf 32 Bit "aufgepustet" werden. Auf einem STM32F4xx zum 
Beispiel kann sich dann die ISR für das Entprellen schnell von 0,3 auf 
0,35 µs erhöhen.
Wie oben schon richtig erkannt, sollte man die Laufzeiten ja immer im 
Auge behalten ;-)

von Stefan F. (Gast)


Lesenswert?

Tastertör schrieb:
> Darum geht es nicht. Bei Berechnungen, Vergleichen, ... müssen 8 Bit
> Werte zuerst auf 32 Bit "aufgepustet" werden.

Eben nicht, wenn Variable im RAM liegt. Da passiert die Konvertierung in 
einem Abwasch mit dem Lade- und Speichervorgang.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Stefan ⛄ F. schrieb:
> Wenn du auf einer normalen Tastatur zum Beispiel "c" und "b"
> gleichzeitig drückst und fest hältst, wird nur einer davon als gedrückt
> gehalten erkannt.

Erkannt von der PC-Software vielleicht. In einem Editor macht das ja 
auch keinen Sinn. Der holt sich die Tastendrücke vom Betriebsystem, 
welches solche Doppeltastendrücke softwaremäßig herausausfiltert.

Aber ich weiß (vor allem durch das Projekt STECCY), wofür ich 
jeweils einen PS/2- und USB-Tastaturtreiber geschrieben habe, dass 
stinknormale PS/2 und USB-Tastaturen (z.B. von Logitech) durchaus beide 
(und sogar noch mehr) Tastendrücke melden - und auch das Loslassen. Und 
man bekommt sie auch gemeldet vom Betriebssystem, wenn man die richtigen 
Funktionen dafür aufruft.

Dioden braucht man dafür auch nicht. Es reicht, wenn die Zeilentreiber 
der Matrix mit OpenDrain-Outputs arbeiten.

Es kann natürlich sein, dass Gamer-Tastaturen die Zeilen aktiv mit 
PushPull betreiben, um eine Klitzekleinigkeit schneller zu sein als 
OpenDrain. Dann braucht man die Dioden natürlich. Aber es ist eine Mär, 
dass normale PC-Tastaturen das gar nicht hinbekommen ohne Dioden.

: Bearbeitet durch Moderator
Beitrag #6592444 wurde von einem Moderator gelöscht.
von Stefan F. (Gast)


Lesenswert?

Frank M. schrieb:
> Dioden braucht man dafür auch nicht. Es reicht, wenn die Zeilentreiber
> der Matrix mit OpenDrain-Outputs arbeiten.

Es scheitert an bestimmten Kombinationen von 3 tasten. Beispiel:
1
        |      |
2
        |      |
3
--------A------B--------
4
        |      |
5
        |      |
6
--------C------D--------
7
        |      |
8
        |      |

Drücke drei dieser Tasten gleichzeitig, dann "denkt" der Controller, du 
hättest auch die vierte gedrückt.

Siehe https://de.wikipedia.org/wiki/Tastatur und 
https://www.gebe.net/download/ghostkey_d.pdf

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Stefan ⛄ F. schrieb:
> Drücke drei dieser Tasten gleichzeitig, dann "denkt" der Controller, du
> hättest auch die vierte gedrückt.

Nein, wieso denn?

Nehmen wir an, ich drücke Tasten A, B und C.

1. Fall:

Ich setze beide Zeilen auf hochohmig (OpenDrain) mit Pullup. Ich bekomme 
auf beiden Spalten ein HIGH: Kein Tastendruck erkannt.

2. Fall:

Ich setze die erste Zeile auf Low, die zweite auf hochohmig (openDrain). 
Ich bekomme beim Lesen auf beiden Spalten ein Low: A & B erkannt!

3. Fall:

Ich setze die erste Zeile auf hochohmig (openDrain) und die zweite Zeile 
auf Low. Ich bekomme beim Lesen in der ersten Spalte ein Low und in der 
zweiten Spalte ein High: C erkannt, D als nicht gedrückt erkannt!

4. Fall:

Den gibt es nicht, kein Mensch ist so blöd, mehr als eine Zeile auf Low 
zu ziehen.

Fazit: Es werden A, B und C zuverlässig als gedrückt erkannt. D wird als 
nicht-gedrückt erkannt. Die Welt ist also vollkommen in Ordnung.

Wohlgemerkt: OpenDrain-Outputs arbeiten von der Logik genauso wie 
PushPull-Outputs mit nachgeschalteter Diode. Pullups braucht man in 
beiden Fällen.

P.S.
Deine Links beschreiben Tastatur-Controller, die es so schon seit 20 
Jahren nicht mehr gibt. Die AVR-8-Bitter können auch keinen 
OpenDrain-Output, aber das heisst nicht, dass es unmöglich wäre 
(OpenDrain kann man bei AVRs emulieren, indem man sie auf Input mit 
Pullup stellt). STM32 können das von Haus aus.

: Bearbeitet durch Moderator
von Stefan F. (Gast)


Lesenswert?

Wenn drei von den vier tasten gleichzeitig gedrückt sind, dann sind alle 
4 Leitungen miteinander verbunden. Ganz egal welche Spannungen/Ströme du 
da anlegst: Ob der vierte Taste jetzt auch noch gedrückt wird oder 
nicht, kann man unmöglich erkennen. Denn deren Anschlüsse sind bereits 
durch die anderen 3 Taster miteinander verbunden.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Stefan ⛄ F. schrieb:
> Wenn drei von den vier tasten gleichzeitig gedrückt sind, dann sind alle
> 4 Leitungen miteinander verbunden.

Stimmt, da hast Du recht, hier habe ich zu kurz gedacht. Aber trotzdem 
kann man den gleichzeitigen Druck von "b" und "c" erkennen, sind ja nur 
2 Tasten ;-)

Ich werde das aber nochmal mit einer Billig-Tastatur von Logitech (um 
die 10 EUR) nochmal testen. Bei meinen Tests für STECCY waren sogar 
5 Tastendrücke kein Problem. Kann aber gut sein, dass es hier auf die 
Kombination ankommt.

von Stefan F. (Gast)


Lesenswert?

Probierte mal Q A S W.

Drücke eine und halte sie, drücke dann noch eine und halte sie, ...

Die dritte und vierte Taste wird ignoriert, weil sie zu einem Phantom 
führen würde.

Gegentest: Q X K L, die werden alle vier erkannt, weil sie nicht so ein 
Quadrat in der Matrix bilden.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Stefan ⛄ F. schrieb:
> Probierte mal Q A S W.

Gerade hier im Eingabefenster probiert:

qqqqqqaaaaaaaaaaaaaaaaaaaaaaaassssssssswwwwwwwwwwwwwwwwwwwwwwwww

Diese 4 Tasten scheinen bei einer Logitech, an der ich sitze, zumindest 
nicht im Quadrat miteinander verbunden zu sein.

EDIT:

qqqqqxxxxkkkkkkkkkkkkk

Das L kommt hier nicht. Gratuliere.

Letzter Versuch:

bbbbbbbbbbbbbbbcccccccccccccccccccc

"b" und "c" allein klappen natürlich - entgegen Deiner ursprünglichen 
Aussage ;-)

: Bearbeitet durch Moderator
von Stefan F. (Gast)


Lesenswert?

Frank M. schrieb:
> Diese 4 Tasten scheinen bei einer Logitech, an der ich sitze, zumindest
> nicht im Quadrat miteinander verbunden zu sein.

Kommt halt auf die Tastatur an. Meine ist eine Cherry JG-08 (nichts 
besonderes).

von Gerald O. (garry)


Lesenswert?

Bauform B. schrieb:
> Was haltet ihr denn von einer statischen(?) analogen(?) Matrix wie im
> Bild? Die Kondensatoren filtern Störimpulse, die Software darf also auf
> die erste Flanke reagieren. Bonus: nur 4 Pins für 20 Tasten und weniger
> Umweltverschmutzung durch rein statische Signale.
>
> Wenn der ADC Daten in einem von (hier) 5 Fenstern liefert, gilt die
> Taste als gedrückt und kann von einer normalen Entprellroutine
> verarbeitet werden.

Man sollte darauf achten dass die Fenster so gewählt sind, das zwei 
gedrückte Tasten nicht zur Fehlinterpretation in Form der Erkennung 
einer dritten Taste führen die gar nicht betätigt ist.
Solche Beschaltungen werden genommen wenn nicht genügend digitale Ports 
zur Verfügung stehen bzw. mit wenigen Leitungen ein Tastenfeld verbunden 
werden soll. Ansonsten an die Analog-Tastatur eigentlich nur Nachteile 
gegenüber der digitalen Matrix (Mehrfachtasten-Erkennung, Ruhestrom, 
Weckfähigkeit...)

Garry

von Gerald O. (garry)


Lesenswert?

Tastertör schrieb:

> Jemand, der 16 Bit Variablen in ISRs als Bedrohung empfindet, ist schon
> ein wenig dejustiert.

Kann man so sehen wenn man mit Scheuklappen nur auf >= 16Bit-Systemen 
bzw. 8Bit mit reichlich Reserve unterwegs ist.

Garry

: Bearbeitet durch User
von Einer K. (Gast)


Lesenswert?

Gerald O. schrieb:
> Kann man so sehen wenn man mit Scheuklappen nur auf >= 16Bit-Systemen
> mit reichlich Reserve unterwegs ist.

Also...
Mir wurde hier mal erklärt, dass Arduino voll scheiße ist, weil der 
millis() Zähler nur 32Bit breit ist, denn 64 Bit wäre viel sinnvoller.

Jetzt weiß ich gar nicht mehr, wem ich ich in dem Zusammenhang glauben 
darf.
;-)

von Gerald O. (garry)


Lesenswert?

Stefan ⛄ F. schrieb:
> Wenn du auf einer normalen Tastatur zum Beispiel "c" und "b"
> gleichzeitig drückst und fest hältst, wird nur einer davon als gedrückt
> gehalten erkannt. Wenn du drei drückst, kann eine vierte "phantom" Taste
> dazu kommen, je nach Kombination.

Auf meiner Cherry G230 kann ich eine davon gerückt halten und die zweite 
wird erkannt - auch umgekehrt. Also kein Problem der Tastenmatrix. Würde 
ich jetzt auch nicht als Gamer-Tastatur sehen.

Garry

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Gerald O. schrieb:
> Liegen die grundsätzlich diagonal in der Matrix oder hängt das vom
> Hersteller ab?

Falls das eine ernst gemeinte Frage war, formuliere sie bitte 
verständlich.

von Gerald O. (garry)


Lesenswert?

Arduino Fanboy D. schrieb:
> Gerald O. schrieb:
>> Kann man so sehen wenn man mit Scheuklappen nur auf >= 16Bit-Systemen
>> mit reichlich Reserve unterwegs ist.
>
> Also...
> Mir wurde hier mal erklärt, dass Arduino voll scheiße ist, weil der
> millis() Zähler nur 32Bit breit ist, denn 64 Bit wäre viel sinnvoller.
Von mir nicht...

> Jetzt weiß ich gar nicht mehr, wem ich ich in dem Zusammenhang glauben
> darf.
> ;-)

Wenn man den Arduino einem W10-Programmierer nahe bringen will können 
die Argumente anders aussehen...
Ich bevorzuge auf 8Bit-Systeme überlaufende 8Bit "Timer" um 
Zeitdifferenzen zu ermitteln wenn man nicht gerade hochauflösende 
Langzeit-Timer benötigt.
Das Überlaufen von 255->0 ist gar kein Problem wie manche meinen, nur 
muss man darauf achten dass keine Zeitdifferenzen > 255 vorkommen wenn 
man keinen Zusatzaufwand betreiben will.

Garry

von Gerald O. (garry)


Lesenswert?

Stefan ⛄ F. schrieb:
> Gerald O. schrieb:
>> Liegen die grundsätzlich diagonal in der Matrix oder hängt das vom
>> Hersteller ab?
>
> Falls das eine ernst gemeinte Frage war, formuliere sie bitte
> verständlich.

> |      |
>         |      |
> --------A------B--------
>         |      |
>         |      |
> --------C------D--------
>         |      |
>         |      |

Hier sind C und B  (bzw. Aund D) gleichzeitig gedrückt ein Problem wenn 
die Matrix keine Dioden hat. AC oder AB ocer BD oder CD gleichzeitig 
gedrückt sind auch ohne Diode kein Problem. Daher die Frage ob es eine 
Norm gibt wie die Buchstaben in der Matrix verteilt sind (z.B. aus 
irgendwelchen Häufigkeitsverteilungen erstellt) oder ob das jeder 
Hersteller anders macht.

von Stefan F. (Gast)


Lesenswert?

Gerald O. schrieb:
> ob es eine Norm gibt wie die Buchstaben in der Matrix verteilt sind

Nee, macht jeder Hersteller anders.

von A. S. (Gast)


Lesenswert?

Gerald O. schrieb:
> Hier sind C und B  (bzw. Aund D) gleichzeitig gedrückt ein Problem wenn
> die Matrix keine Dioden hat.

Na, Du musst schon 3 gleichzeitig drücken: Aus einer Reihe 2 und aus 
einer Spalte 2. Dann wird der 4 te mitgedrückt.

Es muss Quasi ein Kreis (bzw. Rechteck) geschlossen werden.

Beispiel: A,B und C sind gedrückt und schließen so D kurz.

Bei einer konkreten Tastatur kann man das meist in SW-Lösen, wenn man 
die Matrix ein Wenig unterbesetzt (z.B. nur 20 Tasten bei 5x5-Matrix) 
und/oder konkrete Kombinationen als Fehler meldet (z.B. Pfeil hoch und 
Pfeil runter gleichzeitig, bzw. zwei beliebige).

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.