Die Frage kann auf jeden Mikrocontroller mit E / A-Funktionen angewendet werden, aber ich arbeite derzeit mit dem beliebten ATmega328p. Betrachten Sie die folgende Schaltung: Ein einfacher SPST-Normal-Open-Schalter mit einem 10k-Pull-up-Widerstand und einem angeschlossenen Keramikkondensator, der an einen beliebigen E / A-Port angeschlossen ist. Der spezifische Pin sollte offensichtlich als INPUT im jeweiligen DDRx konfiguriert sein. Das Datenblatt beschreibt im Abschnitt DC-Eigenschaften einen Eingangsleckstrom-E / A-Pin \ $ (I_ {IL} / I_ {IH}) \ $ span> von 1µA, weit am Horizont liegt der Gleichstrom pro E / A-Pin bei 40,0 mA. Überhaupt kein Problem.
DDRD = 0x00; // Gesamter Port als INPUT
Bedenken Sie nun, dass ich vergessen habe, dass der angegebene Pin als Eingang gesetzt werden muss, ich setze ihn als Ausgang und setze den Port auf HIGH.
DDRD = 0xFF; // Gesamter Port als OUTPUT
PORTD = 0xFF; // Gesamter Port HIGH
Obwohl das Datenblatt keine Ausgangsimpedanz enthält, kann es basierend auf den angegebenen Diagrammen auf 25 Ω geschätzt werden. Jetzt, wenn die Taste gedrückt wird, fließt der Strom von der 5-V-Quelle mit einem 25-Ω-Widerstand und einem vernachlässigbaren Widerstand aufgrund der Kupferspur durch den Mikrocontroller. Dies erzeugt theoretisch einen Überstrom von 160 mA über dem Gleichstrom pro E / A-Pin-Decke. Könnte dies den Port und das Gerät braten? Analog könnte das gleiche Problem auftreten, wenn ich auf positive Logik umschalte und den Port auf LOW setze:
DDRD = 0xFF; // Gesamter Port als OUTPUT
PORTD = 0x00; // Gesamter Port LOW
In Anbetracht der Tatsache, dass diese Art von Schaltung eifrig empfohlen wird, wie scheint es keine Probleme zu bringen? Nun, zurück zur ursprünglichen Frage, sollte ich nicht äußerst vorsichtig sein, wenn ich einen E / A-Pin als Ausgang einstelle? Oder zumindest einen kleinen Vorwiderstand als primitiven Schutz anbringen?
Hinweis: Kein englischer Muttersprachler. Sie können den Beitrag jederzeit bearbeiten, wenn Sie etwas Unangenehmes sehen.