Hmmmm, auch wenn ich mich langsam unbeliebt mache
aber ich habe schon wieder was zum mosern
Sorry Casio, ist echt nicht gegen Dich gement und Du darfst es auch nicht perönlich aufnehmen, ich will Neuuser auch nur auf die richtigen Sprünge helfen ohne ihm dabei gleich eine Komplettlösung vorzukaufen.
Lösungen sind immer am besten, wenn man sie selbst erarbeitet und selbst auf seine eigene Lösung stolz sein kann.
Also, was gibt es diesmal zum aussetzen ....
Zum Thema: Prellen eines Schalters bedeutet, das ein mechanischer Kontakt nicht nur schließt / öffnet, sondern bedingt durch Konstruktion, Federkonstante der mechanischen Teile, Masseträgheitsmoment und Impulserhaltung zunächst nicht in dem gewünschten Zustand verbleibt sondern schwingt. Bedeutet, Du willst einen Schalter schließen und er springt noch x-mal auf bevor er wirklich geschlossen bleibt oder Du wilst ihn öffnen und er schließt noch x-mal durch "Einschwingvorgänge" der Mechanik. Das ist ganz normal. Es gibt wohl ganz hochwertige Taster/Schalter die nicht prellen aber die kann keiner bezahlen.
Einfache und billige Taster/Schalter prellen x-fach. 20 Mal auf/zu/auf habe ich hier durchaus schon beobachtet. Abhängig wie schnell nun Dein Mega rennt bekommst Du alles haar-klein mit und manche zustände vielleicht sogar doppelt.
Also was tun? Man entprellt. Das bedeutet, Du prüfst den Bit-Zustand eines Pins an dem der Schalter hängt auf den gewünschten Schaltzustand. Wenn das gewünschte Ereignis eintritt so wartet man eine bestimmte Zeit x (meistens reichtn 10-15 ms, mit 20-25 ms bist Du auf der sichereren Seite) und man liest den Pin Wert nochmals und schaut, ob der Pegel des Pin's nun einen stationären Zustand eingenommen hat. Wenn ja so kann zu der gewünschten Funktion gesprungen und der Code abgearbeitet werden. Wenn nein so geht man davon aus, das das Eregnis nur eine Störung war und ignoriert die Eingabe.
Weiter:
Der von Dir vorgeschlagene Lösungsweg kann so funktionieren. Aber er ist nur die halbe Wahrheit bzw. nur die Hälfte des Weges zum erfolg?
WO BITTE BLEIBT DEINE ENTPRELLUNG?
Bitwait entprellt nicht! Bitwait prüft nur auf einen Zustand und macht weiter wenn der Zustand erreicht wird. In der aktuellen Implementierung wird das nur das Problem von Neuuser nicht vollständig lösen da der Taster nach wie vor prellt. Die wichtigste Routine, nämlich das Warten (25ms) und das erneute prüfen des Bits fehlt. Wenn neuuser die Lösung so fertig und komplett umsetzt wird er wieder mit springenden Werten kämpfen müssen.
Der Mega 8 läuft immerhin mit 1 MHz, bedeutet 1µs für einen Takt und viele Befehle benötigen nur einen Takt um zu arbeiten. Angenommen der Taster von Neuuser prellt nur für 1 ms dann rennt der Mega trotzdem schon mal 1000 Mal im Kreis (ideal betrachtet, lass es nur 10mal sein, das reicht) und die Variablen und Bit-Abfragen machen grad was sie wollen.
So, nun richte ich mein Wrt an Neuuser:
Die Lösung von Casio ist ein guter Grundbaustein um weiter zu machen. Aber bitte, entprellen nicht vergessen. So nach dem Schema:
- Bitwait
- warten
- Pin lesen
- vergleichen
- OK dann weiter
- NOK mache nix
Grüße,
Markus
aber ich habe schon wieder was zum mosern
Sorry Casio, ist echt nicht gegen Dich gement und Du darfst es auch nicht perönlich aufnehmen, ich will Neuuser auch nur auf die richtigen Sprünge helfen ohne ihm dabei gleich eine Komplettlösung vorzukaufen.
Lösungen sind immer am besten, wenn man sie selbst erarbeitet und selbst auf seine eigene Lösung stolz sein kann.
Also, was gibt es diesmal zum aussetzen ....
Zum Thema: Prellen eines Schalters bedeutet, das ein mechanischer Kontakt nicht nur schließt / öffnet, sondern bedingt durch Konstruktion, Federkonstante der mechanischen Teile, Masseträgheitsmoment und Impulserhaltung zunächst nicht in dem gewünschten Zustand verbleibt sondern schwingt. Bedeutet, Du willst einen Schalter schließen und er springt noch x-mal auf bevor er wirklich geschlossen bleibt oder Du wilst ihn öffnen und er schließt noch x-mal durch "Einschwingvorgänge" der Mechanik. Das ist ganz normal. Es gibt wohl ganz hochwertige Taster/Schalter die nicht prellen aber die kann keiner bezahlen.
Einfache und billige Taster/Schalter prellen x-fach. 20 Mal auf/zu/auf habe ich hier durchaus schon beobachtet. Abhängig wie schnell nun Dein Mega rennt bekommst Du alles haar-klein mit und manche zustände vielleicht sogar doppelt.
Also was tun? Man entprellt. Das bedeutet, Du prüfst den Bit-Zustand eines Pins an dem der Schalter hängt auf den gewünschten Schaltzustand. Wenn das gewünschte Ereignis eintritt so wartet man eine bestimmte Zeit x (meistens reichtn 10-15 ms, mit 20-25 ms bist Du auf der sichereren Seite) und man liest den Pin Wert nochmals und schaut, ob der Pegel des Pin's nun einen stationären Zustand eingenommen hat. Wenn ja so kann zu der gewünschten Funktion gesprungen und der Code abgearbeitet werden. Wenn nein so geht man davon aus, das das Eregnis nur eine Störung war und ignoriert die Eingabe.
Weiter:
Der von Dir vorgeschlagene Lösungsweg kann so funktionieren. Aber er ist nur die halbe Wahrheit bzw. nur die Hälfte des Weges zum erfolg?
WO BITTE BLEIBT DEINE ENTPRELLUNG?
Bitwait entprellt nicht! Bitwait prüft nur auf einen Zustand und macht weiter wenn der Zustand erreicht wird. In der aktuellen Implementierung wird das nur das Problem von Neuuser nicht vollständig lösen da der Taster nach wie vor prellt. Die wichtigste Routine, nämlich das Warten (25ms) und das erneute prüfen des Bits fehlt. Wenn neuuser die Lösung so fertig und komplett umsetzt wird er wieder mit springenden Werten kämpfen müssen.
Der Mega 8 läuft immerhin mit 1 MHz, bedeutet 1µs für einen Takt und viele Befehle benötigen nur einen Takt um zu arbeiten. Angenommen der Taster von Neuuser prellt nur für 1 ms dann rennt der Mega trotzdem schon mal 1000 Mal im Kreis (ideal betrachtet, lass es nur 10mal sein, das reicht) und die Variablen und Bit-Abfragen machen grad was sie wollen.
So, nun richte ich mein Wrt an Neuuser:
Die Lösung von Casio ist ein guter Grundbaustein um weiter zu machen. Aber bitte, entprellen nicht vergessen. So nach dem Schema:
- Bitwait
- warten
- Pin lesen
- vergleichen
- OK dann weiter
- NOK mache nix
Grüße,
Markus