Es gibt bereits mehrere Fragen in der Nähe dieses Themas, aber sie beziehen sich entweder auf eine andere µC-Familie oder auf das Lesen analoger Spannungen oder andere Sonderfälle.
Also hier gehts: Ich möchte eine Taste lesen und eine LED vom selben I/O-Pin auf dem ATmega32U4 ansteuern. Stimmt etwas nicht mit:
Dann würde der Pin natürlich immer wieder in den Eingabemodus (mit internem Pullup) versetzt und die meiste Zeit im Ausgabemodus sein.
Soweit ich das beurteilen kann, beträgt der interne Pullup bei diesem µC 50-100 K, also sollten die 22 K mit der Taste in der Lage sein, das ausreichend zu versenken.
Im Ausgabemodus, wenn die Taste nicht gedrückt wird, ist alles normal; Wenn die Taste gedrückt wird, fügt dies einen Pfad durch 22K zu GND hinzu, wodurch die LED möglicherweise etwas dunkler wird oder nicht. Wie auch immer, in meiner Anwendung wäre es überhaupt egal, wie die LED aussieht, während diese Taste gedrückt wird.
Besteht die Möglichkeit etwas zu beschädigen? Irgendeine Falle, die nicht offensichtlich ist?
Mach das nicht so wie du es beschreibst. Wie ich verstehe, würde Ihr cicruit wie folgt aussehen:
Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan
Angenommen, der GPIO befindet sich im Eingabemodus (hohe Impedanz) und die Taste ist nicht gedrückt. Die Spannung am GPIO liegt ungefähr bei der LED-Durchlassspannung. Obwohl es sehr wenig Strom geben wird, gibt es einen Pfad durch Rpullup-R2-D1, und am MCU-Pin werden etwa 1,8 V ~ 2,5 V (je nach verwendetem LED-Typ) anliegen bedeutet , dass der Logikpegel außerhalb der Spezifikationen liegt (dies hängt von der verwendeten Versorgungsspannung ab, aber höchstwahrscheinlich liegen Sie zwischen hohen und niedrigen Spannungsgrenzen). Die MCU verhält sich also nicht konsistent, und Sie können nicht wirklich erkennen, ob die Taste gedrückt ist oder nicht. Die MCU kann in diesem Fall auch übermäßig viel Strom verbrauchen.
Hier ist, was ich herausgefunden habe:
Simulieren Sie diese Schaltung
Sie müssen den GPIO entweder auf niedrigem Pegel ansteuern, um die LED einzuschalten, oder auf hohe Impedanz einstellen, um die LED auszuschalten und schließlich den Tastenstatus zu lesen. Der GPIO darf von der Software niemals aktiv hoch getrieben werden, da bei gleichzeitigem Drücken des Tasters der Pin kurzgeschlossen wird.
Der offensichtliche Nachteil der obigen Schaltung besteht darin, dass die LED beim Drücken der Taste vollständig eingeschaltet ist. Aber in Ihrem Fall scheint es kein Problem zu sein, und abgesehen davon ist diese Schaltung einfach, sicher für die MCU (wenn Sie die obige Regel befolgen) und garantiert korrekte Eingangspegel.
Die einfache Lösung besteht darin, den LED-Widerstand, die LED und die Taste in einer Reihe zu platzieren und die E / A zwischen LED und Taste zu verbinden.
Der I/O ist auf Open-Drain-Ausgang eingestellt, was bedeutet, dass immer nur der Pull-Transistor aktiviert ist. Jetzt können Sie den Pin lesen, um die Taste abzutasten, während der Ausgangskreis schwebt, und die LED einschalten, indem Sie den Ausgangskreis auf niedrig setzen.
Anonym