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
voidsetup()
6
{
7
pinMode(PIN_BUTTON,INPUT_PULLUP);
8
}
9
10
voidloop()
11
{
12
// Hier was anderes machen
13
// ...
14
15
// Funktion für die Taste aufrufen
16
loopButton();
17
}
18
19
voidloopButton()
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
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... 😉
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.
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.
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?
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?
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.
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.
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.... :/
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.
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.
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.
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!
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
EntprellTimerentprell{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.
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.
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.
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
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.
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.
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.
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
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 ----------------------------
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
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.
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
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.
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
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.
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.
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.
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.
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
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?
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.
> 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).
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.
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
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.
>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.
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
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?
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.
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 ! :´(
>> 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
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?
> 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
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.
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". ;-)
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.
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.
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.
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 ;-)
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
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!
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
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)
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
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.
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?
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.
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!
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.
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! :)
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
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
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
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.
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.
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
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.
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.
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".
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 meistenmeistens
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.
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.
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.
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.
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.
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.
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.
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
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
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.
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.
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
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.
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.
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
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
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.
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.
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?
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?
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.
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
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
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
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.
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.
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
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.
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
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....
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
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.
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.
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.
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
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
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.
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.
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.
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 :-)
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.
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.
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
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
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.
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
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.
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
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.
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.
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.
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
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.
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.
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.
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.
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
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.
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
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
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.
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.
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.
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.
> 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).
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.
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.
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.
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.
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.
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
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
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
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.
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
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.
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.
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
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
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.
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
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.
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
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.
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. :)
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
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
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.
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
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
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
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).
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
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.
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.
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.
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
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
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.
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 ;)
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"?-/
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
Martin V. schrieb:> Ja, so hab ich es> geschrieben und auch gemeintMartin 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?
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.
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.
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.
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
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.
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.
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
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.
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?
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.
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
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.
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.
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
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
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
>> 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.
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
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
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.
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
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.
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???
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.
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.
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.
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.
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?
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?
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.
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.
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)?
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.
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.
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.
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.
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.
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.
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.
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
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.
Nach 100.000 Schaltvorgängen schaust Du Dir die Kontakte mit einem
Elektronenmikroskop an.
Dann vergleiche die Kontakte die Gleichstrom oder Wechselstrom
geschaltet haben.
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.
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.
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.
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?
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).
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
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.
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.
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
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.
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)
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
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.
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
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
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.
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.
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.
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.
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.
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.
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.
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.
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
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
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
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?
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.
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.
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 ;-)
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.
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.
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:
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.
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.
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.
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.
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 ;-)
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).
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
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
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.
;-)
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
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.
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
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.
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).