Dieses Problem ist Jahrzehnte alt, aber ich sehe auf dieser Seite keine direkte Antwort darauf. Ich möchte Folgendes:
Diese Schaltung erlaubt nur, den Zustand der Taste aus dem Inneren des Mikrocontrollers zu überprüfen. Nichts Besonderes. Meine Fragen:
Erstens haben viele Mikrocontroller und digitale Signalcontroller interne Pull-up-Widerstände. Hier ist ein Beispiel, ein Atmel ATMega164.
Typischerweise gibt es ein Register, mit dem die internen Pull-Ups ein- und ausgeschaltet werden können. Aufgrund von Variationen im Herstellungsprozess gibt es diese internen Pullups in einem sehr breiten Bereich und sind keine gute Wahl, wenn Sie eine sehr genaue Kontrolle über die Stromaufnahme in Anwendungen mit extrem niedrigem Stromverbrauch benötigen. Wenn es wichtig ist, die Anzahl der Komponenten gering zu halten, ist dies eine einfache Möglichkeit. Die Verwendung interner Pullups für das Hardware-Entprellen wäre keine gute Idee, da es nicht möglich ist, ihren genauen Wert vorherzusagen.
Ob der 100 Wert ist angemessen hängt davon ab. Wenn es nur ein Schalter ist, der regelmäßig von einem Benutzer umgelegt wird, dann 100 wäre eine gute Wahl, um den Stromverbrauch zu minimieren. Für Dinge, die schneller schalten, wie z. B. Drehgeber, würde ich den Prozess durchlaufen
Wenn also der maximale Senkenstrom pro GPIO-Pin 10 mA beträgt und bei 5 V betrieben wird: . Wenn Sie diesen R-Wert so klein wie möglich halten, werden die schärfsten Flanken und höchsten Schaltfrequenzen ermöglicht.
Sie können einfacher werden.
Verwenden Sie einfach einen internen Pull-Up/Pull-Down-Widerstand in Ihrem Mikrocontroller.
100k ist ausreichend, aber interne Pullups könnten in einigen MCUs etwas niedriger sein, zum Beispiel in AVR atmega8 sind es 30-80kOhm für Reset-Pullup und 20-50kOhm für alle anderen I/O-Pins.
Besser kann nicht ohne spezifische Kriterien zum Messen beantwortet werden, die Sie nicht angegeben haben. In den meisten Fällen ist die von Ihnen gezeigte Topologie in Ordnung. Zwei Varianten könnten je nach Situation "besser" sein:
Viele Mikrocontroller haben interne Pullups an einigen ihrer Pins. Diese sind genau für diese Situation gedacht. Der Widerstand ist dann intern im Mikro und Sie stellen ihn irgendwo ein, um ihn zu aktivieren. Das einzige erforderliche externe Teil ist nur die Drucktaste selbst.
Eine weitere nützliche Variante, die Sie im Auge behalten sollten, sind Low-Power-Designs, bei denen die Taste ein Schalter sein könnte, der für längere Zeit geschlossen werden kann. In diesem Fall möchten Sie den langfristigen Durchschnittsstrom durch den Pullup-Widerstand minimieren. Sie machen es so groß wie möglich, aber es gibt Grenzen und Nachteile, wenn Sie es zu groß machen. Stattdessen schalten Sie den Pullup jeweils nur für wenige µs ein, um eine Tastenmessung vorzunehmen. Wenn Sie die Taste alle 1 ms aktivieren und der Pullup für 10 µs eingeschaltet ist, wird der durchschnittliche Pullup-Strom um das 100-fache reduziert. Mit einem externen Widerstand verwenden Sie einen anderen Pin, um die Oberseite des Pullups anzusteuern. Mit einem internen Pullup aktivieren/deaktivieren Sie es nach Bedarf in der Firmware.
Darauf habe ich hier schon ausführlich geantwortet .
Besser als dieses einfache Design? Ja. Werfen Sie eine Kappe darauf und Sie haben einen einfachen Hardware-entprellten Schalter.
Der Kondensator wäre eine gewöhnliche 0,1-uf-Keramikkappe. Der Widerstand wäre ein 10k. Diese Seite enthält alle Einzelheiten darüber, warum. Kurz gesagt, eine Entprellschaltung verhindert, dass der Mikrocontroller fälschlicherweise mehrere Betätigungen registriert, wenn Sie die Taste drücken. Das Widerstand/Kondensator-Setup glättet das mechanische Springen der Taste, sodass es sich um einen stetigen Übergang handelt.
BEARBEITEN - Der Kommentar, den ich unten gemacht habe, sollte weiterverfolgen, was Olin später über die Schaltung mit einem Kondensator gesagt hatte, um angeblich eine Entprellung hinzuzufügen. Es tut mir leid, dass es an der falschen Stelle zu erscheinen scheint - vielleicht kann jemand das beheben, weil ich offensichtlich zu blind oder dumm bin, um zu sehen, wie ich es hätte tun sollen !!
Ich stimme Olin zu - es bietet keine gute Entprellung. Ich würde auch hinzufügen, dass das Kurzschließen des Kondensators einen großen Stromstoß verursachen kann , der den Mikroprozessor zurücksetzen kann, wenn das PCB-Layout nicht wirklich gut ist. Einige Schalter benötigen einen Benetzungsstrom, um korrekt und zuverlässig zu funktionieren, und 100 k können für einige Schalter (insbesondere Membranschalter) zu hoch sein.
NickHalden