Naja, wenn Du Taste 3 drückst, erscheint das als kurz 1- kurz 2- 3.
Du müsstets die Gültigkeit jedes möglichen Zustandes auch noch über die Zeit ermitteln.
Hallo Experten,
ich weiß das Thema "Entprellen" gab's schon recht häufig, aber meistens bezog sich das immer auf TTL-Logik.
Ich muss Pins sparen und wollte daher sowas wie ne "Ein-Draht-Tastatur" bauen. Naja es handelt sich dabei um 4 Taster, die so über Widerstände verdrahtet sind, dass durch den jeweiligen Druck eine gewisse Spannung erzeugt (aufaddiert) wird.
Okay das ist nicht das Problem.
Es ist aber bekannt, dass Tasten prellen.
Könnte ich nicht einfach das Prellen mit nem brutalen "0Hz-Tiefpass" rausfiltern? Okay, die Flanke ist dann nicht mehr steil, aber das macht ja nicht wirklich was, weil ich würde dann gewisse Grenzen einbauen, wann eine Taste als gedrückt gilt und wann nicht. Z.B.
1) 0V keine Taste gedrückt
2) 1,24..1,26V = Taste 1 gedrückt
3) 2,49..2,51V = Taste 2 gedrückt
4) 3,74..3,76V = Taste 3 gedrückt
...
Habe ich einen denkfehler?
Grüße Simon
Naja, wenn Du Taste 3 drückst, erscheint das als kurz 1- kurz 2- 3.
Du müsstets die Gültigkeit jedes möglichen Zustandes auch noch über die Zeit ermitteln.
und was wenn du 1und2 drückst?
Diese Ein-Draht-Tastatur wird gern genutzt, z.B. auf dem C-Control 1 Erweiterungsboard oder auf dem RN-Control 1.4 (ältere Versionen bestimmt auch).
Du machst einfach folgendes: Du liest immer 64 Werte ein, und bildest dann das mathematische Mittel. Dabei kannst Du auch auf eine Division verzichten, wenn Du ein Vielfaches von 2 benutzt, dann kannst Du einfach shiften. Bsp:
8 Werte addieren, shift 3 mal nach rechts. Dann hast Du den Durchschnittswert der 8 Werte. Bei 64 Werten wäre es dann eben 6 mal.
Dadurch kannst Du Prellungen sehr einfach "entwerten", da sich der "dauerhafteste" Wert durchsetzt. Und keine Angst, die Zeit ist noch ausreichend, das man nur kurz drücken muss, um einen dauerhaften Wert zu erreichen. Ansonsten auf 32 Werte runtergehen.
Beachten musst Du allerdings, dass Du in dem Fall unbedingt mit 16 Bit rechnen musst.
@MSN: Das kannst Du über 2er-Potenzen lösen...
Hi,
danke für die Tipps. Ja das mit den mehrfach wandeln und Mitteln schwärmte auch in meinen Kopf herum. Das Prellen der Schalter im Hochfrequenten Bereich wollte ich eben mit diesem Tiefpass abfangen.
thewulf: meinst du den brauch man bei deinem Verfahren noch? Eine zusätzliche Sicherheit wär's ja schon und viel verzögerung + Hardwareaufwand kommt ja nicht dazu...
Grüße Simon
Aud den analogen Tiefpass kann man verzichten. Ein Prellene rkenn man daran das der AD Wert schwankt. Eine Gültige Taste hat man also nur wenn sich die letzten (z.B. 4 Werte über 10 ms) Werte des AD Wandlers wenig unterscheiden.
Würde das dann so aussehen: Also ich hab einen Timer laufen - bei der entsprechenden ISR werden dann die zB 64 Werte genommen und gemittelt (shift). Wenn die ISR 4 mal aufgerufen wurde und die gemittelten Werte in nem definierten Bereich liegen kann ich von nem tastendruck ausgehen?
Danke
Simon
Bei nur 4 Tasten braucht man eigentlich gar nicht viel mitteln, da reicht die normale Auflösung des AD-wandlers, es sei denn man kriegt viel 50 Hz Störungen rein.
Normalerweise sollte es reichen in einen Interrupt immer die Gruppen von 4 oder 8 Werte in einen puffer zuschreiben. Wenn der Puffer voll ist kann man testen ob die Differenzen kleine sind (z.B. Differenz der nachbarn und 1.ter und letzter Wert). Wenn die Differenzen alle klein sind, kann man wohl von einem Stabilen gültigen wert ausgehen. Ob man dann den letzten Wert oder den Mittelwert nimmt sollte relativ egal sein. Als Interrupt könnte man einen Timer oder auch den AD-ready interrupts nehmen.
Wenn Du 64 Werte (was SEHR VIEL ist) nimmst, dann ist der Wert bereits "fertig genug", da brauchste keine 4 Werte mehr.
Vom Prinzip her so: (Pseudocode)
Code:while (1) { werte = 0; for (1 to 64) { werte += get_ADC(); } werte >>= 6; mache_was_mit_dem_wert(werte); }
@thewulf: Der Mittelwert von 64 Werten gibt schon relativ viel oversampling, hilft aber nicht dagegen das sich der Wert gerade ändert und man so einen mittelwert kriegt, der nicht zu der gerade gedrückten oder losgelassennen Taste passen muss. Das mittel von 64 Werten könnte gut gegen 50 Hz Störungen helfen, aber nicht gegen Prellen.
Um sicherzustelln , das man nicht gerade eine sich ändernde Spannung hat muß man wenigstens 2 Spannungswerte vergleichen. Nur wenn man mehrmals hintereinander etwa die gleiche Spannung mißt, kann man sicher sein, dass das es ein gültiger wert ist. Die Messungen sollten auchnicht zu schnell erfolgen, ein paar ms sollten schon dazwischen sein, um Prellen zu erkennen.
Lesezeichen